From 4744bde0e59578baeb5f94126087953f6d8ddba0 Mon Sep 17 00:00:00 2001 From: gdkchan Date: Mon, 25 Sep 2023 21:00:02 -0300 Subject: Reduce the amount of descriptor pool allocations on Vulkan (#5673) * Reduce the amount of descriptor pool allocations on Vulkan * Formatting * Slice can be simplified * Make GetDescriptorPoolSizes static * Adjust CanFit calculation so that TryAllocateDescriptorSets never fails * Remove unused field --- src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs') diff --git a/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs b/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs index 14e4c02f..a9a92df1 100644 --- a/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs +++ b/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs @@ -59,6 +59,8 @@ namespace Ryujinx.Graphics.Vulkan private BitMapStruct> _uniformMirrored; private BitMapStruct> _storageMirrored; + private bool _updateDescriptorCacheCbIndex; + [Flags] private enum DirtyFlags { @@ -218,6 +220,7 @@ namespace Ryujinx.Graphics.Vulkan public void SetProgram(ShaderCollection program) { _program = program; + _updateDescriptorCacheCbIndex = true; _dirty = DirtyFlags.All; } @@ -490,7 +493,13 @@ namespace Ryujinx.Graphics.Vulkan var dummyBuffer = _dummyBuffer?.GetBuffer(); - var dsc = program.GetNewDescriptorSetCollection(_gd, cbs.CommandBufferIndex, setIndex, out var isNew).Get(cbs); + if (_updateDescriptorCacheCbIndex) + { + _updateDescriptorCacheCbIndex = false; + program.UpdateDescriptorCacheCommandBufferIndex(cbs.CommandBufferIndex); + } + + var dsc = program.GetNewDescriptorSetCollection(setIndex, out var isNew).Get(cbs); if (!program.HasMinimalLayout) { @@ -697,6 +706,7 @@ namespace Ryujinx.Graphics.Vulkan public void SignalCommandBufferChange() { + _updateDescriptorCacheCbIndex = true; _dirty = DirtyFlags.All; _uniformSet.Clear(); -- cgit v1.2.3