Allow that capability if the driver indicates that it is supported, and flag whether images are read-only/write-only in the nir_variable (based on the NonReadable and NonWritable decorations), which drivers may need to implement this. Signed-off-by: Alex Smith <asmith@feralinteractive.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>tags/17.1-branchpoint
@@ -49,6 +49,7 @@ struct nir_spirv_supported_extensions { | |||
bool image_ms_array; | |||
bool tessellation; | |||
bool draw_parameters; | |||
bool image_write_without_format; | |||
}; | |||
nir_function *spirv_to_nir(const uint32_t *words, size_t word_count, |
@@ -2664,7 +2664,6 @@ vtn_handle_preamble_instruction(struct vtn_builder *b, SpvOp opcode, | |||
case SpvCapabilityMinLod: | |||
case SpvCapabilityTransformFeedback: | |||
case SpvCapabilityStorageImageReadWithoutFormat: | |||
case SpvCapabilityStorageImageWriteWithoutFormat: | |||
vtn_warn("Unsupported SPIR-V capability: %s", | |||
spirv_capability_to_string(cap)); | |||
break; | |||
@@ -2700,6 +2699,10 @@ vtn_handle_preamble_instruction(struct vtn_builder *b, SpvOp opcode, | |||
spv_check_supported(draw_parameters, cap); | |||
break; | |||
case SpvCapabilityStorageImageWriteWithoutFormat: | |||
spv_check_supported(image_write_without_format, cap); | |||
break; | |||
default: | |||
unreachable("Unhandled capability"); | |||
} |
@@ -1054,8 +1054,12 @@ apply_var_decoration(struct vtn_builder *b, nir_variable *nir_var, | |||
assert(nir_var->constant_initializer != NULL); | |||
nir_var->data.read_only = true; | |||
break; | |||
case SpvDecorationNonReadable: | |||
nir_var->data.image.write_only = true; | |||
break; | |||
case SpvDecorationNonWritable: | |||
nir_var->data.read_only = true; | |||
nir_var->data.image.read_only = true; | |||
break; | |||
case SpvDecorationComponent: | |||
nir_var->data.location_frac = dec->literals[0]; | |||
@@ -1107,7 +1111,6 @@ apply_var_decoration(struct vtn_builder *b, nir_variable *nir_var, | |||
case SpvDecorationAliased: | |||
case SpvDecorationVolatile: | |||
case SpvDecorationCoherent: | |||
case SpvDecorationNonReadable: | |||
case SpvDecorationUniform: | |||
case SpvDecorationStream: | |||
case SpvDecorationOffset: |