diff options
author | riperiperi <rhy3756547@hotmail.com> | 2024-01-20 14:07:33 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-20 11:07:33 -0300 |
commit | 331c07807fd0db5d4452d6ef02962a6d19a56d7f (patch) | |
tree | a306b0b43f50c58abb649e45057008f60b5da656 /src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs | |
parent | a772b073ecb5c753acbddbf5861051d878f5153b (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.cs | 24 |
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(); |