|
|
@@ -309,6 +309,18 @@ Node ShaderIR::GetPredicateComparisonHalf(Tegra::Shader::PredCondition condition
|
|
|
return predicate;
|
|
|
}
|
|
|
|
|
|
+OperationCode ShaderIR::GetPredicateCombiner(PredOperation operation) {
|
|
|
+ static const std::unordered_map<PredOperation, OperationCode> PredicateOperationTable = {
|
|
|
+ {PredOperation::And, OperationCode::LogicalAnd},
|
|
|
+ {PredOperation::Or, OperationCode::LogicalOr},
|
|
|
+ {PredOperation::Xor, OperationCode::LogicalXor},
|
|
|
+ };
|
|
|
+
|
|
|
+ const auto op = PredicateOperationTable.find(operation);
|
|
|
+ UNIMPLEMENTED_IF_MSG(op == PredicateOperationTable.end(), "Unknown predicate operation");
|
|
|
+ return op->second;
|
|
|
+}
|
|
|
+
|
|
|
void ShaderIR::SetRegister(BasicBlock& bb, Register dest, Node src) {
|
|
|
bb.push_back(Operation(OperationCode::Assign, GetRegister(dest), src));
|
|
|
}
|