freedreno/ir3: fix the param order of cmpxchg
According to the following definition, int AtomicCompSwap(inout int mem, uint compare, uint data); the preceding one in atomic_comp_swap of NIR is compare and data is followed, while src0 for cmpxchg needs vec2(data, compare) So for ssbo/image deref comp_swap, that should be reversed. Fixes: dEQP-GLES31.functional.image_load_store.*.atomic.comp_swap*
This commit is contained in:
parent
49d22c2dfc
commit
aef410f31e
|
@ -1626,8 +1626,8 @@ emit_intrinsic_atomic_ssbo(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
case nir_intrinsic_ssbo_atomic_comp_swap:
|
||||
/* for cmpxchg, src0 is [ui]vec2(data, compare): */
|
||||
src0 = create_collect(ctx, (struct ir3_instruction*[]){
|
||||
src0,
|
||||
get_src(ctx, &intr->src[3])[0],
|
||||
src0,
|
||||
}, 2);
|
||||
atomic = ir3_ATOMIC_CMPXCHG_G(b, ssbo, 0, src0, 0, src1, 0, src2, 0);
|
||||
break;
|
||||
|
@ -2095,8 +2095,8 @@ emit_intrinsic_atomic_image(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
case nir_intrinsic_image_deref_atomic_comp_swap:
|
||||
/* for cmpxchg, src0 is [ui]vec2(data, compare): */
|
||||
src0 = create_collect(ctx, (struct ir3_instruction*[]){
|
||||
src0,
|
||||
get_src(ctx, &intr->src[4])[0],
|
||||
src0,
|
||||
}, 2);
|
||||
atomic = ir3_ATOMIC_CMPXCHG_G(b, image, 0, src0, 0, src1, 0, src2, 0);
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue