diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c index a70be38f8e0..3804de7534a 100644 --- a/src/compiler/nir/nir.c +++ b/src/compiler/nir/nir.c @@ -3386,6 +3386,11 @@ nir_tex_instr_src_size(const nir_tex_instr *instr, unsigned src) instr->src[src].src_type == nir_tex_src_backend2) return nir_src_num_components(instr->src[src].src); + /* For AMD, this can be a vec8/vec4 image/sampler descriptor. */ + if (instr->src[src].src_type == nir_tex_src_texture_handle || + instr->src[src].src_type == nir_tex_src_sampler_handle) + return 0; + return 1; } diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index a4189f798b8..e2898555c0c 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -602,7 +602,7 @@ def image(name, src_comp=[], extra_indices=[], **kwargs): indices=[IMAGE_DIM, IMAGE_ARRAY, FORMAT, ACCESS] + extra_indices, **kwargs) intrinsic("image_" + name, src_comp=[1] + src_comp, indices=[IMAGE_DIM, IMAGE_ARRAY, FORMAT, ACCESS] + extra_indices, **kwargs) - intrinsic("bindless_image_" + name, src_comp=[1] + src_comp, + intrinsic("bindless_image_" + name, src_comp=[-1] + src_comp, indices=[IMAGE_DIM, IMAGE_ARRAY, FORMAT, ACCESS] + extra_indices, **kwargs) image("load", src_comp=[4, 1, 1], extra_indices=[DEST_TYPE], dest_comp=0, flags=[CAN_ELIMINATE])