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

This commit is contained in:
Subv 2018-04-20 09:17:39 -05:00
parent c3a8ea76f1
commit 17a0ef1e1e

View File

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