summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/radeonsi/si_shader.c
diff options
context:
space:
mode:
authorNicolai Hähnle <nicolai.haehnle@amd.com>2016-10-10 15:09:40 +0200
committerNicolai Hähnle <nicolai.haehnle@amd.com>2016-10-13 10:17:42 +0200
commit76a940893de634a50b9149a5f3f37c33fbf4f484 (patch)
tree9e6bfd11c1fc597cf7171dad0b05c6469e735c2e /src/gallium/drivers/radeonsi/si_shader.c
parent35e2bfa6d912ad3ef57195b0e8f31f21eb64678e (diff)
downloadexternal_mesa3d-76a940893de634a50b9149a5f3f37c33fbf4f484.zip
external_mesa3d-76a940893de634a50b9149a5f3f37c33fbf4f484.tar.gz
external_mesa3d-76a940893de634a50b9149a5f3f37c33fbf4f484.tar.bz2
radeonsi: fix the coordinate overloading of llvm.amdgcn.image.atomic.cmpswap.*
Fixes GL45-CTS.shader_image_load_store.basic-allTargets-atomic* Reviewed-by: Dave Airlie <airlied@redhat.com> Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Diffstat (limited to 'src/gallium/drivers/radeonsi/si_shader.c')
-rw-r--r--src/gallium/drivers/radeonsi/si_shader.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
index 8b77fd1..25146e8 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -4195,10 +4195,15 @@ static void atomic_emit(
snprintf(intrinsic_name, sizeof(intrinsic_name),
"llvm.amdgcn.buffer.atomic.%s", action->intr_name);
} else {
+ LLVMValueRef coords;
char coords_type[8];
- build_type_name_for_intr(LLVMTypeOf(emit_data->args[1]),
- coords_type, sizeof(coords_type));
+ if (inst->Instruction.Opcode == TGSI_OPCODE_ATOMCAS)
+ coords = emit_data->args[2];
+ else
+ coords = emit_data->args[1];
+
+ build_type_name_for_intr(coords, coords_type, sizeof(coords_type));
snprintf(intrinsic_name, sizeof(intrinsic_name),
"llvm.amdgcn.image.atomic.%s.%s",
action->intr_name, coords_type);