diff options
| author | 2021-03-14 03:41:05 -0300 | |
|---|---|---|
| committer | 2021-07-22 21:51:23 -0400 | |
| commit | 71f96fa6366dc6dd306a953bca1b958fb32bc55a (patch) | |
| tree | 12e13f9502e4b9510446c967a831e5d4bacb729e /src/shader_recompiler/backend/spirv | |
| parent | spirv: Add SignedZeroInfNanPreserve logic (diff) | |
| download | yuzu-71f96fa6366dc6dd306a953bca1b958fb32bc55a.tar.gz yuzu-71f96fa6366dc6dd306a953bca1b958fb32bc55a.tar.xz yuzu-71f96fa6366dc6dd306a953bca1b958fb32bc55a.zip | |
shader: Implement CAL inlining function calls
Diffstat (limited to 'src/shader_recompiler/backend/spirv')
| -rw-r--r-- | src/shader_recompiler/backend/spirv/emit_context.cpp | 6 | ||||
| -rw-r--r-- | src/shader_recompiler/backend/spirv/emit_spirv.cpp | 17 |
2 files changed, 8 insertions, 15 deletions
diff --git a/src/shader_recompiler/backend/spirv/emit_context.cpp b/src/shader_recompiler/backend/spirv/emit_context.cpp index 278b26b50..f848c6175 100644 --- a/src/shader_recompiler/backend/spirv/emit_context.cpp +++ b/src/shader_recompiler/backend/spirv/emit_context.cpp | |||
| @@ -262,10 +262,8 @@ void EmitContext::DefineTextures(const Info& info, u32& binding) { | |||
| 262 | } | 262 | } |
| 263 | 263 | ||
| 264 | void EmitContext::DefineLabels(IR::Program& program) { | 264 | void EmitContext::DefineLabels(IR::Program& program) { |
| 265 | for (const IR::Function& function : program.functions) { | 265 | for (IR::Block* const block : program.blocks) { |
| 266 | for (IR::Block* const block : function.blocks) { | 266 | block->SetDefinition(OpLabel()); |
| 267 | block->SetDefinition(OpLabel()); | ||
| 268 | } | ||
| 269 | } | 267 | } |
| 270 | } | 268 | } |
| 271 | 269 | ||
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv.cpp b/src/shader_recompiler/backend/spirv/emit_spirv.cpp index c7cba6279..7e7db9161 100644 --- a/src/shader_recompiler/backend/spirv/emit_spirv.cpp +++ b/src/shader_recompiler/backend/spirv/emit_spirv.cpp | |||
| @@ -10,7 +10,6 @@ | |||
| 10 | 10 | ||
| 11 | #include "shader_recompiler/backend/spirv/emit_spirv.h" | 11 | #include "shader_recompiler/backend/spirv/emit_spirv.h" |
| 12 | #include "shader_recompiler/frontend/ir/basic_block.h" | 12 | #include "shader_recompiler/frontend/ir/basic_block.h" |
| 13 | #include "shader_recompiler/frontend/ir/function.h" | ||
| 14 | #include "shader_recompiler/frontend/ir/microinstruction.h" | 13 | #include "shader_recompiler/frontend/ir/microinstruction.h" |
| 15 | #include "shader_recompiler/frontend/ir/program.h" | 14 | #include "shader_recompiler/frontend/ir/program.h" |
| 16 | 15 | ||
| @@ -199,18 +198,14 @@ Id PhiArgDef(EmitContext& ctx, IR::Inst* inst, size_t index) { | |||
| 199 | std::vector<u32> EmitSPIRV(const Profile& profile, Environment& env, IR::Program& program) { | 198 | std::vector<u32> EmitSPIRV(const Profile& profile, Environment& env, IR::Program& program) { |
| 200 | EmitContext ctx{profile, program}; | 199 | EmitContext ctx{profile, program}; |
| 201 | const Id void_function{ctx.TypeFunction(ctx.void_id)}; | 200 | const Id void_function{ctx.TypeFunction(ctx.void_id)}; |
| 202 | // FIXME: Forward declare functions (needs sirit support) | 201 | const Id func{ctx.OpFunction(ctx.void_id, spv::FunctionControlMask::MaskNone, void_function)}; |
| 203 | Id func{}; | 202 | for (IR::Block* const block : program.blocks) { |
| 204 | for (IR::Function& function : program.functions) { | 203 | ctx.AddLabel(block->Definition<Id>()); |
| 205 | func = ctx.OpFunction(ctx.void_id, spv::FunctionControlMask::MaskNone, void_function); | 204 | for (IR::Inst& inst : block->Instructions()) { |
| 206 | for (IR::Block* const block : function.blocks) { | 205 | EmitInst(ctx, &inst); |
| 207 | ctx.AddLabel(block->Definition<Id>()); | ||
| 208 | for (IR::Inst& inst : block->Instructions()) { | ||
| 209 | EmitInst(ctx, &inst); | ||
| 210 | } | ||
| 211 | } | 206 | } |
| 212 | ctx.OpFunctionEnd(); | ||
| 213 | } | 207 | } |
| 208 | ctx.OpFunctionEnd(); | ||
| 214 | boost::container::small_vector<Id, 32> interfaces; | 209 | boost::container::small_vector<Id, 32> interfaces; |
| 215 | const Info& info{program.info}; | 210 | const Info& info{program.info}; |
| 216 | if (info.uses_workgroup_id) { | 211 | if (info.uses_workgroup_id) { |