diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/texture_cache/texture_cache.h | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h index a483892e4..66de41f04 100644 --- a/src/video_core/texture_cache/texture_cache.h +++ b/src/video_core/texture_cache/texture_cache.h | |||
| @@ -1758,6 +1758,7 @@ void TextureCache<P>::SynchronizeAliases(ImageId image_id) { | |||
| 1758 | boost::container::small_vector<const AliasedImage*, 1> aliased_images; | 1758 | boost::container::small_vector<const AliasedImage*, 1> aliased_images; |
| 1759 | Image& image = slot_images[image_id]; | 1759 | Image& image = slot_images[image_id]; |
| 1760 | bool any_rescaled = True(image.flags & ImageFlagBits::Rescaled); | 1760 | bool any_rescaled = True(image.flags & ImageFlagBits::Rescaled); |
| 1761 | bool any_modified = True(image.flags & ImageFlagBits::GpuModified); | ||
| 1761 | u64 most_recent_tick = image.modification_tick; | 1762 | u64 most_recent_tick = image.modification_tick; |
| 1762 | for (const AliasedImage& aliased : image.aliased_images) { | 1763 | for (const AliasedImage& aliased : image.aliased_images) { |
| 1763 | ImageBase& aliased_image = slot_images[aliased.id]; | 1764 | ImageBase& aliased_image = slot_images[aliased.id]; |
| @@ -1765,9 +1766,7 @@ void TextureCache<P>::SynchronizeAliases(ImageId image_id) { | |||
| 1765 | most_recent_tick = std::max(most_recent_tick, aliased_image.modification_tick); | 1766 | most_recent_tick = std::max(most_recent_tick, aliased_image.modification_tick); |
| 1766 | aliased_images.push_back(&aliased); | 1767 | aliased_images.push_back(&aliased); |
| 1767 | any_rescaled |= True(aliased_image.flags & ImageFlagBits::Rescaled); | 1768 | any_rescaled |= True(aliased_image.flags & ImageFlagBits::Rescaled); |
| 1768 | if (True(aliased_image.flags & ImageFlagBits::GpuModified)) { | 1769 | any_modified |= True(aliased_image.flags & ImageFlagBits::GpuModified); |
| 1769 | image.flags |= ImageFlagBits::GpuModified; | ||
| 1770 | } | ||
| 1771 | } | 1770 | } |
| 1772 | } | 1771 | } |
| 1773 | if (aliased_images.empty()) { | 1772 | if (aliased_images.empty()) { |
| @@ -1782,6 +1781,9 @@ void TextureCache<P>::SynchronizeAliases(ImageId image_id) { | |||
| 1782 | } | 1781 | } |
| 1783 | } | 1782 | } |
| 1784 | image.modification_tick = most_recent_tick; | 1783 | image.modification_tick = most_recent_tick; |
| 1784 | if (any_modified) { | ||
| 1785 | image.flags |= ImageFlagBits::GpuModified; | ||
| 1786 | } | ||
| 1785 | std::ranges::sort(aliased_images, [this](const AliasedImage* lhs, const AliasedImage* rhs) { | 1787 | std::ranges::sort(aliased_images, [this](const AliasedImage* lhs, const AliasedImage* rhs) { |
| 1786 | const ImageBase& lhs_image = slot_images[lhs->id]; | 1788 | const ImageBase& lhs_image = slot_images[lhs->id]; |
| 1787 | const ImageBase& rhs_image = slot_images[rhs->id]; | 1789 | const ImageBase& rhs_image = slot_images[rhs->id]; |