diff --git a/src/video_core/buffer_cache/buffer_cache.cpp b/src/video_core/buffer_cache/buffer_cache.cpp index e0caa5d82..ceedc1746 100644 --- a/src/video_core/buffer_cache/buffer_cache.cpp +++ b/src/video_core/buffer_cache/buffer_cache.cpp @@ -541,10 +541,12 @@ void BufferCache::SynchronizeBuffer(Buffer& buffer, VAddr device_addr, u32 size, } bool BufferCache::SynchronizeBufferFromImage(Buffer& buffer, VAddr device_addr, u32 size) { - constexpr FindFlags flags = FindFlags::NoCreate | FindFlags::FullOverlap | FindFlags::RelaxDim; + constexpr FindFlags flags = FindFlags::NoCreate | FindFlags::RelaxSize | + FindFlags::RelaxFmt | FindFlags::RelaxDim; ImageInfo info{}; info.guest_address = device_addr; info.guest_size_bytes = size; + info.type = vk::ImageType::e2D; const ImageId image_id = texture_cache.FindImage(info, flags); if (!image_id) { return false; diff --git a/src/video_core/texture_cache/texture_cache.cpp b/src/video_core/texture_cache/texture_cache.cpp index 4e1ca5cc7..f4aefa7eb 100644 --- a/src/video_core/texture_cache/texture_cache.cpp +++ b/src/video_core/texture_cache/texture_cache.cpp @@ -43,7 +43,7 @@ void TextureCache::InvalidateMemory(VAddr address, size_t size) { ForEachImageInRegion(address, size, [&](ImageId image_id, Image& image) { const size_t image_dist = image.cpu_addr > address ? image.cpu_addr - address : address - image.cpu_addr; - if (image_dist < MaxInvalidateDist && image.info.size.width != 1) { + if (image_dist < MaxInvalidateDist && image.info.size.width > 16) { // Ensure image is reuploaded when accessed again. image.flags |= ImageFlagBits::CpuModified; } @@ -146,10 +146,6 @@ ImageId TextureCache::ResolveOverlap(const ImageInfo& image_info, ImageId cache_ FreeImage(cache_image_id); } - - if (tex_cache_image.info.IsSliceOf(image_info)) { - UNREACHABLE(); - } } return merged_image_id; diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h index 8a5e22c41..8224de0cf 100644 --- a/src/video_core/texture_cache/texture_cache.h +++ b/src/video_core/texture_cache/texture_cache.h @@ -69,7 +69,7 @@ public: /// Updates image contents if it was modified by CPU. void UpdateImage(ImageId image_id, Vulkan::Scheduler* custom_scheduler = nullptr) { Image& image = slot_images[image_id]; - TrackImage(image, image_id); + TrackImage(image_id); RefreshImage(image, custom_scheduler); }