From fd4041987bf0390d1bf07ec77c8b2d89dac601c2 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Wed, 10 Apr 2019 17:16:51 +0200 Subject: [PATCH] ac: add ac_build_load_helper_invocation() helper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Samuel Pitoiset Reviewed-by: Marek Olšák --- src/amd/common/ac_llvm_build.c | 10 ++++++++++ src/amd/common/ac_llvm_build.h | 3 +++ src/amd/common/ac_nir_to_llvm.c | 13 +------------ src/gallium/drivers/radeonsi/si_shader.c | 7 +------ 4 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c index d305af280d5..19496519165 100644 --- a/src/amd/common/ac_llvm_build.c +++ b/src/amd/common/ac_llvm_build.c @@ -4057,3 +4057,13 @@ ac_build_ddxy_interp(struct ac_llvm_context *ctx, LLVMValueRef interp_ij) } return ac_build_gather_values(ctx, result, 4); } + +LLVMValueRef +ac_build_load_helper_invocation(struct ac_llvm_context *ctx) +{ + LLVMValueRef result = ac_build_intrinsic(ctx, "llvm.amdgcn.ps.live", + ctx->i1, NULL, 0, + AC_FUNC_ATTR_READNONE); + result = LLVMBuildNot(ctx->builder, result, ""); + return LLVMBuildSExt(ctx->builder, result, ctx->i32, ""); +} diff --git a/src/amd/common/ac_llvm_build.h b/src/amd/common/ac_llvm_build.h index 64b6894538e..debc029f192 100644 --- a/src/amd/common/ac_llvm_build.h +++ b/src/amd/common/ac_llvm_build.h @@ -689,6 +689,9 @@ ac_build_frexp_mant(struct ac_llvm_context *ctx, LLVMValueRef src0, LLVMValueRef ac_build_ddxy_interp(struct ac_llvm_context *ctx, LLVMValueRef interp_ij); +LLVMValueRef +ac_build_load_helper_invocation(struct ac_llvm_context *ctx); + #ifdef __cplusplus } #endif diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index 1401998c666..90f7c66434d 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -2859,17 +2859,6 @@ static void emit_discard(struct ac_nir_context *ctx, ctx->abi->emit_kill(ctx->abi, cond); } -static LLVMValueRef -visit_load_helper_invocation(struct ac_nir_context *ctx) -{ - LLVMValueRef result = ac_build_intrinsic(&ctx->ac, - "llvm.amdgcn.ps.live", - ctx->ac.i1, NULL, 0, - AC_FUNC_ATTR_READNONE); - result = LLVMBuildNot(ctx->ac.builder, result, ""); - return LLVMBuildSExt(ctx->ac.builder, result, ctx->ac.i32, ""); -} - static LLVMValueRef visit_load_local_invocation_index(struct ac_nir_context *ctx) { @@ -3283,7 +3272,7 @@ static void visit_intrinsic(struct ac_nir_context *ctx, result = ctx->abi->front_face; break; case nir_intrinsic_load_helper_invocation: - result = visit_load_helper_invocation(ctx); + result = ac_build_load_helper_invocation(&ctx->ac); break; case nir_intrinsic_load_instance_id: result = ctx->abi->instance_id; diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 8ebc8d39e99..d783555ca33 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -2218,12 +2218,7 @@ void si_load_system_value(struct si_shader_context *ctx, break; case TGSI_SEMANTIC_HELPER_INVOCATION: - value = ac_build_intrinsic(&ctx->ac, - "llvm.amdgcn.ps.live", - ctx->i1, NULL, 0, - AC_FUNC_ATTR_READNONE); - value = LLVMBuildNot(ctx->ac.builder, value, ""); - value = LLVMBuildSExt(ctx->ac.builder, value, ctx->i32, ""); + value = ac_build_load_helper_invocation(&ctx->ac); break; case TGSI_SEMANTIC_SUBGROUP_SIZE: