summaryrefslogtreecommitdiffstats
path: root/src/video_core/shader/shader_ir.cpp
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2019-04-09 23:41:41 +0200
committerReinUsesLisp <reinuseslisp@airmail.cc>2019-04-16 02:16:10 +0200
commit64613db6052dfe0c056ce3d6ead21ae9a32f03ae (patch)
tree9fa4a632c8fc050b6176ebbca727c27757f95662 /src/video_core/shader/shader_ir.cpp
parentshader_ir/decode: Reduce severity of unimplemented half-float FTZ (diff)
downloadyuzu-64613db6052dfe0c056ce3d6ead21ae9a32f03ae.tar
yuzu-64613db6052dfe0c056ce3d6ead21ae9a32f03ae.tar.gz
yuzu-64613db6052dfe0c056ce3d6ead21ae9a32f03ae.tar.bz2
yuzu-64613db6052dfe0c056ce3d6ead21ae9a32f03ae.tar.lz
yuzu-64613db6052dfe0c056ce3d6ead21ae9a32f03ae.tar.xz
yuzu-64613db6052dfe0c056ce3d6ead21ae9a32f03ae.tar.zst
yuzu-64613db6052dfe0c056ce3d6ead21ae9a32f03ae.zip
Diffstat (limited to 'src/video_core/shader/shader_ir.cpp')
-rw-r--r--src/video_core/shader/shader_ir.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/video_core/shader/shader_ir.cpp b/src/video_core/shader/shader_ir.cpp
index 5c1c591f8..d158b4bfd 100644
--- a/src/video_core/shader/shader_ir.cpp
+++ b/src/video_core/shader/shader_ir.cpp
@@ -218,6 +218,15 @@ Node ShaderIR::GetOperandAbsNegHalf(Node value, bool absolute, bool negate) {
return value;
}
+Node ShaderIR::GetSaturatedHalfFloat(Node value, bool saturate) {
+ if (!saturate) {
+ return value;
+ }
+ const Node positive_zero = Immediate(std::copysignf(0, 1));
+ const Node positive_one = Immediate(1.0f);
+ return Operation(OperationCode::HClamp, HALF_NO_PRECISE, value, positive_zero, positive_one);
+}
+
Node ShaderIR::GetPredicateComparisonFloat(PredCondition condition, Node op_a, Node op_b) {
const std::unordered_map<PredCondition, OperationCode> PredicateComparisonTable = {
{PredCondition::LessThan, OperationCode::LogicalFLessThan},