aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.Vulkan/BufferHolder.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Graphics.Vulkan/BufferHolder.cs')
-rw-r--r--src/Ryujinx.Graphics.Vulkan/BufferHolder.cs77
1 files changed, 34 insertions, 43 deletions
diff --git a/src/Ryujinx.Graphics.Vulkan/BufferHolder.cs b/src/Ryujinx.Graphics.Vulkan/BufferHolder.cs
index 6e10fad0..54635631 100644
--- a/src/Ryujinx.Graphics.Vulkan/BufferHolder.cs
+++ b/src/Ryujinx.Graphics.Vulkan/BufferHolder.cs
@@ -33,7 +33,7 @@ namespace Ryujinx.Graphics.Vulkan
private MemoryAllocation _allocation;
private Auto<DisposableBuffer> _buffer;
private Auto<MemoryAllocation> _allocationAuto;
- private bool _allocationImported;
+ private readonly bool _allocationImported;
private ulong _bufferHandle;
private CacheByRange<BufferHolder> _cachedConvertedBuffers;
@@ -46,7 +46,7 @@ namespace Ryujinx.Graphics.Vulkan
private bool _lastAccessIsWrite;
- private BufferAllocationType _baseType;
+ private readonly BufferAllocationType _baseType;
private BufferAllocationType _currentType;
private bool _swapQueued;
@@ -58,7 +58,7 @@ namespace Ryujinx.Graphics.Vulkan
private int _flushTemp;
private int _lastFlushWrite = -1;
- private ReaderWriterLock _flushLock;
+ private readonly ReaderWriterLock _flushLock;
private FenceHolder _flushFence;
private int _flushWaiting;
@@ -143,10 +143,7 @@ namespace Ryujinx.Graphics.Vulkan
}
else
{
- if (cbs == null)
- {
- cbs = _gd.CommandBufferPool.Rent();
- }
+ cbs ??= _gd.CommandBufferPool.Rent();
CommandBufferScoped cbsV = cbs.Value;
@@ -184,17 +181,13 @@ namespace Ryujinx.Graphics.Vulkan
return true;
}
- else
- {
- return false;
- }
- }
- else
- {
- _swapQueued = false;
- return true;
+ return false;
}
+
+ _swapQueued = false;
+
+ return true;
}
private void ConsiderBackingSwap()
@@ -251,13 +244,13 @@ namespace Ryujinx.Graphics.Vulkan
public unsafe Auto<DisposableBufferView> CreateView(VkFormat format, int offset, int size, Action invalidateView)
{
- var bufferViewCreateInfo = new BufferViewCreateInfo()
+ var bufferViewCreateInfo = new BufferViewCreateInfo
{
SType = StructureType.BufferViewCreateInfo,
Buffer = new VkBuffer(_bufferHandle),
Format = format,
Offset = (uint)offset,
- Range = (uint)size
+ Range = (uint)size,
};
_gd.Api.CreateBufferView(_device, bufferViewCreateInfo, null, out var bufferView).ThrowOnError();
@@ -288,11 +281,11 @@ namespace Ryujinx.Graphics.Vulkan
if (needsBarrier)
{
- MemoryBarrier memoryBarrier = new MemoryBarrier()
+ MemoryBarrier memoryBarrier = new()
{
SType = StructureType.MemoryBarrier,
SrcAccessMask = DefaultAccessFlags,
- DstAccessMask = DefaultAccessFlags
+ DstAccessMask = DefaultAccessFlags,
};
_gd.Api.CmdPipelineBarrier(
@@ -366,14 +359,14 @@ namespace Ryujinx.Graphics.Vulkan
return Unsafe.As<ulong, BufferHandle>(ref handle);
}
- public unsafe IntPtr Map(int offset, int mappingSize)
+ public IntPtr Map(int offset, int mappingSize)
{
return _map;
}
private void ClearFlushFence()
{
- // Asusmes _flushLock is held as writer.
+ // Assumes _flushLock is held as writer.
if (_flushFence != null)
{
@@ -421,7 +414,7 @@ namespace Ryujinx.Graphics.Vulkan
}
}
- public unsafe PinnedSpan<byte> GetData(int offset, int size)
+ public PinnedSpan<byte> GetData(int offset, int size)
{
_flushLock.AcquireReaderLock(Timeout.Infinite);
@@ -447,26 +440,24 @@ namespace Ryujinx.Graphics.Vulkan
return PinnedSpan<byte>.UnsafeFromSpan(result, _buffer.DecrementReferenceCount);
}
- else
- {
- BackgroundResource resource = _gd.BackgroundResources.Get();
- if (_gd.CommandBufferPool.OwnedByCurrentThread)
- {
- _gd.FlushAllCommands();
+ BackgroundResource resource = _gd.BackgroundResources.Get();
- result = resource.GetFlushBuffer().GetBufferData(_gd.CommandBufferPool, this, offset, size);
- }
- else
- {
- result = resource.GetFlushBuffer().GetBufferData(resource.GetPool(), this, offset, size);
- }
-
- _flushLock.ReleaseReaderLock();
+ if (_gd.CommandBufferPool.OwnedByCurrentThread)
+ {
+ _gd.FlushAllCommands();
- // Flush buffer is pinned until the next GetBufferData on the thread, which is fine for current uses.
- return PinnedSpan<byte>.UnsafeFromSpan(result);
+ result = resource.GetFlushBuffer().GetBufferData(_gd.CommandBufferPool, this, offset, size);
+ }
+ else
+ {
+ result = resource.GetFlushBuffer().GetBufferData(resource.GetPool(), this, offset, size);
}
+
+ _flushLock.ReleaseReaderLock();
+
+ // Flush buffer is pinned until the next GetBufferData on the thread, which is fine for current uses.
+ return PinnedSpan<byte>.UnsafeFromSpan(result);
}
public unsafe Span<byte> GetDataStorage(int offset, int size)
@@ -503,7 +494,7 @@ namespace Ryujinx.Graphics.Vulkan
{
WaitForFences(offset, dataSize);
- data.Slice(0, dataSize).CopyTo(new Span<byte>((void*)(_map + offset), dataSize));
+ data[..dataSize].CopyTo(new Span<byte>((void*)(_map + offset), dataSize));
SignalWrite(offset, dataSize);
@@ -542,7 +533,7 @@ namespace Ryujinx.Graphics.Vulkan
if (_map != IntPtr.Zero)
{
- data.Slice(0, dataSize).CopyTo(new Span<byte>((void*)(_map + offset), dataSize));
+ data[..dataSize].CopyTo(new Span<byte>((void*)(_map + offset), dataSize));
}
else
{
@@ -657,7 +648,7 @@ namespace Ryujinx.Graphics.Vulkan
int offset,
int size)
{
- BufferMemoryBarrier memoryBarrier = new BufferMemoryBarrier()
+ BufferMemoryBarrier memoryBarrier = new()
{
SType = StructureType.BufferMemoryBarrier,
SrcAccessMask = srcAccessMask,
@@ -666,7 +657,7 @@ namespace Ryujinx.Graphics.Vulkan
DstQueueFamilyIndex = Vk.QueueFamilyIgnored,
Buffer = buffer,
Offset = (ulong)offset,
- Size = (ulong)size
+ Size = (ulong)size,
};
gd.Api.CmdPipelineBarrier(