|
|
@ -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; |
|
|
|
|
|
std::vector<ImageId> right_aliased_ids; |
|
|
|
|
|
|
|
|
boost::container::small_vector<ImageId, 4> left_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; |
|
|
|
|
|
std::vector<ImageId> all_siblings; |
|
|
|
|
|
|
|
|
boost::container::small_vector<ImageId, 4> bad_overlap_ids; |
|
|
|
|
|
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); |
|
|
} |
|
|
} |
|
|
|