aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFliperworld <fliperworld@hotmail.com>2023-01-19 21:31:25 -0300
committerGitHub <noreply@github.com>2023-01-19 21:31:25 -0300
commitbb89e36fd851e78787a3c81de0c6b757f170bea6 (patch)
treea7a290d66dbbb1c8514e264baf501d2458918e41
parentde3134adbec9e35eba08dbb835c38bc305d2c150 (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.cs12
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();