diff options
| author | gdk <gab.dark.100@gmail.com> | 2019-11-27 00:38:56 -0300 |
|---|---|---|
| committer | Thog <thog@protonmail.com> | 2020-01-09 02:13:00 +0100 |
| commit | 442485adb32626b3931cd15f284d0e686b0021fc (patch) | |
| tree | 65791c99024c3c7e27088ce6740efabf2f0276dc /Ryujinx.Graphics.Shader/Translation | |
| parent | 99f236fcf03e4304a91df70c3545b9b79ff15942 (diff) | |
Partial support for branch with CC, and fix a edge case of branch out of loop on shaders
Diffstat (limited to 'Ryujinx.Graphics.Shader/Translation')
| -rw-r--r-- | Ryujinx.Graphics.Shader/Translation/Translator.cs | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/Ryujinx.Graphics.Shader/Translation/Translator.cs b/Ryujinx.Graphics.Shader/Translation/Translator.cs index 9c1eb08e..1c37fa70 100644 --- a/Ryujinx.Graphics.Shader/Translation/Translator.cs +++ b/Ryujinx.Graphics.Shader/Translation/Translator.cs @@ -1,6 +1,5 @@ using Ryujinx.Graphics.Shader.CodeGen.Glsl; using Ryujinx.Graphics.Shader.Decoders; -using Ryujinx.Graphics.Shader.Instructions; using Ryujinx.Graphics.Shader.IntermediateRepresentation; using Ryujinx.Graphics.Shader.StructuredIr; using Ryujinx.Graphics.Shader.Translation.Optimizations; @@ -219,15 +218,15 @@ namespace Ryujinx.Graphics.Shader.Translation Operand predSkipLbl = null; - bool skipPredicateCheck = op.Emitter == InstEmit.Bra; + bool skipPredicateCheck = op is OpCodeBranch opBranch && !opBranch.PushTarget; if (op is OpCodeBranchPop opBranchPop) { - // If the instruction is a SYNC instruction with only one + // If the instruction is a SYNC or BRK instruction with only one // possible target address, then the instruction is basically // just a simple branch, we can generate code similar to branch // instructions, with the condition check on the branch itself. - skipPredicateCheck |= opBranchPop.Targets.Count < 2; + skipPredicateCheck = opBranchPop.Targets.Count < 2; } if (!(op.Predicate.IsPT || skipPredicateCheck)) |
