diff options
| author | 2021-05-30 19:13:22 -0400 | |
|---|---|---|
| committer | 2021-07-22 21:51:37 -0400 | |
| commit | 9f3ffb996b0d02ca64b492d22ff158e8f3659257 (patch) | |
| tree | 48993eaf320484cf042071a81a1a6b1dcc829eb9 /src/shader_recompiler/backend/glsl/var_alloc.cpp | |
| parent | glsl: Rework variable allocator to allow for variable reuse (diff) | |
| download | yuzu-9f3ffb996b0d02ca64b492d22ff158e8f3659257.tar.gz yuzu-9f3ffb996b0d02ca64b492d22ff158e8f3659257.tar.xz yuzu-9f3ffb996b0d02ca64b492d22ff158e8f3659257.zip | |
glsl: Rework var alloc to not assign unused results
Diffstat (limited to 'src/shader_recompiler/backend/glsl/var_alloc.cpp')
| -rw-r--r-- | src/shader_recompiler/backend/glsl/var_alloc.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/shader_recompiler/backend/glsl/var_alloc.cpp b/src/shader_recompiler/backend/glsl/var_alloc.cpp index 8c6944f07..896457248 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) { | |||
| 110 | } else { | 110 | } else { |
| 111 | Id id{}; | 111 | Id id{}; |
| 112 | id.type.Assign(type); | 112 | id.type.Assign(type); |
| 113 | // id.is_null.Assign(1); | ||
| 114 | GetUseTracker(type).uses_temp = true; | 113 | GetUseTracker(type).uses_temp = true; |
| 115 | inst.SetDefinition<Id>(id); | 114 | inst.SetDefinition<Id>(id); |
| 116 | } | 115 | } |
| @@ -121,6 +120,20 @@ std::string VarAlloc::Define(IR::Inst& inst, IR::Type type) { | |||
| 121 | return Define(inst, RegType(type)); | 120 | return Define(inst, RegType(type)); |
| 122 | } | 121 | } |
| 123 | 122 | ||
| 123 | std::string VarAlloc::PhiDefine(IR::Inst& inst, IR::Type type) { | ||
| 124 | return AddDefine(inst, RegType(type)); | ||
| 125 | } | ||
| 126 | |||
| 127 | std::string VarAlloc::AddDefine(IR::Inst& inst, GlslVarType type) { | ||
| 128 | if (inst.HasUses()) { | ||
| 129 | inst.SetDefinition<Id>(Alloc(type)); | ||
| 130 | return Representation(inst.Definition<Id>()); | ||
| 131 | } else { | ||
| 132 | return ""; | ||
| 133 | } | ||
| 134 | return Representation(inst.Definition<Id>()); | ||
| 135 | } | ||
| 136 | |||
| 124 | std::string VarAlloc::Consume(const IR::Value& value) { | 137 | std::string VarAlloc::Consume(const IR::Value& value) { |
| 125 | return value.IsImmediate() ? MakeImm(value) : ConsumeInst(*value.InstRecursive()); | 138 | return value.IsImmediate() ? MakeImm(value) : ConsumeInst(*value.InstRecursive()); |
| 126 | } | 139 | } |
| @@ -223,6 +236,8 @@ VarAlloc::UseTracker& VarAlloc::GetUseTracker(GlslVarType type) { | |||
| 223 | switch (type) { | 236 | switch (type) { |
| 224 | case GlslVarType::U1: | 237 | case GlslVarType::U1: |
| 225 | return var_bool; | 238 | return var_bool; |
| 239 | case GlslVarType::F16x2: | ||
| 240 | return var_f16x2; | ||
| 226 | case GlslVarType::U32: | 241 | case GlslVarType::U32: |
| 227 | return var_u32; | 242 | return var_u32; |
| 228 | case GlslVarType::S32: | 243 | case GlslVarType::S32: |