aboutsummaryrefslogtreecommitdiff
path: root/src/shader_recompiler/backend/spirv/emit_spirv.cpp
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2021-04-11 02:46:51 -0300
committerameerj <52414509+ameerj@users.noreply.github.com>2021-07-22 21:51:27 -0400
commit106764a6d51566b050dfe7124f82cf9a4de468c1 (patch)
tree3298d279c99e259b507a6e3b288f3267162e3d63 /src/shader_recompiler/backend/spirv/emit_spirv.cpp
parentab543f18213133b3076b81f30df386d5cb470e49 (diff)
spirv: Move phi node patching to a separate function
Diffstat (limited to 'src/shader_recompiler/backend/spirv/emit_spirv.cpp')
-rw-r--r--src/shader_recompiler/backend/spirv/emit_spirv.cpp29
1 files changed, 16 insertions, 13 deletions
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv.cpp b/src/shader_recompiler/backend/spirv/emit_spirv.cpp
index db7b3f1b2a..5a1ffd61cb 100644
--- a/src/shader_recompiler/backend/spirv/emit_spirv.cpp
+++ b/src/shader_recompiler/backend/spirv/emit_spirv.cpp
@@ -246,21 +246,10 @@ void SetupCapabilities(const Profile& profile, const Info& info, EmitContext& ct
ctx.AddCapability(spv::Capability::ImageQuery);
ctx.AddCapability(spv::Capability::SampledBuffer);
}
-} // Anonymous namespace
-
-std::vector<u32> EmitSPIRV(const Profile& profile, IR::Program& program, u32& binding) {
- EmitContext ctx{profile, program, binding};
- const Id main{DefineMain(ctx, program)};
- DefineEntryPoint(program, ctx, main);
- if (profile.support_float_controls) {
- ctx.AddExtension("SPV_KHR_float_controls");
- SetupDenormControl(profile, program, ctx, main);
- SetupSignedNanCapabilities(profile, program, ctx, main);
- }
- SetupCapabilities(profile, program.info, ctx);
+void PatchPhiNodes(IR::Program& program, EmitContext& ctx) {
auto inst{program.blocks.front()->begin()};
- size_t block_index{};
+ size_t block_index{0};
ctx.PatchDeferredPhi([&](size_t phi_arg) {
if (phi_arg == 0) {
++inst;
@@ -274,6 +263,20 @@ std::vector<u32> EmitSPIRV(const Profile& profile, IR::Program& program, u32& bi
}
return ctx.Def(inst->Arg(phi_arg));
});
+}
+} // Anonymous namespace
+
+std::vector<u32> EmitSPIRV(const Profile& profile, IR::Program& program, u32& binding) {
+ EmitContext ctx{profile, program, binding};
+ const Id main{DefineMain(ctx, program)};
+ DefineEntryPoint(program, ctx, main);
+ if (profile.support_float_controls) {
+ ctx.AddExtension("SPV_KHR_float_controls");
+ SetupDenormControl(profile, program, ctx, main);
+ SetupSignedNanCapabilities(profile, program, ctx, main);
+ }
+ SetupCapabilities(profile, program.info, ctx);
+ PatchPhiNodes(program, ctx);
return ctx.Assemble();
}