summaryrefslogtreecommitdiff
path: root/src/shader_recompiler/backend/spirv/emit_spirv.cpp
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2021-04-01 01:07:51 -0300
committerGravatar ameerj2021-07-22 21:51:25 -0400
commitf1dd743731bd0e7b7f1ef172882971bcd15eb5bc (patch)
treebd3cf90bce9b0b4ecafb12bd269a250c000336d4 /src/shader_recompiler/backend/spirv/emit_spirv.cpp
parentshader: Fix constant propagation to use reverse post order (diff)
downloadyuzu-f1dd743731bd0e7b7f1ef172882971bcd15eb5bc.tar.gz
yuzu-f1dd743731bd0e7b7f1ef172882971bcd15eb5bc.tar.xz
yuzu-f1dd743731bd0e7b7f1ef172882971bcd15eb5bc.zip
shader: Fix dependency on identity removal pass
Diffstat (limited to 'src/shader_recompiler/backend/spirv/emit_spirv.cpp')
-rw-r--r--src/shader_recompiler/backend/spirv/emit_spirv.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv.cpp b/src/shader_recompiler/backend/spirv/emit_spirv.cpp
index 6389d80bf..9dc769307 100644
--- a/src/shader_recompiler/backend/spirv/emit_spirv.cpp
+++ b/src/shader_recompiler/backend/spirv/emit_spirv.cpp
@@ -250,7 +250,7 @@ Id PhiArgDef(EmitContext& ctx, IR::Inst* inst, size_t index) {
250 // Let the context handle immediate definitions, as it already knows how 250 // Let the context handle immediate definitions, as it already knows how
251 return ctx.Def(arg); 251 return ctx.Def(arg);
252 } 252 }
253 IR::Inst* const arg_inst{arg.Inst()}; 253 IR::Inst* const arg_inst{arg.InstRecursive()};
254 if (const Id def{arg_inst->Definition<Id>()}; Sirit::ValidId(def)) { 254 if (const Id def{arg_inst->Definition<Id>()}; Sirit::ValidId(def)) {
255 // Return the current definition if it exists 255 // Return the current definition if it exists
256 return def; 256 return def;
@@ -296,7 +296,12 @@ Id EmitPhi(EmitContext& ctx, IR::Inst* inst) {
296void EmitVoid(EmitContext&) {} 296void EmitVoid(EmitContext&) {}
297 297
298Id EmitIdentity(EmitContext& ctx, const IR::Value& value) { 298Id EmitIdentity(EmitContext& ctx, const IR::Value& value) {
299 return ctx.Def(value); 299 if (const Id id = ctx.Def(value); Sirit::ValidId(id)) {
300 return id;
301 }
302 const Id def{ctx.ForwardDeclarationId()};
303 value.InstRecursive()->SetDefinition<Id>(def);
304 return def;
300} 305}
301 306
302void EmitGetZeroFromOp(EmitContext&) { 307void EmitGetZeroFromOp(EmitContext&) {