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);
