Vulkan: Cache delegate for EndRenderPass (#6132)

This prevents a small allocation each time this method is called. This is a top 3 SOH allocation during gameplay in most games, and eliminating it is pretty free.
This commit is contained in:
riperiperi 2024-01-16 12:22:20 +00:00 committed by GitHub
parent f4b74e9ce1
commit bebd8eb822
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 4 additions and 2 deletions

View File

@ -520,7 +520,7 @@ namespace Ryujinx.Graphics.Vulkan
if (_gd.PipelineInternal.CurrentCommandBuffer.CommandBuffer.Handle == cbs.CommandBuffer.Handle) if (_gd.PipelineInternal.CurrentCommandBuffer.CommandBuffer.Handle == cbs.CommandBuffer.Handle)
{ {
SetData(rangeOffset, _pendingData.AsSpan(rangeOffset, rangeSize), cbs, _gd.PipelineInternal.EndRenderPass, false); SetData(rangeOffset, _pendingData.AsSpan(rangeOffset, rangeSize), cbs, _gd.PipelineInternal.EndRenderPassDelegate, false);
} }
else else
{ {

View File

@ -30,6 +30,7 @@ namespace Ryujinx.Graphics.Vulkan
public readonly PipelineCache PipelineCache; public readonly PipelineCache PipelineCache;
public readonly AutoFlushCounter AutoFlush; public readonly AutoFlushCounter AutoFlush;
public readonly Action EndRenderPassDelegate;
protected PipelineDynamicState DynamicState; protected PipelineDynamicState DynamicState;
private PipelineState _newState; private PipelineState _newState;
@ -92,6 +93,7 @@ namespace Ryujinx.Graphics.Vulkan
Device = device; Device = device;
AutoFlush = new AutoFlushCounter(gd); AutoFlush = new AutoFlushCounter(gd);
EndRenderPassDelegate = EndRenderPass;
var pipelineCacheCreateInfo = new PipelineCacheCreateInfo var pipelineCacheCreateInfo = new PipelineCacheCreateInfo
{ {

View File

@ -784,7 +784,7 @@ namespace Ryujinx.Graphics.Vulkan
public void SetBufferData(BufferHandle buffer, int offset, ReadOnlySpan<byte> data) public void SetBufferData(BufferHandle buffer, int offset, ReadOnlySpan<byte> data)
{ {
BufferManager.SetData(buffer, offset, data, _pipeline.CurrentCommandBuffer, _pipeline.EndRenderPass); BufferManager.SetData(buffer, offset, data, _pipeline.CurrentCommandBuffer, _pipeline.EndRenderPassDelegate);
} }
public void UpdateCounters() public void UpdateCounters()