From 740b9fa19b4ed47e578a91407c45e871687523b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Tue, 21 Apr 2026 14:54:46 -0400 Subject: [PATCH] radeonsi: set glsl_bindless_handles_are_32bit to lower bindless handles to 32 bits in the GLSL compiler and eliminate input loads of high 32 bits of bindless handles before nir_opt_varyings. Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/gallium/drivers/radeonsi/si_get.c | 1 + src/gallium/drivers/radeonsi/si_nir_lower_resource.c | 8 +++----- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_get.c b/src/gallium/drivers/radeonsi/si_get.c index 1f875fa7d8c..bdc3f3cae91 100644 --- a/src/gallium/drivers/radeonsi/si_get.c +++ b/src/gallium/drivers/radeonsi/si_get.c @@ -587,6 +587,7 @@ void si_init_screen_caps(struct si_screen *sscreen) caps->cl_gl_sharing = true; caps->call_finalize_nir_in_linker = true; caps->blit_3d = true; + caps->glsl_bindless_handles_are_32bit = true; /* Fixup dmabuf caps for the virtio + vpipe case (when fd=-1, u_init_pipe_screen_caps * fails to set this capability). */ diff --git a/src/gallium/drivers/radeonsi/si_nir_lower_resource.c b/src/gallium/drivers/radeonsi/si_nir_lower_resource.c index e329edc4165..e45196b8fbf 100644 --- a/src/gallium/drivers/radeonsi/si_nir_lower_resource.c +++ b/src/gallium/drivers/radeonsi/si_nir_lower_resource.c @@ -379,8 +379,7 @@ static bool lower_resource_intrinsic(nir_builder *b, nir_intrinsic_instr *intrin intrin->intrinsic == nir_intrinsic_bindless_image_fragment_mask_load_amd || intrin->intrinsic == nir_intrinsic_bindless_image_descriptor_amd; - nir_def *index = nir_u2u32(b, intrin->src[0].ssa); - + nir_def *index = intrin->src[0].ssa; nir_def *desc = load_bindless_image_desc(b, index, desc_type, is_load, s); if (intrin->intrinsic == nir_intrinsic_bindless_image_descriptor_amd) { @@ -524,12 +523,11 @@ static bool lower_resource_tex(nir_builder *b, nir_tex_instr *tex, } break; case nir_tex_src_texture_handle: - /* We use 32-bit handles. */ - texture_handle = nir_u2u32(b, tex->src[i].src.ssa); + texture_handle = tex->src[i].src.ssa; break; case nir_tex_src_sampler_handle: if (has_sampler) { - sampler_handle = nir_u2u32(b, tex->src[i].src.ssa); + sampler_handle = tex->src[i].src.ssa; } else { nir_tex_instr_remove_src(tex, i); i--;