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 <jason@jlekstrand.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5242>
This commit is contained in:
parent
de36b5b805
commit
a196f05fc2
|
@ -2801,9 +2801,18 @@ vtn_handle_texture(struct vtn_builder *b, SpvOp opcode,
|
||||||
if (sampler && (access & ACCESS_NON_UNIFORM))
|
if (sampler && (access & ACCESS_NON_UNIFORM))
|
||||||
instr->sampler_non_uniform = true;
|
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) {
|
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_FLOAT: dest_type = nir_type_float; break;
|
||||||
case GLSL_TYPE_INT: dest_type = nir_type_int; break;
|
case GLSL_TYPE_INT: dest_type = nir_type_int; break;
|
||||||
case GLSL_TYPE_UINT: dest_type = nir_type_uint; break;
|
case GLSL_TYPE_UINT: dest_type = nir_type_uint; break;
|
||||||
|
|
Loading…
Reference in New Issue