aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics/Shader/Decoders/Block.cs
diff options
context:
space:
mode:
authorgdk <gab.dark.100@gmail.com>2019-10-13 03:02:07 -0300
committerThog <thog@protonmail.com>2020-01-09 02:13:00 +0100
commit1876b346fea647e8284a66bb6d62c38801035cff (patch)
tree6eeff094298cda84d1613dc5ec0691e51d7b35f1 /Ryujinx.Graphics/Shader/Decoders/Block.cs
parentf617fb542a0e3d36012d77a4b5acbde7b08902f2 (diff)
Initial work
Diffstat (limited to 'Ryujinx.Graphics/Shader/Decoders/Block.cs')
-rw-r--r--Ryujinx.Graphics/Shader/Decoders/Block.cs117
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