From a8a23b6b2ceb57c44a8c8f5a772a1e40d5b36c19 Mon Sep 17 00:00:00 2001 From: KeatonTheBot Date: Sun, 17 May 2026 00:14:06 -0500 Subject: [PATCH] Revert `fix buffer destroy before submit` changes (VertexBufferState.cs & VertexBufferUpdater.cs) from 'Fix Vulkan validation errors' --- .../VertexBufferState.cs | 10 ++++++-- .../VertexBufferUpdater.cs | 24 ++++--------------- 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/src/Ryujinx.Graphics.Vulkan/VertexBufferState.cs b/src/Ryujinx.Graphics.Vulkan/VertexBufferState.cs index c28fe5cd5..f4d512f92 100644 --- a/src/Ryujinx.Graphics.Vulkan/VertexBufferState.cs +++ b/src/Ryujinx.Graphics.Vulkan/VertexBufferState.cs @@ -67,7 +67,9 @@ namespace Ryujinx.Graphics.Vulkan int stride = (_stride + (alignment - 1)) & -alignment; int newSize = (_size / _stride) * stride; - updater.BindVertexBuffer(cbs, binding, autoBuffer, 0, newSize, (ulong)stride); + var buffer = autoBuffer.Get(cbs, 0, newSize).Value; + + updater.BindVertexBuffer(cbs, binding, buffer, 0, (ulong)newSize, (ulong)stride); _buffer = autoBuffer; @@ -90,7 +92,11 @@ namespace Ryujinx.Graphics.Vulkan if (autoBuffer != null) { - updater.BindVertexBuffer(cbs, binding, autoBuffer, _offset, _size, (ulong)_stride); + int offset = _offset; + bool mirrorable = _size <= VertexBufferMaxMirrorable; + var buffer = mirrorable ? autoBuffer.GetMirrorable(cbs, ref offset, _size, out _).Value : autoBuffer.Get(cbs, offset, _size).Value; + + updater.BindVertexBuffer(cbs, binding, buffer, (ulong)offset, (ulong)_size, (ulong)_stride); } } diff --git a/src/Ryujinx.Graphics.Vulkan/VertexBufferUpdater.cs b/src/Ryujinx.Graphics.Vulkan/VertexBufferUpdater.cs index 8927d2264..94269dd76 100644 --- a/src/Ryujinx.Graphics.Vulkan/VertexBufferUpdater.cs +++ b/src/Ryujinx.Graphics.Vulkan/VertexBufferUpdater.cs @@ -15,10 +15,6 @@ namespace Ryujinx.Graphics.Vulkan private readonly NativeArray _sizes; private readonly NativeArray _strides; - private readonly Auto[] _bufferAutos; - private readonly int[] _bufferOffsetsForGet; - private readonly int[] _bufferSizesForGet; - public VertexBufferUpdater(VulkanRenderer gd) { _gd = gd; @@ -27,13 +23,9 @@ namespace Ryujinx.Graphics.Vulkan _offsets = new NativeArray(Constants.MaxVertexBuffers); _sizes = new NativeArray(Constants.MaxVertexBuffers); _strides = new NativeArray(Constants.MaxVertexBuffers); - - _bufferAutos = new Auto[Constants.MaxVertexBuffers]; - _bufferOffsetsForGet = new int[Constants.MaxVertexBuffers]; - _bufferSizesForGet = new int[Constants.MaxVertexBuffers]; } - public void BindVertexBuffer(CommandBufferScoped cbs, uint binding, Auto autoBuffer, int offset, int size, ulong stride) + public void BindVertexBuffer(CommandBufferScoped cbs, uint binding, VkBuffer buffer, ulong offset, ulong size, ulong stride) { if (_count == 0) { @@ -47,11 +39,9 @@ namespace Ryujinx.Graphics.Vulkan int index = (int)_count; - _bufferAutos[index] = autoBuffer; - _bufferOffsetsForGet[index] = offset; - _bufferSizesForGet[index] = size; - _offsets[index] = (ulong)offset; - _sizes[index] = (ulong)size; + _buffers[index] = buffer; + _offsets[index] = offset; + _sizes[index] = size; _strides[index] = stride; _count++; @@ -61,12 +51,6 @@ namespace Ryujinx.Graphics.Vulkan { if (_count != 0) { - for (int i = 0; i < _count; i++) - { - _buffers[i] = _bufferAutos[i].Get(cbs, _bufferOffsetsForGet[i], _bufferSizesForGet[i]).Value; - _bufferAutos[i] = null; - } - if (_gd.Capabilities.SupportsExtendedDynamicState) { _gd.ExtendedDynamicStateApi.CmdBindVertexBuffers2(