ac/nir: fix atomic compare-and-swap

The LLVM instruction returns { i32, i1 }, where the i1 indicates success.
We're only interested in the first part, which is the loaded value.

Fixes dEQP-GLES31.functional.compute.shared_var.atomic.compswap.*

Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
This commit is contained in:
Nicolai Hähnle
2018-04-02 14:12:50 +02:00
parent e788b987d8
commit a807a9b215

View File

@@ -2631,6 +2631,7 @@ static LLVMValueRef visit_var_atomic(struct ac_nir_context *ctx,
LLVMAtomicOrderingSequentiallyConsistent, LLVMAtomicOrderingSequentiallyConsistent,
LLVMAtomicOrderingSequentiallyConsistent, LLVMAtomicOrderingSequentiallyConsistent,
false); false);
result = LLVMBuildExtractValue(ctx->ac.builder, result, 0, "");
} else { } else {
LLVMAtomicRMWBinOp op; LLVMAtomicRMWBinOp op;
switch (instr->intrinsic) { switch (instr->intrinsic) {