aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.Gpu/Shader/GpuAccessorBase.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Graphics.Gpu/Shader/GpuAccessorBase.cs')
-rw-r--r--src/Ryujinx.Graphics.Gpu/Shader/GpuAccessorBase.cs19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/Ryujinx.Graphics.Gpu/Shader/GpuAccessorBase.cs b/src/Ryujinx.Graphics.Gpu/Shader/GpuAccessorBase.cs
index d35b8d92..7db627ba 100644
--- a/src/Ryujinx.Graphics.Gpu/Shader/GpuAccessorBase.cs
+++ b/src/Ryujinx.Graphics.Gpu/Shader/GpuAccessorBase.cs
@@ -4,6 +4,7 @@ using Ryujinx.Graphics.Gpu.Engine.Threed;
using Ryujinx.Graphics.Gpu.Image;
using Ryujinx.Graphics.Shader;
using Ryujinx.Graphics.Shader.Translation;
+using System;
namespace Ryujinx.Graphics.Gpu.Shader
{
@@ -16,6 +17,8 @@ namespace Ryujinx.Graphics.Gpu.Shader
private readonly ResourceCounts _resourceCounts;
private readonly int _stageIndex;
+ private readonly int[] _constantBufferBindings;
+
/// <summary>
/// Creates a new GPU accessor.
/// </summary>
@@ -25,6 +28,12 @@ namespace Ryujinx.Graphics.Gpu.Shader
_context = context;
_resourceCounts = resourceCounts;
_stageIndex = stageIndex;
+
+ if (context.Capabilities.Api != TargetApi.Vulkan)
+ {
+ _constantBufferBindings = new int[Constants.TotalGpUniformBuffers];
+ _constantBufferBindings.AsSpan().Fill(-1);
+ }
}
public int QueryBindingConstantBuffer(int index)
@@ -36,7 +45,15 @@ namespace Ryujinx.Graphics.Gpu.Shader
}
else
{
- return _resourceCounts.UniformBuffersCount++;
+ int binding = _constantBufferBindings[index];
+
+ if (binding < 0)
+ {
+ binding = _resourceCounts.UniformBuffersCount++;
+ _constantBufferBindings[index] = binding;
+ }
+
+ return binding;
}
}