diff options
author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2019-07-30 02:18:30 +0200 |
---|---|---|
committer | ReinUsesLisp <reinuseslisp@airmail.cc> | 2019-08-04 08:02:55 +0200 |
commit | 2ff80448068382005016b4aa5299beeda986668d (patch) | |
tree | 895985306447e214809e401d37055394b98ba471 | |
parent | Merge pull request #2770 from DarkLordZach/azure-pr-fix (diff) | |
download | yuzu-2ff80448068382005016b4aa5299beeda986668d.tar yuzu-2ff80448068382005016b4aa5299beeda986668d.tar.gz yuzu-2ff80448068382005016b4aa5299beeda986668d.tar.bz2 yuzu-2ff80448068382005016b4aa5299beeda986668d.tar.lz yuzu-2ff80448068382005016b4aa5299beeda986668d.tar.xz yuzu-2ff80448068382005016b4aa5299beeda986668d.tar.zst yuzu-2ff80448068382005016b4aa5299beeda986668d.zip |
-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: {}", |