Module: Mesa
Branch: staging/23.1
Commit: d6056f6b8b9c41ff1833e8d2a0e0a9c5dc033aeb
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d6056f6b8b9c41ff1833e8d2a0e0a9c5dc033aeb

Author: Konstantin Seurer <[email protected]>
Date:   Tue Jul  4 17:48:58 2023 +0200

gallivm: Fix atomic_global types

Passes LLVM validation on the test_mesh_shader_rendering vkd3d-proton
test.

cc: mesa-stable

Reviewed-by: Dave Airlie <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23996>
(cherry picked from commit f281290005119ddd2dc82e0b7a4cc22551d7fc71)

---

 .pick_status.json                              |  2 +-
 src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c | 20 ++++----------------
 2 files changed, 5 insertions(+), 17 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index fe2832a62f5..d4a99ee6511 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -4450,7 +4450,7 @@
         "description": "gallivm: Fix atomic_global types",
         "nominated": true,
         "nomination_type": 0,
-        "resolution": 0,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": null
     },
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c 
b/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c
index b656891a9af..262643e3234 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c
@@ -1034,6 +1034,7 @@ static void emit_atomic_global(struct 
lp_build_nir_context *bld_base,
 
    LLVMValueRef value_ptr = LLVMBuildExtractElement(gallivm->builder, val,
                                                     loop_state.counter, "");
+   value_ptr = LLVMBuildBitCast(gallivm->builder, value_ptr, 
atom_bld->elem_type, "");
 
    LLVMValueRef addr_ptr = LLVMBuildExtractElement(gallivm->builder, addr,
                                                    loop_state.counter, "");
@@ -1107,25 +1108,12 @@ static void emit_atomic_global(struct 
lp_build_nir_context *bld_base,
                                   LLVMAtomicOrderingSequentiallyConsistent,
                                   false);
    }
-   temp_res = LLVMBuildLoad2(builder, LLVMTypeOf(val), atom_res, "");
+   temp_res = LLVMBuildLoad2(builder, atom_bld->vec_type, atom_res, "");
    temp_res = LLVMBuildInsertElement(builder, temp_res, scalar, 
loop_state.counter, "");
    LLVMBuildStore(builder, temp_res, atom_res);
    lp_build_else(&ifthen);
-   temp_res = LLVMBuildLoad2(builder, LLVMTypeOf(val), atom_res, "");
-   bool is_float = LLVMTypeOf(val) == bld_base->base.vec_type;
-   LLVMValueRef zero_val;
-   if (is_float) {
-      if (val_bit_size == 64)
-         zero_val = lp_build_const_double(gallivm, 0);
-      else
-         zero_val = lp_build_const_float(gallivm, 0);
-   } else {
-      if (val_bit_size == 64)
-         zero_val = lp_build_const_int64(gallivm, 0);
-      else
-         zero_val = lp_build_const_int32(gallivm, 0);
-   }
-
+   temp_res = LLVMBuildLoad2(builder, atom_bld->vec_type, atom_res, "");
+   LLVMValueRef zero_val = lp_build_zero_bits(gallivm, val_bit_size, is_flt);
    temp_res = LLVMBuildInsertElement(builder, temp_res, zero_val, 
loop_state.counter, "");
    LLVMBuildStore(builder, temp_res, atom_res);
    lp_build_endif(&ifthen);

Reply via email to