Re: [Mesa-dev] [PATCH] radeonsi: fix the coordinate overloading of llvm.amdgcn.image.atomic.cmpswap.*
Reviewed-by: Marek Olšák Marek On Wed, Oct 12, 2016 at 7:42 PM, Nicolai Hähnle wrote: > From: Nicolai Hähnle > > Fixes GL45-CTS.shader_image_load_store.basic-allTargets-atomic* > --- > src/gallium/drivers/radeonsi/si_shader.c | 9 +++-- > 1 file 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 > @@ -4188,24 +4188,29 @@ static void atomic_emit( > if (inst->Src[0].Register.File == TGSI_FILE_MEMORY) { > atomic_emit_memory(ctx, emit_data); > return; > } > > if (inst->Src[0].Register.File == TGSI_FILE_BUFFER || > inst->Memory.Texture == TGSI_TEXTURE_BUFFER) { > 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); > } > > tmp = lp_build_intrinsic( > builder, intrinsic_name, bld_base->uint_bld.elem_type, > emit_data->args, emit_data->arg_count, 0); > emit_data->output[emit_data->chan] = > LLVMBuildBitCast(builder, tmp, bld_base->base.elem_type, ""); > -- > 2.7.4 > > ___ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH] radeonsi: fix the coordinate overloading of llvm.amdgcn.image.atomic.cmpswap.*
On 13 October 2016 at 03:42, Nicolai Hähnle wrote: > From: Nicolai Hähnle > > Fixes GL45-CTS.shader_image_load_store.basic-allTargets-atomic* Reviewed-by: Dave Airlie > --- > src/gallium/drivers/radeonsi/si_shader.c | 9 +++-- > 1 file 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 > @@ -4188,24 +4188,29 @@ static void atomic_emit( > if (inst->Src[0].Register.File == TGSI_FILE_MEMORY) { > atomic_emit_memory(ctx, emit_data); > return; > } > > if (inst->Src[0].Register.File == TGSI_FILE_BUFFER || > inst->Memory.Texture == TGSI_TEXTURE_BUFFER) { > 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); > } > > tmp = lp_build_intrinsic( > builder, intrinsic_name, bld_base->uint_bld.elem_type, > emit_data->args, emit_data->arg_count, 0); > emit_data->output[emit_data->chan] = > LLVMBuildBitCast(builder, tmp, bld_base->base.elem_type, ""); > -- > 2.7.4 > > ___ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev