|
|
@@ -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('}');
|
|
|
}
|