diff --git a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
index 641ac844f..1eff7e0cd 100644
--- a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
+++ b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
@@ -842,6 +842,15 @@ namespace Ryujinx.Graphics.Vulkan
             ScreenCaptured?.Invoke(this, bitmap);
         }
 
+        internal unsafe void RecreateSurface()
+        {
+            SurfaceApi.DestroySurface(_instance.Instance, _surface, null);
+
+            _surface = _getSurface(_instance.Instance, Api);
+
+            (_window as Window)?.SetSurface(_surface);
+        }
+
         public unsafe void Dispose()
         {
             if (!_initialized)
diff --git a/src/Ryujinx.Graphics.Vulkan/Window.cs b/src/Ryujinx.Graphics.Vulkan/Window.cs
index 1b4ad8adc..443990c33 100644
--- a/src/Ryujinx.Graphics.Vulkan/Window.cs
+++ b/src/Ryujinx.Graphics.Vulkan/Window.cs
@@ -14,10 +14,10 @@ namespace Ryujinx.Graphics.Vulkan
         private const int SurfaceHeight = 720;
 
         private readonly VulkanRenderer _gd;
-        private readonly SurfaceKHR _surface;
         private readonly PhysicalDevice _physicalDevice;
         private readonly Device _device;
         private SwapchainKHR _swapchain;
+        private SurfaceKHR _surface;
 
         private Image[] _swapchainImages;
         private Auto<DisposableImageView>[] _swapchainImageViews;
@@ -84,6 +84,12 @@ namespace Ryujinx.Graphics.Vulkan
             CreateSwapchain();
         }
 
+        internal void SetSurface(SurfaceKHR surface)
+        {
+            _surface = surface;
+            RecreateSwapchain();
+        }
+
         private unsafe void CreateSwapchain()
         {
             _gd.SurfaceApi.GetPhysicalDeviceSurfaceCapabilities(_physicalDevice, _surface, out var capabilities);
@@ -313,6 +319,10 @@ namespace Ryujinx.Graphics.Vulkan
                 {
                     RecreateSwapchain();
                 }
+                else if(acquireResult == Result.ErrorSurfaceLostKhr)
+                {
+                    _gd.RecreateSurface();
+                }
                 else
                 {
                     acquireResult.ThrowOnError();