Ver código fonte

shader: Keep track of shaders using warp instructions

ReinUsesLisp 6 anos atrás
pai
commit
9ad6327fbd

+ 3 - 0
src/video_core/shader/decode/warp.cpp

@@ -38,6 +38,9 @@ u32 ShaderIR::DecodeWarp(NodeBlock& bb, u32 pc) {
     const Instruction instr = {program_code[pc]};
     const Instruction instr = {program_code[pc]};
     const auto opcode = OpCode::Decode(instr);
     const auto opcode = OpCode::Decode(instr);
 
 
+    // Signal the backend that this shader uses warp instructions.
+    uses_warps = true;
+
     switch (opcode->get().GetId()) {
     switch (opcode->get().GetId()) {
     case OpCode::Id::VOTE: {
     case OpCode::Id::VOTE: {
         const Node value = GetPredicate(instr.vote.value, instr.vote.negate_value != 0);
         const Node value = GetPredicate(instr.vote.value, instr.vote.negate_value != 0);

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

@@ -137,6 +137,10 @@ public:
         return uses_vertex_id;
         return uses_vertex_id;
     }
     }
 
 
+    bool UsesWarps() const {
+        return uses_warps;
+    }
+
     bool HasPhysicalAttributes() const {
     bool HasPhysicalAttributes() const {
         return uses_physical_attributes;
         return uses_physical_attributes;
     }
     }
@@ -415,6 +419,7 @@ private:
     bool uses_physical_attributes{}; // Shader uses AL2P or physical attribute read/writes
     bool uses_physical_attributes{}; // Shader uses AL2P or physical attribute read/writes
     bool uses_instance_id{};
     bool uses_instance_id{};
     bool uses_vertex_id{};
     bool uses_vertex_id{};
+    bool uses_warps{};
 
 
     Tegra::Shader::Header header;
     Tegra::Shader::Header header;
 };
 };