diff --git a/src/core/gpu_hw_vulkan.cpp b/src/core/gpu_hw_vulkan.cpp
index f70c786c1..7896a5cce 100644
--- a/src/core/gpu_hw_vulkan.cpp
+++ b/src/core/gpu_hw_vulkan.cpp
@@ -557,14 +557,17 @@ bool GPU_HW_Vulkan::CreateFramebuffer()
     g_vulkan_context->GetRenderPass(texture_format, depth_format, samples, VK_ATTACHMENT_LOAD_OP_LOAD);
   m_vram_update_depth_render_pass =
     g_vulkan_context->GetRenderPass(VK_FORMAT_UNDEFINED, depth_format, samples, VK_ATTACHMENT_LOAD_OP_DONT_CARE);
-  m_display_render_pass = g_vulkan_context->GetRenderPass(m_display_texture.GetFormat(), VK_FORMAT_UNDEFINED,
-                                                          m_display_texture.GetSamples(), VK_ATTACHMENT_LOAD_OP_LOAD);
+  m_display_load_render_pass = g_vulkan_context->GetRenderPass(
+    m_display_texture.GetFormat(), VK_FORMAT_UNDEFINED, m_display_texture.GetSamples(), VK_ATTACHMENT_LOAD_OP_LOAD);
+  m_display_discard_render_pass =
+    g_vulkan_context->GetRenderPass(m_display_texture.GetFormat(), VK_FORMAT_UNDEFINED, m_display_texture.GetSamples(),
+                                    VK_ATTACHMENT_LOAD_OP_DONT_CARE);
   m_vram_readback_render_pass =
     g_vulkan_context->GetRenderPass(m_vram_readback_texture.GetFormat(), VK_FORMAT_UNDEFINED,
                                     m_vram_readback_texture.GetSamples(), VK_ATTACHMENT_LOAD_OP_DONT_CARE);
 
   if (m_vram_render_pass == VK_NULL_HANDLE || m_vram_update_depth_render_pass == VK_NULL_HANDLE ||
-      m_display_render_pass == VK_NULL_HANDLE || m_vram_readback_render_pass == VK_NULL_HANDLE)
+      m_display_load_render_pass == VK_NULL_HANDLE || m_vram_readback_render_pass == VK_NULL_HANDLE)
   {
     return false;
   }
@@ -581,7 +584,7 @@ bool GPU_HW_Vulkan::CreateFramebuffer()
 
   m_vram_update_depth_framebuffer = m_vram_depth_texture.CreateFramebuffer(m_vram_update_depth_render_pass);
   m_vram_readback_framebuffer = m_vram_readback_texture.CreateFramebuffer(m_vram_readback_render_pass);
-  m_display_framebuffer = m_display_texture.CreateFramebuffer(m_display_render_pass);
+  m_display_framebuffer = m_display_texture.CreateFramebuffer(m_display_load_render_pass);
   if (m_vram_update_depth_framebuffer == VK_NULL_HANDLE || m_vram_readback_framebuffer == VK_NULL_HANDLE ||
       m_display_framebuffer == VK_NULL_HANDLE)
   {
@@ -1144,7 +1147,7 @@ bool GPU_HW_Vulkan::CompilePipelines()
 
   // Display
   {
-    gpbuilder.SetRenderPass(m_display_render_pass, 0);
+    gpbuilder.SetRenderPass(m_display_load_render_pass, 0);
     gpbuilder.SetPipelineLayout(m_single_sampler_pipeline_layout);
     gpbuilder.SetVertexShader(fullscreen_quad_vertex_shader);
     gpbuilder.SetNoCullRasterizationState();
@@ -1224,7 +1227,7 @@ bool GPU_HW_Vulkan::CompilePipelines()
 
     gpbuilder.SetFragmentShader(fs);
     gpbuilder.SetPipelineLayout(m_downsample_composite_pipeline_layout);
-    gpbuilder.SetRenderPass(m_display_render_pass, 0);
+    gpbuilder.SetRenderPass(m_display_load_render_pass, 0);
     m_downsample_composite_pass_pipeline = gpbuilder.Create(device, pipeline_cache, false);
     vkDestroyShaderModule(g_vulkan_context->GetDevice(), fs, nullptr);
     if (m_downsample_composite_pass_pipeline == VK_NULL_HANDLE)
@@ -1399,7 +1402,9 @@ void GPU_HW_Vulkan::UpdateDisplay()
       Assert(scaled_display_width <= m_display_texture.GetWidth() &&
              scaled_display_height <= m_display_texture.GetHeight());
 
-      BeginRenderPass(m_display_render_pass, m_display_framebuffer, 0, 0, scaled_display_width, scaled_display_height);
+      BeginRenderPass((interlaced != InterlacedRenderMode::None) ? m_display_load_render_pass :
+                                                                   m_display_discard_render_pass,
+                      m_display_framebuffer, 0, 0, scaled_display_width, scaled_display_height);
 
       vkCmdBindPipeline(
         cmdbuf, VK_PIPELINE_BIND_POINT_GRAPHICS,
@@ -1915,7 +1920,7 @@ void GPU_HW_Vulkan::DownsampleFramebufferAdaptive(Vulkan::Texture& source, u32 l
   {
     m_display_texture.TransitionToLayout(cmdbuf, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
 
-    BeginRenderPass(m_display_render_pass, m_display_framebuffer, left, top, width, height);
+    BeginRenderPass(m_display_load_render_pass, m_display_framebuffer, left, top, width, height);
     Vulkan::Util::SetViewportAndScissor(cmdbuf, left, top, width, height);
     vkCmdBindPipeline(cmdbuf, VK_PIPELINE_BIND_POINT_GRAPHICS, m_downsample_composite_pass_pipeline);
     vkCmdBindDescriptorSets(cmdbuf, VK_PIPELINE_BIND_POINT_GRAPHICS, m_downsample_composite_pipeline_layout, 0, 1,
diff --git a/src/core/gpu_hw_vulkan.h b/src/core/gpu_hw_vulkan.h
index cb0fe82d9..f48b9b102 100644
--- a/src/core/gpu_hw_vulkan.h
+++ b/src/core/gpu_hw_vulkan.h
@@ -83,7 +83,8 @@ private:
 
   VkRenderPass m_vram_render_pass = VK_NULL_HANDLE;
   VkRenderPass m_vram_update_depth_render_pass = VK_NULL_HANDLE;
-  VkRenderPass m_display_render_pass = VK_NULL_HANDLE;
+  VkRenderPass m_display_load_render_pass = VK_NULL_HANDLE;
+  VkRenderPass m_display_discard_render_pass = VK_NULL_HANDLE;
   VkRenderPass m_vram_readback_render_pass = VK_NULL_HANDLE;
 
   VkDescriptorSetLayout m_batch_descriptor_set_layout = VK_NULL_HANDLE;