From dc0d0f49b1ee6f469ca573de8a60d936ba0ddac9 Mon Sep 17 00:00:00 2001 From: riperiperi Date: Thu, 23 Dec 2021 01:04:52 +0000 Subject: [PATCH] Cleanup, disable device local buffers for now. --- Ryujinx.Graphics.Vulkan/BufferHolder.cs | 5 +++-- Ryujinx.Graphics.Vulkan/CommandBufferPool.cs | 9 --------- Ryujinx.Graphics.Vulkan/CommandBufferScoped.cs | 5 ----- Ryujinx.Graphics.Vulkan/StagingBuffer.cs | 5 +++++ Ryujinx.Graphics.Vulkan/TextureView.cs | 1 - Ryujinx.Graphics.Vulkan/VulkanGraphicsDevice.cs | 2 +- 6 files changed, 9 insertions(+), 18 deletions(-) diff --git a/Ryujinx.Graphics.Vulkan/BufferHolder.cs b/Ryujinx.Graphics.Vulkan/BufferHolder.cs index e171d3c21..78468bb6c 100644 --- a/Ryujinx.Graphics.Vulkan/BufferHolder.cs +++ b/Ryujinx.Graphics.Vulkan/BufferHolder.cs @@ -180,8 +180,9 @@ namespace Ryujinx.Graphics.Vulkan if (_map != IntPtr.Zero) { // If persistently mapped, set the data directly if the buffer is not currently in use. - //bool needsFlush = _gd.CommandBufferPool.HasWaitableOnRentedCommandBuffer(_waitable, offset, dataSize); - bool needsFlush = _buffer.HasRentedCommandBufferDependency(_gd.CommandBufferPool);// (_waitable, offset, dataSize); + // TODO: Reintroduce waitable & granular use tracking. + // bool needsFlush = _gd.CommandBufferPool.HasWaitableOnRentedCommandBuffer(_waitable, offset, dataSize); + bool needsFlush = _buffer.HasRentedCommandBufferDependency(_gd.CommandBufferPool); if (!needsFlush) { diff --git a/Ryujinx.Graphics.Vulkan/CommandBufferPool.cs b/Ryujinx.Graphics.Vulkan/CommandBufferPool.cs index b9fcc6ba9..752d6392f 100644 --- a/Ryujinx.Graphics.Vulkan/CommandBufferPool.cs +++ b/Ryujinx.Graphics.Vulkan/CommandBufferPool.cs @@ -19,8 +19,6 @@ namespace Ryujinx.Graphics.Vulkan private readonly CommandPool _pool; private readonly Thread _owner; - public int PerFrame = 0; - public bool OwnedByCurrentThread => _owner == Thread.CurrentThread; private struct ReservedCommandBuffer @@ -125,12 +123,6 @@ namespace Ryujinx.Graphics.Vulkan entry.Waitables.Add(waitable); } - public bool HasWaitable(int cbIndex, MultiFenceHolder waitable) - { - ref var entry = ref _commandBuffers[cbIndex]; - return entry.Waitables.Contains(waitable); - } - public bool HasWaitableOnRentedCommandBuffer(MultiFenceHolder waitable, int offset, int size) { lock (_commandBuffers) @@ -200,7 +192,6 @@ namespace Ryujinx.Graphics.Vulkan public CommandBufferScoped Rent() { - PerFrame++; lock (_commandBuffers) { CheckConsumption(_cursor); diff --git a/Ryujinx.Graphics.Vulkan/CommandBufferScoped.cs b/Ryujinx.Graphics.Vulkan/CommandBufferScoped.cs index 702d41ebd..372950a88 100644 --- a/Ryujinx.Graphics.Vulkan/CommandBufferScoped.cs +++ b/Ryujinx.Graphics.Vulkan/CommandBufferScoped.cs @@ -31,11 +31,6 @@ namespace Ryujinx.Graphics.Vulkan _pool.AddDependency(CommandBufferIndex, dependencyCbs); } - public bool HasWaitable(MultiFenceHolder waitable) - { - return _pool.HasWaitable(CommandBufferIndex, waitable); - } - public FenceHolder GetFence() { return _pool.GetFence(CommandBufferIndex); diff --git a/Ryujinx.Graphics.Vulkan/StagingBuffer.cs b/Ryujinx.Graphics.Vulkan/StagingBuffer.cs index 3231fd0dc..55283d54e 100644 --- a/Ryujinx.Graphics.Vulkan/StagingBuffer.cs +++ b/Ryujinx.Graphics.Vulkan/StagingBuffer.cs @@ -82,6 +82,11 @@ namespace Ryujinx.Graphics.Vulkan { scoped.Dispose(); } + else if (_gd.IsIntelWindows) + { + // Not flushing commands here causes glitches on Intel (driver bug?) + _gd.FlushAllCommands(); + } } private void PushDataImpl(CommandBufferScoped cbs, BufferHolder dst, int dstOffset, ReadOnlySpan data) diff --git a/Ryujinx.Graphics.Vulkan/TextureView.cs b/Ryujinx.Graphics.Vulkan/TextureView.cs index e8928bd13..d5c414761 100644 --- a/Ryujinx.Graphics.Vulkan/TextureView.cs +++ b/Ryujinx.Graphics.Vulkan/TextureView.cs @@ -746,7 +746,6 @@ namespace Ryujinx.Graphics.Vulkan if (loadInline) { _gd.PipelineInternal.EndRenderPass(); - Common.Logging.Logger.Error?.PrintMsg(Common.Logging.LogClass.Gpu, "Loaded inline!"); } CopyDataToBuffer(bufferHolder.GetDataStorage(0, bufferDataLength), data); diff --git a/Ryujinx.Graphics.Vulkan/VulkanGraphicsDevice.cs b/Ryujinx.Graphics.Vulkan/VulkanGraphicsDevice.cs index 88a6097e0..1d47cd386 100644 --- a/Ryujinx.Graphics.Vulkan/VulkanGraphicsDevice.cs +++ b/Ryujinx.Graphics.Vulkan/VulkanGraphicsDevice.cs @@ -197,7 +197,7 @@ namespace Ryujinx.Graphics.Vulkan public BufferHandle CreateBuffer(int size) { - return BufferManager.CreateWithHandle(this, size, true); + return BufferManager.CreateWithHandle(this, size, false); } public IProgram CreateProgram(IShader[] shaders, ShaderInfo info)