Module: Mesa
Branch: main
Commit: 405dead1b7f280a957c0af26e31671b8b8dc479f
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=405dead1b7f280a957c0af26e31671b8b8dc479f

Author: Jesse Natalie <jenat...@microsoft.com>
Date:   Mon Nov  6 10:00:29 2023 -0800

microsoft/compiler: Set src/dest nir types on image intrinsics when deducing 
format

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26104>

---

 src/microsoft/compiler/dxil_nir.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/microsoft/compiler/dxil_nir.c 
b/src/microsoft/compiler/dxil_nir.c
index ed89ce27441..cf8f84a7eff 100644
--- a/src/microsoft/compiler/dxil_nir.c
+++ b/src/microsoft/compiler/dxil_nir.c
@@ -2584,6 +2584,18 @@ guess_image_format_for_var(nir_shader *s, nir_variable 
*var)
    return true;
 }
 
+static void
+update_intrinsic_format_and_type(nir_intrinsic_instr *intr, nir_variable *var)
+{
+   nir_intrinsic_set_format(intr, var->data.image.format);
+   nir_alu_type alu_type =
+      
nir_get_nir_type_for_glsl_base_type(glsl_get_sampler_result_type(glsl_without_array(var->type)));
+   if (nir_intrinsic_has_src_type(intr))
+      nir_intrinsic_set_src_type(intr, alu_type);
+   else if (nir_intrinsic_has_dest_type(intr))
+      nir_intrinsic_set_dest_type(intr, alu_type);
+}
+
 static bool
 update_intrinsic_formats(nir_builder *b, nir_intrinsic_instr *intr,
                          void *data)
@@ -2594,7 +2606,7 @@ update_intrinsic_formats(nir_builder *b, 
nir_intrinsic_instr *intr,
    if (deref) {
       nir_variable *var = nir_deref_instr_get_variable(deref);
       if (var)
-         nir_intrinsic_set_format(intr, var->data.image.format);
+         update_intrinsic_format_and_type(intr, var);
       return var != NULL;
    }
 
@@ -2605,7 +2617,7 @@ update_intrinsic_formats(nir_builder *b, 
nir_intrinsic_instr *intr,
    nir_foreach_variable_with_modes(var, b->shader, nir_var_image) {
       if (var->data.binding <= binding &&
           var->data.binding + aoa_size(var->type) > binding) {
-         nir_intrinsic_set_format(intr, var->data.image.format);
+         update_intrinsic_format_and_type(intr, var);
          return true;
       }
    }

Reply via email to