From cee712105850ac3385cd0091a923438167433f9f Mon Sep 17 00:00:00 2001
From: TSR Berry <20988865+TSRBerry@users.noreply.github.com>
Date: Sat, 8 Apr 2023 01:22:00 +0200
Subject: Move solution and projects to src
---
.../Synchronization/SynchronizationManager.cs | 143 ---------------------
Ryujinx.Graphics.Gpu/Synchronization/Syncpoint.cs | 128 ------------------
.../Synchronization/SyncpointWaiterHandle.cs | 10 --
3 files changed, 281 deletions(-)
delete mode 100644 Ryujinx.Graphics.Gpu/Synchronization/SynchronizationManager.cs
delete mode 100644 Ryujinx.Graphics.Gpu/Synchronization/Syncpoint.cs
delete mode 100644 Ryujinx.Graphics.Gpu/Synchronization/SyncpointWaiterHandle.cs
(limited to 'Ryujinx.Graphics.Gpu/Synchronization')
diff --git a/Ryujinx.Graphics.Gpu/Synchronization/SynchronizationManager.cs b/Ryujinx.Graphics.Gpu/Synchronization/SynchronizationManager.cs
deleted file mode 100644
index 968de930..00000000
--- a/Ryujinx.Graphics.Gpu/Synchronization/SynchronizationManager.cs
+++ /dev/null
@@ -1,143 +0,0 @@
-using Ryujinx.Common.Logging;
-using System;
-using System.Threading;
-
-namespace Ryujinx.Graphics.Gpu.Synchronization
-{
- ///
- /// GPU synchronization manager.
- ///
- public class SynchronizationManager
- {
- ///
- /// The maximum number of syncpoints supported by the GM20B.
- ///
- public const int MaxHardwareSyncpoints = 192;
-
- ///
- /// Array containing all hardware syncpoints.
- ///
- private Syncpoint[] _syncpoints;
-
- public SynchronizationManager()
- {
- _syncpoints = new Syncpoint[MaxHardwareSyncpoints];
-
- for (uint i = 0; i < _syncpoints.Length; i++)
- {
- _syncpoints[i] = new Syncpoint(i);
- }
- }
-
- ///
- /// Increment the value of a syncpoint with a given id.
- ///
- /// The id of the syncpoint
- /// Thrown when id >= MaxHardwareSyncpoints
- /// The incremented value of the syncpoint
- public uint IncrementSyncpoint(uint id)
- {
- if (id >= MaxHardwareSyncpoints)
- {
- throw new ArgumentOutOfRangeException(nameof(id));
- }
-
- return _syncpoints[id].Increment();
- }
-
- ///
- /// Get the value of a syncpoint with a given id.
- ///
- /// The id of the syncpoint
- /// Thrown when id >= MaxHardwareSyncpoints
- /// The value of the syncpoint
- public uint GetSyncpointValue(uint id)
- {
- if (id >= MaxHardwareSyncpoints)
- {
- throw new ArgumentOutOfRangeException(nameof(id));
- }
-
- return _syncpoints[id].Value;
- }
-
- ///
- /// Register a new callback on a syncpoint with a given id at a target threshold.
- /// The callback will be called once the threshold is reached and will automatically be unregistered.
- ///
- /// The id of the syncpoint
- /// The target threshold
- /// The callback to call when the threshold is reached
- /// Thrown when id >= MaxHardwareSyncpoints
- /// The created SyncpointWaiterHandle object or null if already past threshold
- public SyncpointWaiterHandle RegisterCallbackOnSyncpoint(uint id, uint threshold, Action callback)
- {
- if (id >= MaxHardwareSyncpoints)
- {
- throw new ArgumentOutOfRangeException(nameof(id));
- }
-
- return _syncpoints[id].RegisterCallback(threshold, callback);
- }
-
- ///
- /// Unregister a callback on a given syncpoint.
- ///
- /// The id of the syncpoint
- /// The waiter information to unregister
- /// Thrown when id >= MaxHardwareSyncpoints
- public void UnregisterCallback(uint id, SyncpointWaiterHandle waiterInformation)
- {
- if (id >= MaxHardwareSyncpoints)
- {
- throw new ArgumentOutOfRangeException(nameof(id));
- }
-
- _syncpoints[id].UnregisterCallback(waiterInformation);
- }
-
- ///
- /// Wait on a syncpoint with a given id at a target threshold.
- /// The callback will be called once the threshold is reached and will automatically be unregistered.
- ///
- /// The id of the syncpoint
- /// The target threshold
- /// The timeout
- /// Thrown when id >= MaxHardwareSyncpoints
- /// True if timed out
- public bool WaitOnSyncpoint(uint id, uint threshold, TimeSpan timeout)
- {
- if (id >= MaxHardwareSyncpoints)
- {
- throw new ArgumentOutOfRangeException(nameof(id));
- }
-
- // TODO: Remove this when GPU channel scheduling will be implemented.
- if (timeout == Timeout.InfiniteTimeSpan)
- {
- timeout = TimeSpan.FromSeconds(1);
- }
-
- using (ManualResetEvent waitEvent = new ManualResetEvent(false))
- {
- var info = _syncpoints[id].RegisterCallback(threshold, (x) => waitEvent.Set());
-
- if (info == null)
- {
- return false;
- }
-
- bool signaled = waitEvent.WaitOne(timeout);
-
- if (!signaled && info != null)
- {
- Logger.Error?.Print(LogClass.Gpu, $"Wait on syncpoint {id} for threshold {threshold} took more than {timeout.TotalMilliseconds}ms, resuming execution...");
-
- _syncpoints[id].UnregisterCallback(info);
- }
-
- return !signaled;
- }
- }
- }
-}
diff --git a/Ryujinx.Graphics.Gpu/Synchronization/Syncpoint.cs b/Ryujinx.Graphics.Gpu/Synchronization/Syncpoint.cs
deleted file mode 100644
index 39fb83c0..00000000
--- a/Ryujinx.Graphics.Gpu/Synchronization/Syncpoint.cs
+++ /dev/null
@@ -1,128 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Threading;
-
-namespace Ryujinx.Graphics.Gpu.Synchronization
-{
- ///
- /// Represents GPU hardware syncpoint.
- ///
- class Syncpoint
- {
- private int _storedValue;
-
- public readonly uint Id;
-
- ///
- /// The value of the syncpoint.
- ///
- public uint Value => (uint)_storedValue;
-
- // TODO: switch to something handling concurrency?
- private readonly List _waiters;
-
- public Syncpoint(uint id)
- {
- Id = id;
- _waiters = new List();
- }
-
- ///
- /// Register a new callback for a target threshold.
- /// The callback will be called once the threshold is reached and will automatically be unregistered.
- ///
- /// The target threshold
- /// The callback to call when the threshold is reached
- /// The created SyncpointWaiterHandle object or null if already past threshold
- public SyncpointWaiterHandle RegisterCallback(uint threshold, Action callback)
- {
- lock (_waiters)
- {
- if (Value >= threshold)
- {
- callback(null);
-
- return null;
- }
- else
- {
- SyncpointWaiterHandle waiterInformation = new SyncpointWaiterHandle
- {
- Threshold = threshold,
- Callback = callback
- };
-
- _waiters.Add(waiterInformation);
-
- return waiterInformation;
- }
- }
- }
-
- public void UnregisterCallback(SyncpointWaiterHandle waiterInformation)
- {
- lock (_waiters)
- {
- _waiters.Remove(waiterInformation);
- }
- }
-
- ///
- /// Increment the syncpoint
- ///
- /// The incremented value of the syncpoint
- public uint Increment()
- {
- uint currentValue = (uint)Interlocked.Increment(ref _storedValue);
-
- SyncpointWaiterHandle expired = null;
- List expiredList = null;
-
- lock (_waiters)
- {
- _waiters.RemoveAll(item =>
- {
- bool isPastThreshold = currentValue >= item.Threshold;
-
- if (isPastThreshold)
- {
- if (expired == null)
- {
- expired = item;
- }
- else
- {
- if (expiredList == null)
- {
- expiredList = new List();
- }
-
- expiredList.Add(item);
- }
- }
-
- return isPastThreshold;
- });
- }
-
- // Call the callbacks as a separate step.
- // As we don't know what the callback will be doing,
- // and it could block execution for a indefinite amount of time,
- // we can't call it inside the lock.
- if (expired != null)
- {
- expired.Callback(expired);
-
- if (expiredList != null)
- {
- for (int i = 0; i < expiredList.Count; i++)
- {
- expiredList[i].Callback(expiredList[i]);
- }
- }
- }
-
- return currentValue;
- }
- }
-}
diff --git a/Ryujinx.Graphics.Gpu/Synchronization/SyncpointWaiterHandle.cs b/Ryujinx.Graphics.Gpu/Synchronization/SyncpointWaiterHandle.cs
deleted file mode 100644
index dd2a5812..00000000
--- a/Ryujinx.Graphics.Gpu/Synchronization/SyncpointWaiterHandle.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System;
-
-namespace Ryujinx.Graphics.Gpu.Synchronization
-{
- public class SyncpointWaiterHandle
- {
- internal uint Threshold;
- internal Action Callback;
- }
-}
--
cgit v1.2.3