From 6c0ce29b04a6045e6db2279c61bc9b1bcaa58126 Mon Sep 17 00:00:00 2001 From: Gert Wollny Date: Mon, 7 Dec 2020 13:01:35 +0100 Subject: [PATCH] r600/sfn: Add support for shader_clock Signed-off-by: Gert Wollny Part-of: --- src/gallium/drivers/r600/sfn/sfn_shader_base.cpp | 11 +++++++++++ src/gallium/drivers/r600/sfn/sfn_shader_base.h | 1 + 2 files changed, 12 insertions(+) diff --git a/src/gallium/drivers/r600/sfn/sfn_shader_base.cpp b/src/gallium/drivers/r600/sfn/sfn_shader_base.cpp index 5b0ebb90e71..12d4487fc96 100644 --- a/src/gallium/drivers/r600/sfn/sfn_shader_base.cpp +++ b/src/gallium/drivers/r600/sfn/sfn_shader_base.cpp @@ -683,6 +683,8 @@ bool ShaderFromNirProcessor::emit_intrinsic_instruction(nir_intrinsic_instr* ins case nir_intrinsic_shared_atomic_exchange: case nir_intrinsic_shared_atomic_comp_swap: return emit_atomic_local_shared(instr); + case nir_intrinsic_shader_clock: + return emit_shader_clock(instr); case nir_intrinsic_copy_deref: case nir_intrinsic_load_constant: case nir_intrinsic_load_input: @@ -768,6 +770,15 @@ bool ShaderFromNirProcessor::emit_load_scratch(nir_intrinsic_instr* instr) return true; } +bool ShaderFromNirProcessor::emit_shader_clock(nir_intrinsic_instr* instr) +{ + emit_instruction(new AluInstruction(op1_mov, from_nir(instr->dest, 0), + PValue(new InlineConstValue(ALU_SRC_TIME_LO, 0)), EmitInstruction::write)); + emit_instruction(new AluInstruction(op1_mov, from_nir(instr->dest, 1), + PValue(new InlineConstValue(ALU_SRC_TIME_HI, 0)), EmitInstruction::last_write)); + return true; +} + GPRVector ShaderFromNirProcessor::vec_from_nir_with_fetch_constant(const nir_src& src, unsigned mask, const GPRVector::Swizzle& swizzle, diff --git a/src/gallium/drivers/r600/sfn/sfn_shader_base.h b/src/gallium/drivers/r600/sfn/sfn_shader_base.h index c68240da6ca..9f21baed8c1 100644 --- a/src/gallium/drivers/r600/sfn/sfn_shader_base.h +++ b/src/gallium/drivers/r600/sfn/sfn_shader_base.h @@ -182,6 +182,7 @@ private: bool emit_store_scratch(nir_intrinsic_instr* instr); bool emit_load_scratch(nir_intrinsic_instr* instr); + bool emit_shader_clock(nir_intrinsic_instr* instr); virtual void do_finalize() = 0; void finalize();