From d118e382dd037696ff904e230b11028abf214e80 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Tue, 16 Apr 2019 10:38:23 +0200 Subject: [PATCH] ac/nir: add 64-bit SSBO atomic operations support MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Except compare&swap which is still buggy. Signed-off-by: Samuel Pitoiset Reviewed-by: Marek Olšák Reviewed-by: Bas Nieuwenhuizen --- src/amd/common/ac_nir_to_llvm.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index de2a9ed8f67..3890aebc982 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -1643,8 +1643,9 @@ static void visit_store_ssbo(struct ac_nir_context *ctx, static LLVMValueRef visit_atomic_ssbo(struct ac_nir_context *ctx, const nir_intrinsic_instr *instr) { + LLVMTypeRef return_type = LLVMTypeOf(get_src(ctx, instr->src[2])); const char *op; - char name[64]; + char name[64], type[8]; LLVMValueRef params[6]; int arg_count = 0; @@ -1697,18 +1698,21 @@ static LLVMValueRef visit_atomic_ssbo(struct ac_nir_context *ctx, params[arg_count++] = ctx->ac.i32_0; /* soffset */ params[arg_count++] = ctx->ac.i32_0; /* slc */ + ac_build_type_name_for_intr(return_type, type, sizeof(type)); snprintf(name, sizeof(name), - "llvm.amdgcn.raw.buffer.atomic.%s.i32", op); + "llvm.amdgcn.raw.buffer.atomic.%s.%s", op, type); } else { params[arg_count++] = ctx->ac.i32_0; /* vindex */ params[arg_count++] = get_src(ctx, instr->src[1]); /* voffset */ params[arg_count++] = ctx->ac.i1false; /* slc */ + assert(return_type == ctx->ac.i32); snprintf(name, sizeof(name), "llvm.amdgcn.buffer.atomic.%s", op); } - return ac_build_intrinsic(&ctx->ac, name, ctx->ac.i32, params, arg_count, 0); + return ac_build_intrinsic(&ctx->ac, name, return_type, params, + arg_count, 0); } static LLVMValueRef visit_load_buffer(struct ac_nir_context *ctx, -- 2.30.2