diff options
Diffstat (limited to 'src/Ryujinx.Graphics.Gpu/Shader/GpuAccessorBase.cs')
-rw-r--r-- | src/Ryujinx.Graphics.Gpu/Shader/GpuAccessorBase.cs | 19 |
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; } } |