From 324c21c922796f62267f40b3403dc297ce180a72 Mon Sep 17 00:00:00 2001
From: Jannik Vogel <email@jannikvogel.de>
Date: Sat, 16 Apr 2016 01:00:09 +0200
Subject: [PATCH] Extend Tev stage dumper

---
 src/video_core/debug_utils/debug_utils.cpp | 52 ++++++++++++++++------
 1 file changed, 38 insertions(+), 14 deletions(-)

diff --git a/src/video_core/debug_utils/debug_utils.cpp b/src/video_core/debug_utils/debug_utils.cpp
index 2f645b441..790a2789a 100644
--- a/src/video_core/debug_utils/debug_utils.cpp
+++ b/src/video_core/debug_utils/debug_utils.cpp
@@ -708,28 +708,52 @@ void DumpTevStageConfig(const std::array<Pica::Regs::TevStageConfig,6>& stages)
         const auto& tev_stage = stages[index];
 
         static const std::map<Source, std::string> source_map = {
-            { Source::PrimaryColor, "PrimaryColor" },
-            { Source::Texture0, "Texture0" },
-            { Source::Texture1, "Texture1" },
-            { Source::Texture2, "Texture2" },
-            { Source::Constant, "Constant" },
-            { Source::Previous, "Previous" },
+            { Source::PrimaryColor,           "PrimaryColor" },
+            { Source::PrimaryFragmentColor,   "PrimaryFragmentColor" },
+            { Source::SecondaryFragmentColor, "SecondaryFragmentColor" },
+            { Source::Texture0,               "Texture0" },
+            { Source::Texture1,               "Texture1" },
+            { Source::Texture2,               "Texture2" },
+            { Source::Texture3,               "Texture3" },
+            { Source::PreviousBuffer,         "PreviousBuffer" },
+            { Source::Constant,               "Constant" },
+            { Source::Previous,               "Previous" },
         };
 
         static const std::map<ColorModifier, std::string> color_modifier_map = {
-            { ColorModifier::SourceColor, { "%source.rgb" } },
-            { ColorModifier::SourceAlpha, { "%source.aaa" } },
+            { ColorModifier::SourceColor,         "%source.rgb" },
+            { ColorModifier::OneMinusSourceColor, "(1.0 - %source.rgb)" },
+            { ColorModifier::SourceAlpha,         "%source.aaa" },
+            { ColorModifier::OneMinusSourceAlpha, "(1.0 - %source.aaa)" },
+            { ColorModifier::SourceRed,           "%source.rrr" },
+            { ColorModifier::OneMinusSourceRed,   "(1.0 - %source.rrr)" },
+            { ColorModifier::SourceGreen,         "%source.ggg" },
+            { ColorModifier::OneMinusSourceGreen, "(1.0 - %source.ggg)" },
+            { ColorModifier::SourceBlue,          "%source.bbb" },
+            { ColorModifier::OneMinusSourceBlue,  "(1.0 - %source.bbb)" },
         };
+
         static const std::map<AlphaModifier, std::string> alpha_modifier_map = {
-            { AlphaModifier::SourceAlpha, "%source.a" },
-            { AlphaModifier::OneMinusSourceAlpha, "(255 - %source.a)" },
+            { AlphaModifier::SourceAlpha,         "%source.a" },
+            { AlphaModifier::OneMinusSourceAlpha, "(1.0 - %source.a)" },
+            { AlphaModifier::SourceRed,           "%source.r" },
+            { AlphaModifier::OneMinusSourceRed,   "(1.0 - %source.r)" },
+            { AlphaModifier::SourceGreen,         "%source.g" },
+            { AlphaModifier::OneMinusSourceGreen, "(1.0 - %source.g)" },
+            { AlphaModifier::SourceBlue,          "%source.b" },
+            { AlphaModifier::OneMinusSourceBlue,  "(1.0 - %source.b)" },
         };
 
         static const std::map<Operation, std::string> combiner_map = {
-            { Operation::Replace, "%source1" },
-            { Operation::Modulate, "(%source1 * %source2) / 255" },
-            { Operation::Add, "(%source1 + %source2)" },
-            { Operation::Lerp, "lerp(%source1, %source2, %source3)" },
+            { Operation::Replace,         "%source1" },
+            { Operation::Modulate,        "(%source1 * %source2)" },
+            { Operation::Add,             "(%source1 + %source2)" },
+            { Operation::AddSigned,       "(%source1 + %source2) - 0.5" },
+            { Operation::Lerp,            "lerp(%source1, %source2, %source3)" },
+            { Operation::Subtract,        "(%source1 - %source2)" },
+            { Operation::Dot3_RGB,        "dot(%source1, %source2)" },
+            { Operation::MultiplyThenAdd, "((%source1 * %source2) + %source3)" },
+            { Operation::AddThenMultiply, "((%source1 + %source2) * %source3)" },
         };
 
         static auto ReplacePattern =