ac: add ac_build_load_helper_invocation() helper

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Samuel Pitoiset 2019-04-10 17:16:51 +02:00
parent 590a4c8981
commit fd4041987b
4 changed files with 15 additions and 18 deletions

View File

@ -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, "");
}

View File

@ -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

View File

@ -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;

View File

@ -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: