From: Jesse Natalie Date: Tue, 14 Apr 2020 00:35:04 +0000 (-0700) Subject: nir/vtn: Use return type rather than image type for tex ops X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a196f05fc22620be5809f7b28ce7f2671b1ef32c;p=mesa.git nir/vtn: Use return type rather than image type for tex ops Since OpenCL images don't have types, we can't use the image type here. Rather than special-casing and only using SPIR-V return type for CL images, we can just always use the return type to fill out the tex info. Reviewed-by: Jason Ekstrand Part-of: --- 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;