aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Gpu/Memory
diff options
context:
space:
mode:
authorgdk <gab.dark.100@gmail.com>2019-11-23 23:24:03 -0300
committerThog <thog@protonmail.com>2020-01-09 02:13:00 +0100
commit16d88c21fc98cd7302811e142a39d590370e182e (patch)
treee2c1a457666a11427ca3a26d701720bfe508e0e3 /Ryujinx.Graphics.Gpu/Memory
parentb2b2e046696e9c187cd9d7d4e3e92dc521082fe5 (diff)
Improved and simplified window texture presentation
Diffstat (limited to 'Ryujinx.Graphics.Gpu/Memory')
-rw-r--r--Ryujinx.Graphics.Gpu/Memory/ConcurrentRangeList.cs208
1 files changed, 0 insertions, 208 deletions
diff --git a/Ryujinx.Graphics.Gpu/Memory/ConcurrentRangeList.cs b/Ryujinx.Graphics.Gpu/Memory/ConcurrentRangeList.cs
deleted file mode 100644
index 6d7d1ce2..00000000
--- a/Ryujinx.Graphics.Gpu/Memory/ConcurrentRangeList.cs
+++ /dev/null
@@ -1,208 +0,0 @@
-using System.Collections.Generic;
-
-namespace Ryujinx.Graphics.Gpu.Memory
-{
- class ConcurrentRangeList<T> where T : IRange<T>
- {
- private List<T> _items;
-
- public ConcurrentRangeList()
- {
- _items = new List<T>();
- }
-
- public void Add(T item)
- {
- lock (_items)
- {
- int index = BinarySearch(item.Address);
-
- if (index < 0)
- {
- index = ~index;
- }
-
- _items.Insert(index, item);
- }
- }
-
- public bool Remove(T item)
- {
- lock (_items)
- {
- int index = BinarySearch(item.Address);
-
- if (index >= 0)
- {
- while (index > 0 && _items[index - 1].Address == item.Address)
- {
- index--;
- }
-
- while (index < _items.Count)
- {
- if (_items[index].Equals(item))
- {
- _items.RemoveAt(index);
-
- return true;
- }
-
- if (_items[index].Address > item.Address)
- {
- break;
- }
-
- index++;
- }
- }
- }
-
- return false;
- }
-
- public T FindFirstOverlap(T item)
- {
- return FindFirstOverlap(item.Address, item.Size);
- }
-
- public T FindFirstOverlap(ulong address, ulong size)
- {
- lock (_items)
- {
- int index = BinarySearch(address, size);
-
- if (index < 0)
- {
- return default(T);
- }
-
- return _items[index];
- }
- }
-
- public T[] FindOverlaps(T item)
- {
- return FindOverlaps(item.Address, item.Size);
- }
-
- public T[] FindOverlaps(ulong address, ulong size)
- {
- List<T> overlapsList = new List<T>();
-
- ulong endAddress = address + size;
-
- lock (_items)
- {
- foreach (T item in _items)
- {
- if (item.Address >= endAddress)
- {
- break;
- }
-
- if (item.OverlapsWith(address, size))
- {
- overlapsList.Add(item);
- }
- }
- }
-
- return overlapsList.ToArray();
- }
-
- public T[] FindOverlaps(ulong address)
- {
- List<T> overlapsList = new List<T>();
-
- lock (_items)
- {
- int index = BinarySearch(address);
-
- if (index >= 0)
- {
- while (index > 0 && _items[index - 1].Address == address)
- {
- index--;
- }
-
- while (index < _items.Count)
- {
- T overlap = _items[index++];
-
- if (overlap.Address != address)
- {
- break;
- }
-
- overlapsList.Add(overlap);
- }
- }
- }
-
- return overlapsList.ToArray();
- }
-
- private int BinarySearch(ulong address)
- {
- int left = 0;
- int right = _items.Count - 1;
-
- while (left <= right)
- {
- int range = right - left;
-
- int middle = left + (range >> 1);
-
- T item = _items[middle];
-
- if (item.Address == address)
- {
- return middle;
- }
-
- if (address < item.Address)
- {
- right = middle - 1;
- }
- else
- {
- left = middle + 1;
- }
- }
-
- return ~left;
- }
-
- private int BinarySearch(ulong address, ulong size)
- {
- int left = 0;
- int right = _items.Count - 1;
-
- while (left <= right)
- {
- int range = right - left;
-
- int middle = left + (range >> 1);
-
- T item = _items[middle];
-
- if (item.OverlapsWith(address, size))
- {
- return middle;
- }
-
- if (address < item.Address)
- {
- right = middle - 1;
- }
- else
- {
- left = middle + 1;
- }
- }
-
- return ~left;
- }
- }
-} \ No newline at end of file