From f10e96586fdd94dc1da0f544d9653a00520e5fa2 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Mon, 30 Jun 2025 18:42:52 -0400 Subject: [PATCH] nir/rewrite_image_intrinsic: handle non-derefs it is sometimes useful to turn lowered bindless intrinsics into bound or vice versa, and it is annoying to do so without this helper, so generalize the helper. Signed-off-by: Alyssa Rosenzweig Reviewed-by: Job Noorman Part-of: --- src/compiler/nir/nir.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c index 2c5ff95983e..afa1e01c7a5 100644 --- a/src/compiler/nir/nir.c +++ b/src/compiler/nir/nir.c @@ -2635,6 +2635,8 @@ nir_rewrite_image_intrinsic(nir_intrinsic_instr *intrin, nir_def *src, switch (intrin->intrinsic) { #define CASE(op) \ case nir_intrinsic_image_deref_##op: \ + case nir_intrinsic_image_##op: \ + case nir_intrinsic_bindless_image_##op: \ intrin->intrinsic = bindless ? nir_intrinsic_bindless_image_##op \ : nir_intrinsic_image_##op; \ break; @@ -2654,13 +2656,16 @@ nir_rewrite_image_intrinsic(nir_intrinsic_instr *intrin, nir_def *src, unreachable("Unhanded image intrinsic"); } - nir_variable *var = nir_intrinsic_get_var(intrin, 0); + if (nir_src_as_deref(intrin->src[0])) { + nir_variable *var = nir_intrinsic_get_var(intrin, 0); - /* Only update the format if the intrinsic doesn't have one set */ - if (nir_intrinsic_format(intrin) == PIPE_FORMAT_NONE) - nir_intrinsic_set_format(intrin, var->data.image.format); + /* Only update the format if the intrinsic doesn't have one set */ + if (nir_intrinsic_format(intrin) == PIPE_FORMAT_NONE) + nir_intrinsic_set_format(intrin, var->data.image.format); + + nir_intrinsic_set_access(intrin, access | var->data.access); + } - nir_intrinsic_set_access(intrin, access | var->data.access); if (nir_intrinsic_has_src_type(intrin)) nir_intrinsic_set_src_type(intrin, data_type); if (nir_intrinsic_has_dest_type(intrin))