From 344f4f52c1117028d08802aff60fbd4d875717b4 Mon Sep 17 00:00:00 2001
From: Isaac Marovitz <42140194+IsaacMarovitz@users.noreply.github.com>
Date: Tue, 16 Jul 2024 21:01:06 +0100
Subject: [PATCH] Remove CommandBufferScoped Dependencies (#6958)

---
 .../CommandBufferPool.cs                      | 17 ------
 .../CommandBufferScoped.cs                    |  5 --
 .../SemaphoreHolder.cs                        | 60 -------------------
 3 files changed, 82 deletions(-)
 delete mode 100644 src/Ryujinx.Graphics.Vulkan/SemaphoreHolder.cs

diff --git a/src/Ryujinx.Graphics.Vulkan/CommandBufferPool.cs b/src/Ryujinx.Graphics.Vulkan/CommandBufferPool.cs
index 80054ce2cb..e3938392f2 100644
--- a/src/Ryujinx.Graphics.Vulkan/CommandBufferPool.cs
+++ b/src/Ryujinx.Graphics.Vulkan/CommandBufferPool.cs
@@ -31,11 +31,9 @@ namespace Ryujinx.Graphics.Vulkan
             public int SubmissionCount;
             public CommandBuffer CommandBuffer;
             public FenceHolder Fence;
-            public SemaphoreHolder Semaphore;
 
             public List<IAuto> Dependants;
             public List<MultiFenceHolder> Waitables;
-            public HashSet<SemaphoreHolder> Dependencies;
 
             public void Initialize(Vk api, Device device, CommandPool pool)
             {
@@ -51,7 +49,6 @@ namespace Ryujinx.Graphics.Vulkan
 
                 Dependants = new List<IAuto>();
                 Waitables = new List<MultiFenceHolder>();
-                Dependencies = new HashSet<SemaphoreHolder>();
             }
         }
 
@@ -143,14 +140,6 @@ namespace Ryujinx.Graphics.Vulkan
             }
         }
 
-        public void AddDependency(int cbIndex, CommandBufferScoped dependencyCbs)
-        {
-            Debug.Assert(_commandBuffers[cbIndex].InUse);
-            var semaphoreHolder = _commandBuffers[dependencyCbs.CommandBufferIndex].Semaphore;
-            semaphoreHolder.Get();
-            _commandBuffers[cbIndex].Dependencies.Add(semaphoreHolder);
-        }
-
         public void AddWaitable(int cbIndex, MultiFenceHolder waitable)
         {
             ref var entry = ref _commandBuffers[cbIndex];
@@ -354,14 +343,8 @@ namespace Ryujinx.Graphics.Vulkan
                 waitable.RemoveBufferUses(cbIndex);
             }
 
-            foreach (var dependency in entry.Dependencies)
-            {
-                dependency.Put();
-            }
-
             entry.Dependants.Clear();
             entry.Waitables.Clear();
-            entry.Dependencies.Clear();
             entry.Fence?.Dispose();
 
             if (refreshFence)
diff --git a/src/Ryujinx.Graphics.Vulkan/CommandBufferScoped.cs b/src/Ryujinx.Graphics.Vulkan/CommandBufferScoped.cs
index 270cdc6e66..2accd69b20 100644
--- a/src/Ryujinx.Graphics.Vulkan/CommandBufferScoped.cs
+++ b/src/Ryujinx.Graphics.Vulkan/CommandBufferScoped.cs
@@ -26,11 +26,6 @@ namespace Ryujinx.Graphics.Vulkan
             _pool.AddWaitable(CommandBufferIndex, waitable);
         }
 
-        public void AddDependency(CommandBufferScoped dependencyCbs)
-        {
-            _pool.AddDependency(CommandBufferIndex, dependencyCbs);
-        }
-
         public FenceHolder GetFence()
         {
             return _pool.GetFence(CommandBufferIndex);
diff --git a/src/Ryujinx.Graphics.Vulkan/SemaphoreHolder.cs b/src/Ryujinx.Graphics.Vulkan/SemaphoreHolder.cs
deleted file mode 100644
index 618a7d4880..0000000000
--- a/src/Ryujinx.Graphics.Vulkan/SemaphoreHolder.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-using Silk.NET.Vulkan;
-using System;
-using System.Threading;
-using VkSemaphore = Silk.NET.Vulkan.Semaphore;
-
-namespace Ryujinx.Graphics.Vulkan
-{
-    class SemaphoreHolder : IDisposable
-    {
-        private readonly Vk _api;
-        private readonly Device _device;
-        private VkSemaphore _semaphore;
-        private int _referenceCount;
-        private bool _disposed;
-
-        public unsafe SemaphoreHolder(Vk api, Device device)
-        {
-            _api = api;
-            _device = device;
-
-            var semaphoreCreateInfo = new SemaphoreCreateInfo
-            {
-                SType = StructureType.SemaphoreCreateInfo,
-            };
-
-            api.CreateSemaphore(device, in semaphoreCreateInfo, null, out _semaphore).ThrowOnError();
-
-            _referenceCount = 1;
-        }
-
-        public VkSemaphore GetUnsafe()
-        {
-            return _semaphore;
-        }
-
-        public VkSemaphore Get()
-        {
-            Interlocked.Increment(ref _referenceCount);
-            return _semaphore;
-        }
-
-        public unsafe void Put()
-        {
-            if (Interlocked.Decrement(ref _referenceCount) == 0)
-            {
-                _api.DestroySemaphore(_device, _semaphore, null);
-                _semaphore = default;
-            }
-        }
-
-        public void Dispose()
-        {
-            if (!_disposed)
-            {
-                Put();
-                _disposed = true;
-            }
-        }
-    }
-}