From db573f736255b5ade59cbc43861b000b22b89d60 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Mon, 24 Oct 2022 02:15:06 +0000 Subject: [PATCH] aco: add support for device clock on GFX11 According to LLVM, s_sendmsg_rtn(GET_REALTIME) should be used instead of s_memrealtime. Signed-off-by: Samuel Pitoiset Reviewed-by: Rhys Perry Reviewed-by: Georg Lehmann Part-of: --- src/amd/compiler/aco_instruction_selection.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp index 16babf60453..88b686bd814 100644 --- a/src/amd/compiler/aco_instruction_selection.cpp +++ b/src/amd/compiler/aco_instruction_selection.cpp @@ -9020,6 +9020,10 @@ visit_intrinsic(isel_context* ctx, nir_intrinsic_instr* instr) /* "((size - 1) << 11) | register" (SHADER_CYCLES is encoded as register 29) */ Temp clock = bld.sopk(aco_opcode::s_getreg_b32, bld.def(s1), ((20 - 1) << 11) | 29); bld.pseudo(aco_opcode::p_create_vector, Definition(dst), clock, Operand::zero()); + } else if (nir_intrinsic_memory_scope(instr) == NIR_SCOPE_DEVICE && + ctx->options->gfx_level >= GFX11) { + bld.sop1(aco_opcode::s_sendmsg_rtn_b64, Definition(dst), + Operand::c32(sendmsg_rtn_get_realtime)); } else { aco_opcode opcode = nir_intrinsic_memory_scope(instr) == NIR_SCOPE_DEVICE ? aco_opcode::s_memrealtime