Sfoglia il codice sorgente

shader_ir: Add register getter

ReinUsesLisp 7 anni fa
parent
commit
5e639bfcf6

+ 7 - 0
src/video_core/shader/shader_ir.cpp

@@ -39,6 +39,13 @@ Node ShaderIR::Immediate(u32 value) {
     return StoreNode(ImmediateNode(value));
     return StoreNode(ImmediateNode(value));
 }
 }
 
 
+Node ShaderIR::GetRegister(Register reg) {
+    if (reg != Register::ZeroIndex) {
+        used_registers.insert(static_cast<u32>(reg));
+    }
+    return StoreNode(GprNode(reg));
+}
+
 Node ShaderIR::GetImmediate19(Instruction instr) {
 Node ShaderIR::GetImmediate19(Instruction instr) {
     return Immediate(instr.alu.GetImm20_19());
     return Immediate(instr.alu.GetImm20_19());
 }
 }

+ 2 - 0
src/video_core/shader/shader_ir.h

@@ -610,6 +610,8 @@ private:
         return Immediate(*reinterpret_cast<const u32*>(&value));
         return Immediate(*reinterpret_cast<const u32*>(&value));
     }
     }
 
 
+    /// Generates a node for a passed register.
+    Node GetRegister(Tegra::Shader::Register reg);
     /// Generates a node representing a 19-bit immediate value
     /// Generates a node representing a 19-bit immediate value
     Node GetImmediate19(Tegra::Shader::Instruction instr);
     Node GetImmediate19(Tegra::Shader::Instruction instr);
     /// Generates a node representing a 32-bit immediate value
     /// Generates a node representing a 32-bit immediate value