diff options
author | FernandoS27 <fsahmkow27@gmail.com> | 2021-04-01 22:20:57 +0200 |
---|---|---|
committer | ameerj <52414509+ameerj@users.noreply.github.com> | 2021-07-23 03:51:25 +0200 |
commit | ecb30c907266921818d5b6b03e341028fa2ea082 (patch) | |
tree | 8bf3f0097653fa11b6dae823f79fe671204ad55e /src/shader_recompiler/frontend/ir/ir_emitter.cpp | |
parent | shader: Mark SSBOs as written when they are (diff) | |
download | yuzu-ecb30c907266921818d5b6b03e341028fa2ea082.tar yuzu-ecb30c907266921818d5b6b03e341028fa2ea082.tar.gz yuzu-ecb30c907266921818d5b6b03e341028fa2ea082.tar.bz2 yuzu-ecb30c907266921818d5b6b03e341028fa2ea082.tar.lz yuzu-ecb30c907266921818d5b6b03e341028fa2ea082.tar.xz yuzu-ecb30c907266921818d5b6b03e341028fa2ea082.tar.zst yuzu-ecb30c907266921818d5b6b03e341028fa2ea082.zip |
Diffstat (limited to 'src/shader_recompiler/frontend/ir/ir_emitter.cpp')
-rw-r--r-- | src/shader_recompiler/frontend/ir/ir_emitter.cpp | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/src/shader_recompiler/frontend/ir/ir_emitter.cpp b/src/shader_recompiler/frontend/ir/ir_emitter.cpp index 5258ede09..ddaa873f2 100644 --- a/src/shader_recompiler/frontend/ir/ir_emitter.cpp +++ b/src/shader_recompiler/frontend/ir/ir_emitter.cpp @@ -198,6 +198,38 @@ void IREmitter::SetOFlag(const U1& value) { Inst(Opcode::SetOFlag, value); } +U1 IREmitter::GetFCSMFlag() { + return Inst<U1>(Opcode::GetFCSMFlag); +} + +U1 IREmitter::GetTAFlag() { + return Inst<U1>(Opcode::GetTAFlag); +} + +U1 IREmitter::GetTRFlag() { + return Inst<U1>(Opcode::GetTRFlag); +} + +U1 IREmitter::GetMXFlag() { + return Inst<U1>(Opcode::GetMXFlag); +} + +void IREmitter::SetFCSMFlag(const U1& value) { + Inst(Opcode::SetFCSMFlag, value); +} + +void IREmitter::SetTAFlag(const U1& value) { + Inst(Opcode::SetTAFlag, value); +} + +void IREmitter::SetTRFlag(const U1& value) { + Inst(Opcode::SetTRFlag, value); +} + +void IREmitter::SetMXFlag(const U1& value) { + Inst(Opcode::SetMXFlag, value); +} + static U1 GetFlowTest(IREmitter& ir, FlowTest flow_test) { switch (flow_test) { case FlowTest::F: @@ -256,13 +288,14 @@ static U1 GetFlowTest(IREmitter& ir, FlowTest flow_test) { return ir.LogicalOr(ir.GetSFlag(), ir.GetZFlag()); case FlowTest::RGT: return ir.LogicalAnd(ir.LogicalNot(ir.GetSFlag()), ir.LogicalNot(ir.GetZFlag())); + + case FlowTest::FCSM_TR: + return ir.LogicalAnd(ir.GetFCSMFlag(), ir.GetTRFlag()); case FlowTest::CSM_TA: case FlowTest::CSM_TR: case FlowTest::CSM_MX: case FlowTest::FCSM_TA: - case FlowTest::FCSM_TR: case FlowTest::FCSM_MX: - return ir.Imm1(false); default: throw NotImplementedException("Flow test {}", flow_test); } |