From 9f3ffb996b0d02ca64b492d22ff158e8f3659257 Mon Sep 17 00:00:00 2001
From: ameerj <52414509+ameerj@users.noreply.github.com>
Date: Sun, 30 May 2021 19:13:22 -0400
Subject: glsl: Rework var alloc to not assign unused results

---
 src/shader_recompiler/backend/glsl/var_alloc.cpp | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

(limited to 'src/shader_recompiler/backend/glsl/var_alloc.cpp')

diff --git a/src/shader_recompiler/backend/glsl/var_alloc.cpp b/src/shader_recompiler/backend/glsl/var_alloc.cpp
index 8c6944f07d..896457248b 100644
--- a/src/shader_recompiler/backend/glsl/var_alloc.cpp
+++ b/src/shader_recompiler/backend/glsl/var_alloc.cpp
@@ -110,7 +110,6 @@ std::string VarAlloc::Define(IR::Inst& inst, GlslVarType type) {
     } else {
         Id id{};
         id.type.Assign(type);
-        // id.is_null.Assign(1);
         GetUseTracker(type).uses_temp = true;
         inst.SetDefinition<Id>(id);
     }
@@ -121,6 +120,20 @@ std::string VarAlloc::Define(IR::Inst& inst, IR::Type type) {
     return Define(inst, RegType(type));
 }
 
+std::string VarAlloc::PhiDefine(IR::Inst& inst, IR::Type type) {
+    return AddDefine(inst, RegType(type));
+}
+
+std::string VarAlloc::AddDefine(IR::Inst& inst, GlslVarType type) {
+    if (inst.HasUses()) {
+        inst.SetDefinition<Id>(Alloc(type));
+        return Representation(inst.Definition<Id>());
+    } else {
+        return "";
+    }
+    return Representation(inst.Definition<Id>());
+}
+
 std::string VarAlloc::Consume(const IR::Value& value) {
     return value.IsImmediate() ? MakeImm(value) : ConsumeInst(*value.InstRecursive());
 }
@@ -223,6 +236,8 @@ VarAlloc::UseTracker& VarAlloc::GetUseTracker(GlslVarType type) {
     switch (type) {
     case GlslVarType::U1:
         return var_bool;
+    case GlslVarType::F16x2:
+        return var_f16x2;
     case GlslVarType::U32:
         return var_u32;
     case GlslVarType::S32:
-- 
cgit v1.2.3-70-g09d2