shader_ir: Implement NOP
This commit is contained in:
parent
978f7067ee
commit
2ff8044806
|
@ -559,6 +559,11 @@ union Instruction {
|
||||||
BitField<39, 8, Register> gpr39;
|
BitField<39, 8, Register> gpr39;
|
||||||
BitField<48, 16, u64> opcode;
|
BitField<48, 16, u64> opcode;
|
||||||
|
|
||||||
|
union {
|
||||||
|
BitField<8, 5, ConditionCode> cc;
|
||||||
|
BitField<13, 1, u64> trigger;
|
||||||
|
} nop;
|
||||||
|
|
||||||
union {
|
union {
|
||||||
BitField<8, 8, Register> gpr;
|
BitField<8, 8, Register> gpr;
|
||||||
BitField<20, 24, s64> offset;
|
BitField<20, 24, s64> offset;
|
||||||
|
@ -1516,6 +1521,7 @@ public:
|
||||||
TMML, // Texture Mip Map Level
|
TMML, // Texture Mip Map Level
|
||||||
SUST, // Surface Store
|
SUST, // Surface Store
|
||||||
EXIT,
|
EXIT,
|
||||||
|
NOP,
|
||||||
IPA,
|
IPA,
|
||||||
OUT_R, // Emit vertex/primitive
|
OUT_R, // Emit vertex/primitive
|
||||||
ISBERD,
|
ISBERD,
|
||||||
|
@ -1795,6 +1801,7 @@ private:
|
||||||
INST("110111110110----", Id::TMML_B, Type::Texture, "TMML_B"),
|
INST("110111110110----", Id::TMML_B, Type::Texture, "TMML_B"),
|
||||||
INST("1101111101011---", Id::TMML, Type::Texture, "TMML"),
|
INST("1101111101011---", Id::TMML, Type::Texture, "TMML"),
|
||||||
INST("11101011001-----", Id::SUST, Type::Image, "SUST"),
|
INST("11101011001-----", Id::SUST, Type::Image, "SUST"),
|
||||||
|
INST("0101000010110---", Id::NOP, Type::Trivial, "NOP"),
|
||||||
INST("11100000--------", Id::IPA, Type::Trivial, "IPA"),
|
INST("11100000--------", Id::IPA, Type::Trivial, "IPA"),
|
||||||
INST("1111101111100---", Id::OUT_R, Type::Trivial, "OUT_R"),
|
INST("1111101111100---", Id::OUT_R, Type::Trivial, "OUT_R"),
|
||||||
INST("1110111111010---", Id::ISBERD, Type::Trivial, "ISBERD"),
|
INST("1110111111010---", Id::ISBERD, Type::Trivial, "ISBERD"),
|
||||||
|
|
|
@ -22,6 +22,12 @@ u32 ShaderIR::DecodeOther(NodeBlock& bb, u32 pc) {
|
||||||
const auto opcode = OpCode::Decode(instr);
|
const auto opcode = OpCode::Decode(instr);
|
||||||
|
|
||||||
switch (opcode->get().GetId()) {
|
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: {
|
case OpCode::Id::EXIT: {
|
||||||
const Tegra::Shader::ConditionCode cc = instr.flow_condition_code;
|
const Tegra::Shader::ConditionCode cc = instr.flow_condition_code;
|
||||||
UNIMPLEMENTED_IF_MSG(cc != Tegra::Shader::ConditionCode::T, "EXIT condition code used: {}",
|
UNIMPLEMENTED_IF_MSG(cc != Tegra::Shader::ConditionCode::T, "EXIT condition code used: {}",
|
||||||
|
|
Loading…
Reference in New Issue