aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs
diff options
context:
space:
mode:
authorriperiperi <rhy3756547@hotmail.com>2024-01-20 14:07:33 +0000
committerGitHub <noreply@github.com>2024-01-20 11:07:33 -0300
commit331c07807fd0db5d4452d6ef02962a6d19a56d7f (patch)
treea306b0b43f50c58abb649e45057008f60b5da656 /src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs
parenta772b073ecb5c753acbddbf5861051d878f5153b (diff)
Vulkan: Use templates for descriptor updates (#6014)1.1.1116
* WIP: Descriptor template update * Make configurable * Wording * Simplify template creation * Whitespace * UTF-8 whatever * Leave only templated path, better template updater
Diffstat (limited to 'src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs')
-rw-r--r--src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs b/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs
index d01eebf3..0d6da039 100644
--- a/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs
+++ b/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs
@@ -26,6 +26,7 @@ namespace Ryujinx.Graphics.Vulkan
public ResourceBindingSegment[][] ClearSegments { get; }
public ResourceBindingSegment[][] BindingSegments { get; }
+ public DescriptorSetTemplate[] Templates { get; }
public ProgramLinkStatus LinkStatus { get; private set; }
@@ -118,6 +119,7 @@ namespace Ryujinx.Graphics.Vulkan
ClearSegments = BuildClearSegments(resourceLayout.Sets);
BindingSegments = BuildBindingSegments(resourceLayout.SetUsages);
+ Templates = BuildTemplates();
_compileTask = Task.CompletedTask;
_firstBackgroundUse = false;
@@ -241,6 +243,23 @@ namespace Ryujinx.Graphics.Vulkan
return segments;
}
+ private DescriptorSetTemplate[] BuildTemplates()
+ {
+ var templates = new DescriptorSetTemplate[BindingSegments.Length];
+
+ for (int setIndex = 0; setIndex < BindingSegments.Length; setIndex++)
+ {
+ ResourceBindingSegment[] segments = BindingSegments[setIndex];
+
+ if (segments != null && segments.Length > 0)
+ {
+ templates[setIndex] = new DescriptorSetTemplate(_gd, _device, segments, _plce, IsCompute ? PipelineBindPoint.Compute : PipelineBindPoint.Graphics, setIndex);
+ }
+ }
+
+ return templates;
+ }
+
private async Task BackgroundCompilation()
{
await Task.WhenAll(_shaders.Select(shader => shader.CompileTask));
@@ -504,6 +523,11 @@ namespace Ryujinx.Graphics.Vulkan
}
}
+ for (int i = 0; i < Templates.Length; i++)
+ {
+ Templates[i]?.Dispose();
+ }
+
if (_dummyRenderPass.Value.Handle != 0)
{
_dummyRenderPass.Dispose();