summaryrefslogtreecommitdiff
path: root/src/shader_recompiler/backend/spirv
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2021-05-18 02:04:22 -0300
committerGravatar ameerj2021-07-22 21:51:32 -0400
commit9bb3e008c9f4bbdd35c095b506c3a3312d17e383 (patch)
tree320cc594970b6ef658d8bed88ceabded0f84caea /src/shader_recompiler/backend/spirv
parentglasm: Implement InstanceId and VertexId (diff)
downloadyuzu-9bb3e008c9f4bbdd35c095b506c3a3312d17e383.tar.gz
yuzu-9bb3e008c9f4bbdd35c095b506c3a3312d17e383.tar.xz
yuzu-9bb3e008c9f4bbdd35c095b506c3a3312d17e383.zip
shader: Read branch conditions from an instruction
Fixes the identity removal pass.
Diffstat (limited to 'src/shader_recompiler/backend/spirv')
-rw-r--r--src/shader_recompiler/backend/spirv/emit_spirv.cpp10
-rw-r--r--src/shader_recompiler/backend/spirv/emit_spirv_instructions.h3
2 files changed, 11 insertions, 2 deletions
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv.cpp b/src/shader_recompiler/backend/spirv/emit_spirv.cpp
index 9ed2af991..3e20ac3b9 100644
--- a/src/shader_recompiler/backend/spirv/emit_spirv.cpp
+++ b/src/shader_recompiler/backend/spirv/emit_spirv.cpp
@@ -469,7 +469,15 @@ Id EmitIdentity(EmitContext& ctx, const IR::Value& value) {
469 return id; 469 return id;
470} 470}
471 471
472void EmitDummyReference(EmitContext&) {} 472Id EmitConditionRef(EmitContext& ctx, const IR::Value& value) {
473 const Id id{ctx.Def(value)};
474 if (!Sirit::ValidId(id)) {
475 throw NotImplementedException("Forward identity declaration");
476 }
477 return id;
478}
479
480void EmitReference(EmitContext&) {}
473 481
474void EmitPhiMove(EmitContext&) { 482void EmitPhiMove(EmitContext&) {
475 throw LogicError("Unreachable instruction"); 483 throw LogicError("Unreachable instruction");
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_instructions.h b/src/shader_recompiler/backend/spirv/emit_spirv_instructions.h
index 22260d2a9..1181e7b4f 100644
--- a/src/shader_recompiler/backend/spirv/emit_spirv_instructions.h
+++ b/src/shader_recompiler/backend/spirv/emit_spirv_instructions.h
@@ -23,7 +23,8 @@ class EmitContext;
23Id EmitPhi(EmitContext& ctx, IR::Inst* inst); 23Id EmitPhi(EmitContext& ctx, IR::Inst* inst);
24void EmitVoid(EmitContext& ctx); 24void EmitVoid(EmitContext& ctx);
25Id EmitIdentity(EmitContext& ctx, const IR::Value& value); 25Id EmitIdentity(EmitContext& ctx, const IR::Value& value);
26void EmitDummyReference(EmitContext&); 26Id EmitConditionRef(EmitContext& ctx, const IR::Value& value);
27void EmitReference(EmitContext&);
27void EmitPhiMove(EmitContext&); 28void EmitPhiMove(EmitContext&);
28void EmitJoin(EmitContext& ctx); 29void EmitJoin(EmitContext& ctx);
29void EmitDemoteToHelperInvocation(EmitContext& ctx); 30void EmitDemoteToHelperInvocation(EmitContext& ctx);