diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h index 74b9c831d4..e1e8a731dd 100644 --- a/src/video_core/texture_cache/texture_cache.h +++ b/src/video_core/texture_cache/texture_cache.h @@ -1709,7 +1709,27 @@ ImageId TextureCache
::JoinImages(const ImageInfo& info, GPUVAddr gpu_addr, DA
for (const ImageId overlap_id : join_ignore_textures) {
Image& overlap = slot_images[overlap_id];
if (True(overlap.flags & ImageFlagBits::GpuModified)) {
- UNIMPLEMENTED();
+ if (new_image.TryFindBase(overlap.gpu_addr) &&
+ (!can_rescale || ImageCanRescale(overlap))) {
+ if (can_rescale) {
+ ScaleUp(overlap);
+ } else {
+ ScaleDown(overlap);
+ }
+ join_copies_to_do.emplace_back(JoinCopy{false, overlap_id});
+ continue;
+ }
+ LOG_WARNING(HW_GPU,
+ "Dropping GPU modified overlap with no copy path: "
+ "overlap{{gpu_addr=0x{:x} format={} size={}x{}x{} levels={} layers={}}} "
+ "new{{gpu_addr=0x{:x} format={} size={}x{}x{} levels={} layers={}}}",
+ overlap.gpu_addr, static_cast