diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index 359fa5c583a..4061b8a2014 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -457,6 +457,9 @@ struct_member_decoration_cb(struct vtn_builder *b, case SpvDecorationNonWritable: case SpvDecorationNonReadable: case SpvDecorationRelaxedPrecision: + case SpvDecorationVolatile: + case SpvDecorationCoherent: + case SpvDecorationUniform: break; /* FIXME: Do nothing with this for now. */ case SpvDecorationNoPerspective: ctx->fields[member].interpolation = INTERP_QUALIFIER_NOPERSPECTIVE; @@ -470,9 +473,15 @@ struct_member_decoration_cb(struct vtn_builder *b, case SpvDecorationSample: ctx->fields[member].sample = true; break; + case SpvDecorationStream: + /* Vulkan only allows one GS stream */ + assert(dec->literals[0] == 0); + break; case SpvDecorationLocation: ctx->fields[member].location = dec->literals[0]; break; + case SpvDecorationComponent: + break; /* FIXME: What should we do with these? */ case SpvDecorationBuiltIn: ctx->type->members[member] = vtn_type_copy(b, ctx->type->members[member]); ctx->type->members[member]->is_builtin = true; @@ -490,6 +499,39 @@ struct_member_decoration_cb(struct vtn_builder *b, case SpvDecorationRowMajor: mutable_matrix_member(b, ctx->type, member)->row_major = true; break; + + case SpvDecorationPatch: + unreachable("Tessellation not yet supported"); + + case SpvDecorationSpecId: + case SpvDecorationBlock: + case SpvDecorationBufferBlock: + case SpvDecorationArrayStride: + case SpvDecorationGLSLShared: + case SpvDecorationGLSLPacked: + case SpvDecorationInvariant: + case SpvDecorationRestrict: + case SpvDecorationAliased: + case SpvDecorationConstant: + case SpvDecorationIndex: + case SpvDecorationBinding: + case SpvDecorationDescriptorSet: + case SpvDecorationNoContraction: + case SpvDecorationInputAttachmentIndex: + unreachable("Decoration not allowed on struct members"); + + case SpvDecorationXfbBuffer: + case SpvDecorationXfbStride: + unreachable("Vulkan does not have transform feedback"); + + case SpvDecorationCPacked: + case SpvDecorationSaturatedConversion: + case SpvDecorationFuncParamAttr: + case SpvDecorationFPRoundingMode: + case SpvDecorationFPFastMathMode: + case SpvDecorationAlignment: + unreachable("Decoraiton only allowed for CL-style kernels"); + default: unreachable("Unhandled member decoration"); } @@ -520,12 +562,49 @@ type_decoration_cb(struct vtn_builder *b, /* Ignore these, since we get explicit offsets anyways */ break; + case SpvDecorationRowMajor: + case SpvDecorationColMajor: + case SpvDecorationMatrixStride: + case SpvDecorationBuiltIn: + case SpvDecorationNoPerspective: + case SpvDecorationFlat: + case SpvDecorationPatch: + case SpvDecorationCentroid: + case SpvDecorationSample: + case SpvDecorationVolatile: + case SpvDecorationCoherent: + case SpvDecorationNonWritable: + case SpvDecorationNonReadable: + case SpvDecorationUniform: case SpvDecorationStream: - assert(dec->literals[0] == 0); - break; + case SpvDecorationLocation: + case SpvDecorationComponent: + case SpvDecorationOffset: + case SpvDecorationXfbBuffer: + case SpvDecorationXfbStride: + unreachable("Decoraiton only allowed for struct members"); - default: - unreachable("Unhandled type decoration"); + case SpvDecorationRelaxedPrecision: + case SpvDecorationSpecId: + case SpvDecorationInvariant: + case SpvDecorationRestrict: + case SpvDecorationAliased: + case SpvDecorationConstant: + case SpvDecorationIndex: + case SpvDecorationBinding: + case SpvDecorationDescriptorSet: + case SpvDecorationLinkageAttributes: + case SpvDecorationNoContraction: + case SpvDecorationInputAttachmentIndex: + unreachable("Decoraiton not allowed on types"); + + case SpvDecorationCPacked: + case SpvDecorationSaturatedConversion: + case SpvDecorationFuncParamAttr: + case SpvDecorationFPRoundingMode: + case SpvDecorationFPFastMathMode: + case SpvDecorationAlignment: + unreachable("Decoraiton only allowed for CL-style kernels"); } } 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"); } }