From e8274d5a596c8fdbb3117ac4325ffecccd892d54 Mon Sep 17 00:00:00 2001 From: kd-11 Date: Fri, 28 Aug 2020 21:23:08 +0300 Subject: [PATCH] vk: Fix depth format mismatch detection in copy_image --- rpcs3/Emu/RSX/VK/VKTexture.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/rpcs3/Emu/RSX/VK/VKTexture.cpp b/rpcs3/Emu/RSX/VK/VKTexture.cpp index ceadc123ee..5a479cefca 100644 --- a/rpcs3/Emu/RSX/VK/VKTexture.cpp +++ b/rpcs3/Emu/RSX/VK/VKTexture.cpp @@ -244,7 +244,7 @@ namespace vk { if (src->format_class() == dst->format_class()) { - rsx_log.warning("[Performance warning] Image copy requested incorrectly for matching formats."); + rsx_log.error("[Performance warning] Image copy requested incorrectly for matching formats."); copy_image(cmd, src, dst, src_rect, dst_rect, mipmaps, src_transfer_mask, dst_transfer_mask); return; } @@ -360,12 +360,12 @@ namespace vk const areai& src_rect, const areai& dst_rect, u32 mipmaps, VkImageAspectFlags src_transfer_mask, VkImageAspectFlags dst_transfer_mask) { - // NOTE: src_aspect should match dst_aspect according to spec but drivers seem to work just fine with the mismatch - // TODO: Implement separate pixel transfer for drivers that refuse this workaround - if ((src->aspect() & VK_IMAGE_ASPECT_DEPTH_BIT) != 0 && + // NOTE: src_aspect should match dst_aspect according to spec but some drivers seem to work just fine with the mismatch + if (const u32 aspect_bridge = (src->aspect() | dst->aspect()); + (aspect_bridge & VK_IMAGE_ASPECT_COLOR_BIT) == 0 && src->format() != dst->format()) { - // Copying between depth formats must match + // Copying between two depth formats must match exactly or crashes will happen rsx_log.error("[Performance warning] Image copy was requested incorrectly for mismatched depth formats"); copy_image_typeless(cmd, src, dst, src_rect, dst_rect, mipmaps); return;