diff --git a/src/shader_recompiler/frontend/translate/vector_memory.cpp b/src/shader_recompiler/frontend/translate/vector_memory.cpp index f293a2205..c6a6717ee 100644 --- a/src/shader_recompiler/frontend/translate/vector_memory.cpp +++ b/src/shader_recompiler/frontend/translate/vector_memory.cpp @@ -470,14 +470,14 @@ void Translator::BUFFER_ATOMIC(u32 num_dwords, AtomicOp op, const GcnInst& inst) ir.GetScalarReg(srsrc + 2), ir.GetScalarReg(srsrc + 3)); // Get current srsrc value - IR::U32 prev_val = GetSrc(inst.src[2]); + IR::U32 prev_val = ir.GetScalarReg(srsrc); // Apply atomic op // derefs srsrc buffer and adds vdata value to it const IR::U32 new_vdata = IR::U32{ir.BufferAtomicIAdd(handle, address, vdata_val, info)}; if (mubuf.glc) { - ir.SetVectorReg(vdata, new_vdata); + ir.SetVectorReg(vdata, prev_val); } return; diff --git a/src/shader_recompiler/ir/opcodes.inc b/src/shader_recompiler/ir/opcodes.inc index a86a4fd48..a3789412f 100644 --- a/src/shader_recompiler/ir/opcodes.inc +++ b/src/shader_recompiler/ir/opcodes.inc @@ -96,7 +96,7 @@ OPCODE(StoreBufferFormatF32x4, Void, Opaq OPCODE(StoreBufferU32, Void, Opaque, Opaque, U32, ) // Buffer atomic operations -OPCODE(BufferAtomicIAdd32, U32, Opaque, Opaque, Opaque ) +OPCODE(BufferAtomicIAdd32, Void, Opaque, Opaque, Opaque ) OPCODE(BufferAtomicSMin32, U32, U32, U32, ) OPCODE(BufferAtomicUMin32, U32, U32, U32, ) OPCODE(BufferAtomicSMax32, U32, U32, U32, )