Fix dependent virtual buffers
This commit is contained in:
parent
5c98f51482
commit
e8882d5189
2 changed files with 5 additions and 18 deletions
|
@ -391,7 +391,7 @@ namespace Ryujinx.Graphics.Gpu.Memory
|
||||||
|
|
||||||
if (BackingState.IsDeviceLocal)
|
if (BackingState.IsDeviceLocal)
|
||||||
{
|
{
|
||||||
_preFlush ??= new BufferPreFlush(_context, _physicalMemory, this, FlushImpl);
|
_preFlush ??= new BufferPreFlush(_context, this, FlushImpl);
|
||||||
|
|
||||||
if (_preFlush.ShouldCopy)
|
if (_preFlush.ShouldCopy)
|
||||||
{
|
{
|
||||||
|
|
|
@ -38,20 +38,18 @@ namespace Ryujinx.Graphics.Gpu.Memory
|
||||||
public bool ShouldCopy { get; private set; }
|
public bool ShouldCopy { get; private set; }
|
||||||
|
|
||||||
private readonly GpuContext _context;
|
private readonly GpuContext _context;
|
||||||
private readonly PhysicalMemory _physicalMemory;
|
|
||||||
private readonly Buffer _buffer;
|
private readonly Buffer _buffer;
|
||||||
private readonly PreFlushPage[] _pages;
|
private readonly PreFlushPage[] _pages;
|
||||||
private readonly ulong _address;
|
private readonly ulong _address;
|
||||||
private readonly ulong _size;
|
private readonly ulong _size;
|
||||||
private readonly ulong _misalignment;
|
private readonly ulong _misalignment;
|
||||||
private readonly Action<ulong, ulong> _flushAction;
|
private readonly Action<BufferHandle, ulong, ulong> _flushAction;
|
||||||
|
|
||||||
private BufferHandle _flushBuffer;
|
private BufferHandle _flushBuffer;
|
||||||
|
|
||||||
public BufferPreFlush(GpuContext context, PhysicalMemory physicalMemory, Buffer parent, Action<ulong, ulong> flushAction)
|
public BufferPreFlush(GpuContext context, Buffer parent, Action<BufferHandle, ulong, ulong> flushAction)
|
||||||
{
|
{
|
||||||
_context = context;
|
_context = context;
|
||||||
_physicalMemory = physicalMemory;
|
|
||||||
_buffer = parent;
|
_buffer = parent;
|
||||||
_address = parent.Address;
|
_address = parent.Address;
|
||||||
_size = parent.Size;
|
_size = parent.Size;
|
||||||
|
@ -162,19 +160,8 @@ namespace Ryujinx.Graphics.Gpu.Memory
|
||||||
|
|
||||||
if (end >= offset)
|
if (end >= offset)
|
||||||
{
|
{
|
||||||
if (preFlush)
|
BufferHandle handle = preFlush ? _flushBuffer : _buffer.Handle;
|
||||||
{
|
_flushAction(handle, _address + (ulong)offset, (ulong)(end - offset));
|
||||||
// Flush from the host mapped buffer
|
|
||||||
using PinnedSpan<byte> data = _context.Renderer.GetBufferData(_flushBuffer, offset, end - offset);
|
|
||||||
|
|
||||||
// TODO: dependant virtual buffers thing? maybe just disable pre-flush when that is active
|
|
||||||
_physicalMemory.WriteUntracked(_address + (ulong)offset, data.Get());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Flush from the real buffer
|
|
||||||
_flushAction(_address + (ulong)offset, (ulong)(end - offset));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue