From 5f180e0b3039f80f118b4e9709c210dfce19413f Mon Sep 17 00:00:00 2001 From: kd-11 Date: Thu, 15 Jun 2017 00:48:27 +0300 Subject: [PATCH] vk: Prefer optimal formats when clearing buffers --- rpcs3/Emu/RSX/VK/VKHelpers.cpp | 2 ++ rpcs3/Emu/RSX/VK/VKRenderTargets.h | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/RSX/VK/VKHelpers.cpp b/rpcs3/Emu/RSX/VK/VKHelpers.cpp index 800dedb0e7..9db1e7a5a0 100644 --- a/rpcs3/Emu/RSX/VK/VKHelpers.cpp +++ b/rpcs3/Emu/RSX/VK/VKHelpers.cpp @@ -257,6 +257,8 @@ namespace vk void change_image_layout(VkCommandBuffer cmd, vk::image *image, VkImageLayout new_layout, VkImageSubresourceRange range) { + if (image->current_layout == new_layout) return; + change_image_layout(cmd, image->value, image->current_layout, new_layout, range); image->current_layout = new_layout; } diff --git a/rpcs3/Emu/RSX/VK/VKRenderTargets.h b/rpcs3/Emu/RSX/VK/VKRenderTargets.h index 900d881853..3961ded043 100644 --- a/rpcs3/Emu/RSX/VK/VKRenderTargets.h +++ b/rpcs3/Emu/RSX/VK/VKRenderTargets.h @@ -147,14 +147,14 @@ namespace rsx { VkImageLayout old_layout = ds->current_layout; VkImageSubresourceRange range = vk::get_image_subresource_range(0, 0, 1, 1, ds->attachment_aspect_flag); - change_image_layout(*pcmd, ds, VK_IMAGE_LAYOUT_GENERAL, range); + change_image_layout(*pcmd, ds, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, range); //Clear the surface before drawing on it VkClearDepthStencilValue clear_depth = {}; clear_depth.depth = 1.f; clear_depth.stencil = 255; - vkCmdClearDepthStencilImage(*pcmd, ds->value, VK_IMAGE_LAYOUT_GENERAL, &clear_depth, 1, &range); + vkCmdClearDepthStencilImage(*pcmd, ds->value, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &clear_depth, 1, &range); change_image_layout(*pcmd, ds, old_layout, range); }