X-Git-Url: https://git.libre-soc.org/?p=mesa.git;a=blobdiff_plain;f=src%2Fcompiler%2Fspirv%2Fspirv_to_nir.c;h=e2912809bb05ca3ce58b36e550b796f3dcf66c40;hp=059d4b77717393831e2f0d99f7782e590372c7e1;hb=a196f05fc22620be5809f7b28ce7f2671b1ef32c;hpb=de36b5b805be1732e6798afd1a12743df8d32718 diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index 059d4b77717..e2912809bb0 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -2801,9 +2801,18 @@ vtn_handle_texture(struct vtn_builder *b, SpvOp opcode, if (sampler && (access & ACCESS_NON_UNIFORM)) instr->sampler_non_uniform = true; - /* for non-query ops, get dest_type from sampler type */ + /* for non-query ops, get dest_type from SPIR-V return type */ if (dest_type == nir_type_invalid) { - switch (glsl_get_sampler_result_type(image->type)) { + /* the return type should match the image type, unless the image type is + * VOID (CL image), in which case the return type dictates the sampler + */ + enum glsl_base_type sampler_base = + glsl_get_sampler_result_type(image->type); + enum glsl_base_type ret_base = glsl_get_base_type(ret_type->type); + vtn_fail_if(sampler_base != ret_base && sampler_base != GLSL_TYPE_VOID, + "SPIR-V return type mismatches image type. This is only valid " + "for untyped images (OpenCL)."); + switch (ret_base) { case GLSL_TYPE_FLOAT: dest_type = nir_type_float; break; case GLSL_TYPE_INT: dest_type = nir_type_int; break; case GLSL_TYPE_UINT: dest_type = nir_type_uint; break;