diff options
Diffstat (limited to 'src/video_core')
| -rw-r--r-- | src/video_core/engines/shader_bytecode.h | 7 | ||||
| -rw-r--r-- | src/video_core/shader/decode/other.cpp | 6 | 
2 files changed, 13 insertions, 0 deletions
| diff --git a/src/video_core/engines/shader_bytecode.h b/src/video_core/engines/shader_bytecode.h index 8520a0143..083ee3304 100644 --- a/src/video_core/engines/shader_bytecode.h +++ b/src/video_core/engines/shader_bytecode.h @@ -560,6 +560,11 @@ union Instruction {      BitField<48, 16, u64> opcode;      union { +        BitField<8, 5, ConditionCode> cc; +        BitField<13, 1, u64> trigger; +    } nop; + +    union {          BitField<8, 8, Register> gpr;          BitField<20, 24, s64> offset;      } gmem; @@ -1516,6 +1521,7 @@ public:          TMML,   // Texture Mip Map Level          SUST,   // Surface Store          EXIT, +        NOP,          IPA,          OUT_R, // Emit vertex/primitive          ISBERD, @@ -1795,6 +1801,7 @@ private:              INST("110111110110----", Id::TMML_B, Type::Texture, "TMML_B"),              INST("1101111101011---", Id::TMML, Type::Texture, "TMML"),              INST("11101011001-----", Id::SUST, Type::Image, "SUST"), +            INST("0101000010110---", Id::NOP, Type::Trivial, "NOP"),              INST("11100000--------", Id::IPA, Type::Trivial, "IPA"),              INST("1111101111100---", Id::OUT_R, Type::Trivial, "OUT_R"),              INST("1110111111010---", Id::ISBERD, Type::Trivial, "ISBERD"), diff --git a/src/video_core/shader/decode/other.cpp b/src/video_core/shader/decode/other.cpp index c0f64d7a0..ac0e764d6 100644 --- a/src/video_core/shader/decode/other.cpp +++ b/src/video_core/shader/decode/other.cpp @@ -22,6 +22,12 @@ u32 ShaderIR::DecodeOther(NodeBlock& bb, u32 pc) {      const auto opcode = OpCode::Decode(instr);      switch (opcode->get().GetId()) { +    case OpCode::Id::NOP: { +        UNIMPLEMENTED_IF(instr.nop.cc != Tegra::Shader::ConditionCode::T); +        UNIMPLEMENTED_IF(instr.nop.trigger != 0); +        // With the previous preconditions, this instruction is a no-operation. +        break; +    }      case OpCode::Id::EXIT: {          const Tegra::Shader::ConditionCode cc = instr.flow_condition_code;          UNIMPLEMENTED_IF_MSG(cc != Tegra::Shader::ConditionCode::T, "EXIT condition code used: {}", | 
