Browse Source

ShaderGen: Implemented the KIL instruction, which is equivalent to 'discard'.

pull/15/merge
Subv 8 years ago
parent
commit
17a0ef1e1e
  1. 8
      src/video_core/renderer_opengl/gl_shader_decompiler.cpp

8
src/video_core/renderer_opengl/gl_shader_decompiler.cpp

@ -566,10 +566,16 @@ private:
default: { default: {
switch (instr.opcode.EffectiveOpCode()) { switch (instr.opcode.EffectiveOpCode()) {
case OpCode::Id::EXIT: { case OpCode::Id::EXIT: {
ASSERT_MSG(instr.pred.pred_index == static_cast<u64>(Pred::UnusedIndex),
"Predicated exits not implemented");
shader.AddLine("return true;"); shader.AddLine("return true;");
offset = PROGRAM_END - 1; offset = PROGRAM_END - 1;
break; break;
} }
case OpCode::Id::KIL: {
shader.AddLine("discard;");
break;
}
case OpCode::Id::IPA: { case OpCode::Id::IPA: {
const auto& attribute = instr.attribute.fmt28; const auto& attribute = instr.attribute.fmt28;
std::string dest = GetRegister(instr.gpr0); std::string dest = GetRegister(instr.gpr0);
@ -589,7 +595,7 @@ private:
} }
// Close the predicate condition scope. // Close the predicate condition scope.
if (instr.pred != Pred::UnusedIndex) {
if (instr.pred.pred_index != static_cast<u64>(Pred::UnusedIndex)) {
--shader.scope; --shader.scope;
shader.AddLine('}'); shader.AddLine('}');
} }

Loading…
Cancel
Save