diff options
author | Jason Ekstrand <[email protected]> | 2016-05-24 13:59:10 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2016-05-24 21:12:56 -0700 |
commit | 961369d597ae44bd0c03660cd49ced43973ad269 (patch) | |
tree | 4ef0acba4dd570028c34034ac2f684e84eddbeb0 /src/compiler/spirv/vtn_variables.c | |
parent | 6f89e51c8477f21b64d1f4420b06e407de9022ff (diff) |
nir/spirv: Add explicit handling for all decorations
From time to time we have had cases where glslang has added a decoration we
don't handle and it has caused problems. This audit ensures that, for
every decoration, we either handle it or hit an unreachable() with an
accurate description of why we don't have to.
Diffstat (limited to 'src/compiler/spirv/vtn_variables.c')
-rw-r--r-- | src/compiler/spirv/vtn_variables.c | 40 |
1 files changed, 27 insertions, 13 deletions
diff --git a/src/compiler/spirv/vtn_variables.c b/src/compiler/spirv/vtn_variables.c index 0c7f0f76718..d156fb468c8 100644 --- a/src/compiler/spirv/vtn_variables.c +++ b/src/compiler/spirv/vtn_variables.c @@ -895,9 +895,6 @@ var_decoration_cb(struct vtn_builder *b, struct vtn_value *val, int member, /* Handle decorations that apply to a vtn_variable as a whole */ switch (dec->decoration) { - case SpvDecorationNonWritable: - /* Do nothing with this for now */ - return; case SpvDecorationBinding: vtn_var->binding = dec->literals[0]; return; @@ -1021,30 +1018,47 @@ var_decoration_cb(struct vtn_builder *b, struct vtn_value *val, int member, nir_var->data.pixel_center_integer = b->pixel_center_integer; break; } + + case SpvDecorationSpecId: case SpvDecorationRowMajor: case SpvDecorationColMajor: - case SpvDecorationGLSLShared: - case SpvDecorationPatch: + case SpvDecorationMatrixStride: case SpvDecorationRestrict: case SpvDecorationAliased: case SpvDecorationVolatile: case SpvDecorationCoherent: case SpvDecorationNonReadable: case SpvDecorationUniform: - /* This is really nice but we have no use for it right now. */ - case SpvDecorationCPacked: - case SpvDecorationSaturatedConversion: case SpvDecorationStream: case SpvDecorationOffset: + case SpvDecorationLinkageAttributes: + break; /* Do nothing with these here */ + + case SpvDecorationPatch: + unreachable("Tessellation not yet supported"); + + case SpvDecorationBlock: + case SpvDecorationBufferBlock: + case SpvDecorationArrayStride: + case SpvDecorationGLSLShared: + case SpvDecorationGLSLPacked: + case SpvDecorationBinding: + case SpvDecorationDescriptorSet: + case SpvDecorationNoContraction: + case SpvDecorationInputAttachmentIndex: + unreachable("Decoration not allowed for variable or structure member"); + case SpvDecorationXfbBuffer: + case SpvDecorationXfbStride: + unreachable("Vulkan does not have transform feedback"); + + case SpvDecorationCPacked: + case SpvDecorationSaturatedConversion: case SpvDecorationFuncParamAttr: case SpvDecorationFPRoundingMode: case SpvDecorationFPFastMathMode: - case SpvDecorationLinkageAttributes: - case SpvDecorationSpecId: - break; - default: - unreachable("Unhandled variable decoration"); + case SpvDecorationAlignment: + unreachable("Decoraiton only allowed for CL-style kernels"); } } |