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