ac/nir: implement nir_intrinsic_shader_clock with device scope

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5117>
This commit is contained in:
Samuel Pitoiset
2020-05-20 10:07:26 +02:00
parent b034f6cf2a
commit 14292310d9
3 changed files with 7 additions and 4 deletions

View File

@@ -457,9 +457,10 @@ ac_build_optimization_barrier(struct ac_llvm_context *ctx,
}
LLVMValueRef
ac_build_shader_clock(struct ac_llvm_context *ctx)
ac_build_shader_clock(struct ac_llvm_context *ctx, nir_scope scope)
{
LLVMValueRef tmp = ac_build_intrinsic(ctx, "llvm.amdgcn.s.memtime", ctx->i64, NULL, 0, 0);
const char *name = scope == NIR_SCOPE_DEVICE ? "llvm.amdgcn.s.memrealtime" : "llvm.amdgcn.s.memtime";
LLVMValueRef tmp = ac_build_intrinsic(ctx, name, ctx->i64, NULL, 0, 0);
return LLVMBuildBitCast(ctx->builder, tmp, ctx->v2i32, "");
}

View File

@@ -181,7 +181,8 @@ void ac_build_s_barrier(struct ac_llvm_context *ctx);
void ac_build_optimization_barrier(struct ac_llvm_context *ctx,
LLVMValueRef *pvgpr);
LLVMValueRef ac_build_shader_clock(struct ac_llvm_context *ctx);
LLVMValueRef ac_build_shader_clock(struct ac_llvm_context *ctx,
nir_scope scope);
LLVMValueRef ac_build_ballot(struct ac_llvm_context *ctx, LLVMValueRef value);
LLVMValueRef ac_get_i1_sgpr_mask(struct ac_llvm_context *ctx,

View File

@@ -3864,7 +3864,8 @@ static void visit_intrinsic(struct ac_nir_context *ctx,
result = visit_image_size(ctx, instr, false);
break;
case nir_intrinsic_shader_clock:
result = ac_build_shader_clock(&ctx->ac);
result = ac_build_shader_clock(&ctx->ac,
nir_intrinsic_memory_scope(instr));
break;
case nir_intrinsic_discard:
case nir_intrinsic_discard_if: