summaryrefslogtreecommitdiffstats
path: root/src/shader_recompiler/ir_opt/dual_vertex_pass.cpp
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2021-05-14 05:40:54 +0200
committerameerj <52414509+ameerj@users.noreply.github.com>2021-07-23 03:51:31 +0200
commitd54d7de40e7295827b0e4e4026441b53d3fc9569 (patch)
tree29b5074f851292dace7aeb5da7716675544b3735 /src/shader_recompiler/ir_opt/dual_vertex_pass.cpp
parentglasm: Implement Storage atomics (diff)
downloadyuzu-d54d7de40e7295827b0e4e4026441b53d3fc9569.tar
yuzu-d54d7de40e7295827b0e4e4026441b53d3fc9569.tar.gz
yuzu-d54d7de40e7295827b0e4e4026441b53d3fc9569.tar.bz2
yuzu-d54d7de40e7295827b0e4e4026441b53d3fc9569.tar.lz
yuzu-d54d7de40e7295827b0e4e4026441b53d3fc9569.tar.xz
yuzu-d54d7de40e7295827b0e4e4026441b53d3fc9569.tar.zst
yuzu-d54d7de40e7295827b0e4e4026441b53d3fc9569.zip
Diffstat (limited to 'src/shader_recompiler/ir_opt/dual_vertex_pass.cpp')
-rw-r--r--src/shader_recompiler/ir_opt/dual_vertex_pass.cpp56
1 files changed, 6 insertions, 50 deletions
diff --git a/src/shader_recompiler/ir_opt/dual_vertex_pass.cpp b/src/shader_recompiler/ir_opt/dual_vertex_pass.cpp
index f2d7db0e6..b0a9f5258 100644
--- a/src/shader_recompiler/ir_opt/dual_vertex_pass.cpp
+++ b/src/shader_recompiler/ir_opt/dual_vertex_pass.cpp
@@ -13,60 +13,16 @@
namespace Shader::Optimization {
-void VertexATransformPass(IR::Program& program) {
- bool replaced_join{};
- bool eliminated_epilogue{};
- for (IR::Block* const block : program.post_order_blocks) {
- for (IR::Inst& inst : block->Instructions()) {
- switch (inst.GetOpcode()) {
- case IR::Opcode::Return:
- inst.ReplaceOpcode(IR::Opcode::Join);
- replaced_join = true;
- break;
- case IR::Opcode::Epilogue:
- inst.Invalidate();
- eliminated_epilogue = true;
- break;
- default:
- break;
- }
- if (replaced_join && eliminated_epilogue) {
- return;
- }
- }
- }
+void VertexATransformPass(IR::Program&) {
+ throw NotImplementedException("VertexA pass");
}
-void VertexBTransformPass(IR::Program& program) {
- for (IR::Block* const block : program.blocks) {
- for (IR::Inst& inst : block->Instructions()) {
- if (inst.GetOpcode() == IR::Opcode::Prologue) {
- return inst.Invalidate();
- }
- }
- }
+void VertexBTransformPass(IR::Program&) {
+ throw NotImplementedException("VertexA pass");
}
-void DualVertexJoinPass(IR::Program& program) {
- const auto& blocks = program.blocks;
- const s64 sub_size = static_cast<s64>(blocks.size()) - 1;
- if (sub_size < 1) {
- throw LogicError("Dual Vertex Join pass failed, expected atleast 2 blocks");
- }
- for (s64 index = 0; index < sub_size; ++index) {
- IR::Block* const current_block{blocks[index]};
- IR::Block* const next_block{blocks[index + 1]};
- for (IR::Inst& inst : current_block->Instructions()) {
- if (inst.GetOpcode() == IR::Opcode::Join) {
- IR::IREmitter ir{*current_block, IR::Block::InstructionList::s_iterator_to(inst)};
- ir.Branch(next_block);
- inst.Invalidate();
- // Only 1 join should exist
- return;
- }
- }
- }
- throw LogicError("Dual Vertex Join pass failed, no join present");
+void DualVertexJoinPass(IR::Program&) {
+ throw NotImplementedException("VertexA pass");
}
} // namespace Shader::Optimization