Only upload GPU-modified overlaps
This commit is contained in:
		| @@ -1176,13 +1176,13 @@ ImageId TextureCache<P>::JoinImages(const ImageInfo& info, GPUVAddr gpu_addr, VA | |||||||
|     const size_t size_bytes = CalculateGuestSizeInBytes(new_info); |     const size_t size_bytes = CalculateGuestSizeInBytes(new_info); | ||||||
|     const bool broken_views = runtime.HasBrokenTextureViewFormats(); |     const bool broken_views = runtime.HasBrokenTextureViewFormats(); | ||||||
|     const bool native_bgr = runtime.HasNativeBgr(); |     const bool native_bgr = runtime.HasNativeBgr(); | ||||||
|     std::vector<ImageId> overlap_ids; |     boost::container::small_vector<ImageId, 4> overlap_ids; | ||||||
|     std::unordered_set<ImageId> overlaps_found; |     std::unordered_set<ImageId> overlaps_found; | ||||||
|     std::vector<ImageId> left_aliased_ids; |     boost::container::small_vector<ImageId, 4> left_aliased_ids; | ||||||
|     std::vector<ImageId> right_aliased_ids; |     boost::container::small_vector<ImageId, 4> right_aliased_ids; | ||||||
|     std::unordered_set<ImageId> ignore_textures; |     std::unordered_set<ImageId> ignore_textures; | ||||||
|     std::vector<ImageId> bad_overlap_ids; |     boost::container::small_vector<ImageId, 4> bad_overlap_ids; | ||||||
|     std::vector<ImageId> all_siblings; |     boost::container::small_vector<ImageId, 4> all_siblings; | ||||||
|     const bool this_is_linear = info.type == ImageType::Linear; |     const bool this_is_linear = info.type == ImageType::Linear; | ||||||
|     const auto region_check = [&](ImageId overlap_id, ImageBase& overlap) { |     const auto region_check = [&](ImageId overlap_id, ImageBase& overlap) { | ||||||
|         if (True(overlap.flags & ImageFlagBits::Remapped)) { |         if (True(overlap.flags & ImageFlagBits::Remapped)) { | ||||||
| @@ -1298,7 +1298,6 @@ ImageId TextureCache<P>::JoinImages(const ImageInfo& info, GPUVAddr gpu_addr, VA | |||||||
|         Image& overlap = slot_images[overlap_id]; |         Image& overlap = slot_images[overlap_id]; | ||||||
|         if (True(overlap.flags & ImageFlagBits::GpuModified)) { |         if (True(overlap.flags & ImageFlagBits::GpuModified)) { | ||||||
|             new_image.flags |= ImageFlagBits::GpuModified; |             new_image.flags |= ImageFlagBits::GpuModified; | ||||||
|         } |  | ||||||
|             const auto& resolution = Settings::values.resolution_info; |             const auto& resolution = Settings::values.resolution_info; | ||||||
|             const SubresourceBase base = new_image.TryFindBase(overlap.gpu_addr).value(); |             const SubresourceBase base = new_image.TryFindBase(overlap.gpu_addr).value(); | ||||||
|             const u32 up_scale = can_rescale ? resolution.up_scale : 1; |             const u32 up_scale = can_rescale ? resolution.up_scale : 1; | ||||||
| @@ -1309,6 +1308,7 @@ ImageId TextureCache<P>::JoinImages(const ImageInfo& info, GPUVAddr gpu_addr, VA | |||||||
|             } else { |             } else { | ||||||
|                 runtime.CopyImage(new_image, overlap, std::move(copies)); |                 runtime.CopyImage(new_image, overlap, std::move(copies)); | ||||||
|             } |             } | ||||||
|  |         } | ||||||
|         if (True(overlap.flags & ImageFlagBits::Tracked)) { |         if (True(overlap.flags & ImageFlagBits::Tracked)) { | ||||||
|             UntrackImage(overlap, overlap_id); |             UntrackImage(overlap, overlap_id); | ||||||
|         } |         } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Kelebek1
					Kelebek1