summaryrefslogtreecommitdiffstats
path: root/src/video_core
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2018-12-21 03:40:54 +0100
committerReinUsesLisp <reinuseslisp@airmail.cc>2019-01-15 21:54:49 +0100
commita58abbcfc4580c8d43935e2aecc6fa151509bf5b (patch)
tree7133d18e62891991f5ea0e6c06332c0c72ecebb4 /src/video_core
parentshader_ir: Add comparison helpers (diff)
downloadyuzu-a58abbcfc4580c8d43935e2aecc6fa151509bf5b.tar
yuzu-a58abbcfc4580c8d43935e2aecc6fa151509bf5b.tar.gz
yuzu-a58abbcfc4580c8d43935e2aecc6fa151509bf5b.tar.bz2
yuzu-a58abbcfc4580c8d43935e2aecc6fa151509bf5b.tar.lz
yuzu-a58abbcfc4580c8d43935e2aecc6fa151509bf5b.tar.xz
yuzu-a58abbcfc4580c8d43935e2aecc6fa151509bf5b.tar.zst
yuzu-a58abbcfc4580c8d43935e2aecc6fa151509bf5b.zip
Diffstat (limited to 'src/video_core')
-rw-r--r--src/video_core/shader/shader_ir.cpp12
-rw-r--r--src/video_core/shader/shader_ir.h3
2 files changed, 15 insertions, 0 deletions
diff --git a/src/video_core/shader/shader_ir.cpp b/src/video_core/shader/shader_ir.cpp
index 20a1a50ef..aec1fb36b 100644
--- a/src/video_core/shader/shader_ir.cpp
+++ b/src/video_core/shader/shader_ir.cpp
@@ -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));
}
diff --git a/src/video_core/shader/shader_ir.h b/src/video_core/shader/shader_ir.h
index 372ed10da..f13129ab3 100644
--- a/src/video_core/shader/shader_ir.h
+++ b/src/video_core/shader/shader_ir.h
@@ -669,6 +669,9 @@ private:
Node GetPredicateComparisonHalf(Tegra::Shader::PredCondition condition,
const MetaHalfArithmetic& meta, Node op_a, Node op_b);
+ /// Returns a predicate combiner operation
+ OperationCode GetPredicateCombiner(Tegra::Shader::PredOperation operation);
+
template <typename... T>
inline Node Operation(OperationCode code, const T*... operands) {
return StoreNode(OperationNode(code, operands...));