diff options
author | Fliperworld <fliperworld@hotmail.com> | 2023-01-19 21:31:25 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-19 21:31:25 -0300 |
commit | bb89e36fd851e78787a3c81de0c6b757f170bea6 (patch) | |
tree | a7a290d66dbbb1c8514e264baf501d2458918e41 | |
parent | de3134adbec9e35eba08dbb835c38bc305d2c150 (diff) |
Vulkan: Destroy old swapchain on swapchain recreation (#3889)1.1.575
* Destroy old swapchain on swapchain recreation
* vkDeviceWaitIdle before DestroySwapchain
* Update Ryujinx.Graphics.Vulkan/Window.cs
Co-authored-by: gdkchan <gab.dark.100@gmail.com>
* Avoid unsafe code on RecreateSwapchain()
* Destroying old Swapchain on a queue.
* Cleanup and fix on destroying old Swapchain.
* Update Ryujinx.Graphics.Vulkan/Window.cs
Co-authored-by: gdkchan <gab.dark.100@gmail.com>
* Update Ryujinx.Graphics.Vulkan/Window.cs
Co-authored-by: gdkchan <gab.dark.100@gmail.com>
* Update Ryujinx.Graphics.Vulkan/Window.cs
Co-authored-by: gdkchan <gab.dark.100@gmail.com>
* Update Window.cs
Done.
Co-authored-by: gdkchan <gab.dark.100@gmail.com>
-rw-r--r-- | Ryujinx.Graphics.Vulkan/Window.cs | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/Ryujinx.Graphics.Vulkan/Window.cs b/Ryujinx.Graphics.Vulkan/Window.cs index d37dd7e9..edc7d716 100644 --- a/Ryujinx.Graphics.Vulkan/Window.cs +++ b/Ryujinx.Graphics.Vulkan/Window.cs @@ -1,5 +1,6 @@ using Ryujinx.Graphics.GAL; using Silk.NET.Vulkan; +using Silk.NET.Vulkan.Extensions.KHR; using System; using System.Linq; using VkFormat = Silk.NET.Vulkan.Format; @@ -49,13 +50,19 @@ namespace Ryujinx.Graphics.Vulkan private void RecreateSwapchain() { + var oldSwapchain = _swapchain; + int imageCount = _swapchainImageViews.Length; _vsyncModeChanged = false; - for (int i = 0; i < _swapchainImageViews.Length; i++) + for (int i = 0; i < imageCount; i++) { _swapchainImageViews[i].Dispose(); } + // Destroy old Swapchain. + _gd.Api.DeviceWaitIdle(_device); + _gd.SwapchainApi.DestroySwapchain(_device, oldSwapchain, Span<AllocationCallbacks>.Empty); + CreateSwapchain(); } @@ -115,8 +122,7 @@ namespace Ryujinx.Graphics.Vulkan PreTransform = capabilities.CurrentTransform, CompositeAlpha = CompositeAlphaFlagsKHR.OpaqueBitKhr, PresentMode = ChooseSwapPresentMode(presentModes, _vsyncEnabled), - Clipped = true, - OldSwapchain = oldSwapchain + Clipped = true }; _gd.SwapchainApi.CreateSwapchain(_device, swapchainCreateInfo, null, out _swapchain).ThrowOnError(); |