diff options
| author | gdk <gab.dark.100@gmail.com> | 2019-10-13 03:02:07 -0300 |
|---|---|---|
| committer | Thog <thog@protonmail.com> | 2020-01-09 02:13:00 +0100 |
| commit | 1876b346fea647e8284a66bb6d62c38801035cff (patch) | |
| tree | 6eeff094298cda84d1613dc5ec0691e51d7b35f1 /Ryujinx.Graphics/Shader/Decoders/Block.cs | |
| parent | f617fb542a0e3d36012d77a4b5acbde7b08902f2 (diff) | |
Initial work
Diffstat (limited to 'Ryujinx.Graphics/Shader/Decoders/Block.cs')
| -rw-r--r-- | Ryujinx.Graphics/Shader/Decoders/Block.cs | 117 |
1 files changed, 0 insertions, 117 deletions
diff --git a/Ryujinx.Graphics/Shader/Decoders/Block.cs b/Ryujinx.Graphics/Shader/Decoders/Block.cs deleted file mode 100644 index b5e610d7..00000000 --- a/Ryujinx.Graphics/Shader/Decoders/Block.cs +++ /dev/null @@ -1,117 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Ryujinx.Graphics.Shader.Decoders -{ - class Block - { - public ulong Address { get; set; } - public ulong EndAddress { get; set; } - - public Block Next { get; set; } - public Block Branch { get; set; } - - public List<OpCode> OpCodes { get; } - public List<OpCodeSsy> SsyOpCodes { get; } - - public Block(ulong address) - { - Address = address; - - OpCodes = new List<OpCode>(); - SsyOpCodes = new List<OpCodeSsy>(); - } - - public void Split(Block rightBlock) - { - int splitIndex = BinarySearch(OpCodes, rightBlock.Address); - - if (OpCodes[splitIndex].Address < rightBlock.Address) - { - splitIndex++; - } - - int splitCount = OpCodes.Count - splitIndex; - - if (splitCount <= 0) - { - throw new ArgumentException("Can't split at right block address."); - } - - rightBlock.EndAddress = EndAddress; - - rightBlock.Next = Next; - rightBlock.Branch = Branch; - - rightBlock.OpCodes.AddRange(OpCodes.GetRange(splitIndex, splitCount)); - - rightBlock.UpdateSsyOpCodes(); - - EndAddress = rightBlock.Address; - - Next = rightBlock; - Branch = null; - - OpCodes.RemoveRange(splitIndex, splitCount); - - UpdateSsyOpCodes(); - } - - private static int BinarySearch(List<OpCode> opCodes, ulong address) - { - int left = 0; - int middle = 0; - int right = opCodes.Count - 1; - - while (left <= right) - { - int size = right - left; - - middle = left + (size >> 1); - - OpCode opCode = opCodes[middle]; - - if (address == opCode.Address) - { - break; - } - - if (address < opCode.Address) - { - right = middle - 1; - } - else - { - left = middle + 1; - } - } - - return middle; - } - - public OpCode GetLastOp() - { - if (OpCodes.Count != 0) - { - return OpCodes[OpCodes.Count - 1]; - } - - return null; - } - - public void UpdateSsyOpCodes() - { - SsyOpCodes.Clear(); - - for (int index = 0; index < OpCodes.Count; index++) - { - if (!(OpCodes[index] is OpCodeSsy op)) - { - continue; - } - - SsyOpCodes.Add(op); - } - } - } -}
\ No newline at end of file |
