Workaround for wrong last attribute on AMD (affects FFVII, STRIKERS1945, probably more)

This commit is contained in:
gdk 2022-01-29 03:33:24 -03:00 committed by riperiperi
parent 36b3ab0741
commit 522e7933e8
2 changed files with 21 additions and 2 deletions

View file

@ -125,6 +125,18 @@ namespace Ryujinx.Graphics.Vulkan
return null;
}
public Auto<DisposableBuffer> GetBufferWithSize(CommandBuffer commandBuffer, BufferHandle handle, bool isWrite, out int size)
{
if (TryGetBuffer(handle, out var holder))
{
size = holder.Size;
return holder.GetBuffer(commandBuffer, isWrite);
}
size = 0;
return null;
}
public Auto<DisposableBuffer> GetBufferI8ToI16(CommandBufferScoped cbs, BufferHandle handle, int offset, int size)
{
if (TryGetBuffer(handle, out var holder))

View file

@ -759,7 +759,7 @@ namespace Ryujinx.Graphics.Vulkan
if (vertexBuffer.Buffer.Handle != BufferHandle.Null)
{
var vb = Gd.BufferManager.GetBuffer(CommandBuffer, vertexBuffer.Buffer.Handle, false);
var vb = Gd.BufferManager.GetBuffer(CommandBuffer, vertexBuffer.Buffer.Handle, false, out int totalBufferSize);
if (vb != null)
{
int binding = i + 1;
@ -770,11 +770,18 @@ namespace Ryujinx.Graphics.Vulkan
(uint)vertexBuffer.Stride,
inputRate);
int vbSize = vertexBuffer.Buffer.Size;
if (Gd.Vendor == Vendor.Amd)
{
vbSize = totalBufferSize;
}
_vertexBuffers[binding].Dispose();
_vertexBuffers[binding] = new BufferState(
vb,
vertexBuffer.Buffer.Offset,
vertexBuffer.Buffer.Size,
vbSize,
(ulong)vertexBuffer.Stride);
_vertexBuffers[binding].BindVertexBuffer(Gd, Cbs, (uint)binding);