From 0dbe45ae37a7aea1bf86787a638ddb68df97a50c Mon Sep 17 00:00:00 2001 From: riperiperi Date: Sun, 16 Oct 2022 23:38:58 +0100 Subject: Fix various issues caused by Vertex/Index buffer conversions (#3762) * Fix various issues caused by #3679 - The arguments for the 0th dummy vertex buffer were incorrect - it was given an offset of 16 rather than a size of 16. - The wrong size was used when doing `autoBuffer.Get` on a converted vertex buffer. - The possibility of a vertex buffer being disposed and then rebound can rebindings to find a different buffer where the current range is out of bounds. Avoid binding when out of range to prevent validation errors. - The above also affects generation of converted buffers, which was a bit more fatal. Conversion functions now attempt to bound input offset/size. * Fix offset for converted buffer --- Ryujinx.Graphics.Vulkan/IndexBufferState.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'Ryujinx.Graphics.Vulkan/IndexBufferState.cs') diff --git a/Ryujinx.Graphics.Vulkan/IndexBufferState.cs b/Ryujinx.Graphics.Vulkan/IndexBufferState.cs index 1a112d4d..205eab27 100644 --- a/Ryujinx.Graphics.Vulkan/IndexBufferState.cs +++ b/Ryujinx.Graphics.Vulkan/IndexBufferState.cs @@ -49,7 +49,12 @@ namespace Ryujinx.Graphics.Vulkan } else { - autoBuffer = gd.BufferManager.GetBuffer(cbs.CommandBuffer, _handle, false, out int _); + autoBuffer = gd.BufferManager.GetBuffer(cbs.CommandBuffer, _handle, false, out int bufferSize); + + if (_offset >= bufferSize) + { + autoBuffer = null; + } offset = _offset; size = _size; -- cgit v1.2.3