diff --git a/src/video_core/texture_cache/texture_cache.cpp b/src/video_core/texture_cache/texture_cache.cpp index fa88a671a..559634d44 100644 --- a/src/video_core/texture_cache/texture_cache.cpp +++ b/src/video_core/texture_cache/texture_cache.cpp @@ -12,6 +12,7 @@ #include "core/memory.h" #include "video_core/buffer_cache/buffer_cache.h" #include "video_core/page_manager.h" +#include "video_core/renderer_vulkan/liverpool_to_vk.h" #include "video_core/renderer_vulkan/vk_instance.h" #include "video_core/renderer_vulkan/vk_runtime.h" #include "video_core/renderer_vulkan/vk_scheduler.h" @@ -671,12 +672,16 @@ ImageView& TextureCache::FindDepthTarget(ImageId image_id, const ImageDesc& desc // If there is a stencil attachment, link depth and stencil. if (desc.info.stencil_addr != 0) { ImageId stencil_id{}; - ForEachImageInRegion(desc.info.stencil_addr, desc.info.stencil_size, - [&](ImageId image_id, Image& image) { - if (image.info.guest_address == desc.info.stencil_addr) { - stencil_id = image_id; - } - }); + ForEachImageInRegion( + desc.info.stencil_addr, desc.info.stencil_size, [&](ImageId image_id, Image& image) { + if (image.info.guest_address != desc.info.stencil_addr) { + return; + } + if (image.info.pixel_format == vk::Format::eUndefined || + Vulkan::LiverpoolToVK::IsFormatStencilCompatible(image.info.pixel_format)) { + stencil_id = image_id; + } + }); if (!stencil_id) { ImageInfo info{}; info.guest_address = desc.info.stencil_addr;