diff options
author | riperiperi <rhy3756547@hotmail.com> | 2022-09-09 00:30:19 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-08 20:30:19 -0300 |
commit | c6d82209abeacd2336cde99e5a02b4596e70da83 (patch) | |
tree | 8dc8e1055f402c07e6ed9e4ff247ca420729808c /Ryujinx.Graphics.Vulkan/BufferState.cs | |
parent | ee1825219b8ccca13df7198d4e9ffb966e44c883 (diff) |
Restride vertex buffer when stride causes attributes to misalign in Vulkan. (#3679)1.1.254
* Vertex Buffer Alignment part 1
* Update CacheByRange
* Add Stride Change compute shader, fix storage buffers in helpers
* An AMD exclusive
* Reword
* Change rules - stride conversion when attrs misalign
* Fix stupid mistake
* Fix background pipeline compile
* Improve a few things.
* Fix some feedback
* Address Feedback
(the shader binary didn't change when i changed the source to use the subgroup size)
* Fix bug where rewritten buffer would be disposed instantly.
Diffstat (limited to 'Ryujinx.Graphics.Vulkan/BufferState.cs')
-rw-r--r-- | Ryujinx.Graphics.Vulkan/BufferState.cs | 34 |
1 files changed, 5 insertions, 29 deletions
diff --git a/Ryujinx.Graphics.Vulkan/BufferState.cs b/Ryujinx.Graphics.Vulkan/BufferState.cs index c91ed7a1..1790017a 100644 --- a/Ryujinx.Graphics.Vulkan/BufferState.cs +++ b/Ryujinx.Graphics.Vulkan/BufferState.cs @@ -7,28 +7,28 @@ namespace Ryujinx.Graphics.Vulkan { public static BufferState Null => new BufferState(null, 0, 0); - private readonly Auto<DisposableBuffer> _buffer; private readonly int _offset; private readonly int _size; - private readonly ulong _stride; private readonly IndexType _type; + private readonly Auto<DisposableBuffer> _buffer; + public BufferState(Auto<DisposableBuffer> buffer, int offset, int size, IndexType type) { _buffer = buffer; + _offset = offset; _size = size; - _stride = 0; _type = type; buffer?.IncrementReferenceCount(); } - public BufferState(Auto<DisposableBuffer> buffer, int offset, int size, ulong stride = 0UL) + public BufferState(Auto<DisposableBuffer> buffer, int offset, int size) { _buffer = buffer; + _offset = offset; _size = size; - _stride = stride; _type = IndexType.Uint16; buffer?.IncrementReferenceCount(); } @@ -51,30 +51,6 @@ namespace Ryujinx.Graphics.Vulkan } } - public void BindVertexBuffer(VulkanRenderer gd, CommandBufferScoped cbs, uint binding) - { - if (_buffer != null) - { - var buffer = _buffer.Get(cbs, _offset, _size).Value; - - if (gd.Capabilities.SupportsExtendedDynamicState) - { - gd.ExtendedDynamicStateApi.CmdBindVertexBuffers2( - cbs.CommandBuffer, - binding, - 1, - buffer, - (ulong)_offset, - (ulong)_size, - _stride); - } - else - { - gd.Api.CmdBindVertexBuffers(cbs.CommandBuffer, binding, 1, buffer, (ulong)_offset); - } - } - } - public void Dispose() { _buffer?.DecrementReferenceCount(); |