aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorriperiperi <rhy3756547@hotmail.com>2024-01-16 12:22:20 +0000
committerGitHub <noreply@github.com>2024-01-16 13:22:20 +0100
commitbebd8eb8223ba888b272e42967dc408102e99de1 (patch)
tree631b0508fdb3e3d913007ec9dbd2280b758907f3
parentf4b74e9ce18b16f48f4e006d98675798874c3b54 (diff)
Vulkan: Cache delegate for EndRenderPass (#6132)1.1.1111
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.
-rw-r--r--src/Ryujinx.Graphics.Vulkan/BufferHolder.cs2
-rw-r--r--src/Ryujinx.Graphics.Vulkan/PipelineBase.cs2
-rw-r--r--src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs2
3 files changed, 4 insertions, 2 deletions
diff --git a/src/Ryujinx.Graphics.Vulkan/BufferHolder.cs b/src/Ryujinx.Graphics.Vulkan/BufferHolder.cs
index b54ff3ab..bdd5d385 100644
--- a/src/Ryujinx.Graphics.Vulkan/BufferHolder.cs
+++ b/src/Ryujinx.Graphics.Vulkan/BufferHolder.cs
@@ -520,7 +520,7 @@ namespace Ryujinx.Graphics.Vulkan
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
{
diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs b/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs
index 28d05a52..b05dd1a6 100644
--- a/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs
+++ b/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs
@@ -30,6 +30,7 @@ namespace Ryujinx.Graphics.Vulkan
public readonly PipelineCache PipelineCache;
public readonly AutoFlushCounter AutoFlush;
+ public readonly Action EndRenderPassDelegate;
protected PipelineDynamicState DynamicState;
private PipelineState _newState;
@@ -92,6 +93,7 @@ namespace Ryujinx.Graphics.Vulkan
Device = device;
AutoFlush = new AutoFlushCounter(gd);
+ EndRenderPassDelegate = EndRenderPass;
var pipelineCacheCreateInfo = new PipelineCacheCreateInfo
{
diff --git a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
index 893ecf1a..641ac844 100644
--- a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
+++ b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
@@ -784,7 +784,7 @@ namespace Ryujinx.Graphics.Vulkan
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()