Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

spirv-val: Add Vulkan decoration interface #4831

Merged
merged 2 commits into from
Jul 7, 2022

Conversation

sjfricke
Copy link
Contributor

the successor of #4293 and closes #3154 and #3066

This adds the following:

  • VUID-StandaloneSpirv-Flat-04744
  • VUID-StandaloneSpirv-Flat-06201
  • VUID-StandaloneSpirv-Flat-06202

@alan-baker alan-baker merged commit bc5c876 into KhronosGroup:master Jul 7, 2022
@y-novikov
Copy link
Contributor

This triggers in angle_unittests when I try to roll into Chromium
https://chromium-review.googlesource.com/c/chromium/src/+/3752850
@alan-baker, could you PTAL where the problem is?

@ShabbyX
Copy link
Contributor

ShabbyX commented Jul 11, 2022

This is due to an ANGLE bug, we didn't emit DecorationFlat for gl_SampleID

@sjfricke sjfricke deleted the sjfricke-flat branch August 23, 2022 05:22
Comment on lines +823 to +844
if (decoration == SpvDecorationFlat ||
decoration == SpvDecorationNoPerspective ||
decoration == SpvDecorationSample ||
decoration == SpvDecorationCentroid) {
// VUID 04670 already validates these decorations are input/output
if (storage_class == SpvStorageClassInput &&
(models->size() > 1 || has_vert)) {
return vstate.diag(SPV_ERROR_INVALID_ID, var_instr)
<< vstate.VkErrorID(6202)
<< "OpEntryPoint interfaces variable must not be vertex "
"execution model with an input storage class for "
"Entry Point id "
<< entry_point << ".";
} else if (storage_class == SpvStorageClassOutput &&
(models->size() > 1 || has_frag)) {
return vstate.diag(SPV_ERROR_INVALID_ID, var_instr)
<< vstate.VkErrorID(6201)
<< "OpEntryPoint interfaces variable must not be "
"fragment "
"execution model with an output storage class for "
"Entry Point id "
<< entry_point << ".";
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't understand the phrasing used here:

  • "must not be {vertex,fragment} execution model"
    • how can a variable be an execution model?
      (is there a missing "for" in the middle there?)
  • it (effectively) claims vertex shaders can't have inputs and fragment shaders can't have outputs?!
    • without looking up e.g. VUID-StandaloneSpirv-Flat-06201 in the spec there is no way at all to tell that the error is talking about decorations on interface variables, not their storage classes
      (let alone which decorations, i.e. Flat/NoPerspective/Sample/Centroid)

It almost looks like there's a place left in the message for printing the decoration name, but that was forgotten? (e.g. after "must not be" one could add "decorated with Flat", though the rest of the message needs a bit of tweaking too)

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking at the PR this replaces, its version of the message uses LogStringForDecoration and overall seems readable, unlike this PR.

Despite the GH username change, it looks like both PRs are by @sjfricke so I don't understand how the message regression happened.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So I agree the error message is a little vague, can improve that! (unless you were planning on making the PR)

Sorry, I forgot about LogStringForDecoration ... I made both these PR a year apart and there were some spec changes in between that time too that was blocking the original PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

spirv-val does not validate Flat decoration requirement for builtins
6 participants