From 4de584005fe8ae00608f8c3267a78e7cf0eb52aa Mon Sep 17 00:00:00 2001 From: ameerj <52414509+ameerj@users.noreply.github.com> Date: Tue, 12 Oct 2021 01:45:54 -0400 Subject: texture_cache: Fix infinitely recursive ImageCanRescale check --- src/video_core/texture_cache/texture_cache.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'src/video_core/texture_cache/texture_cache.h') diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h index c77332b46..c1fb12679 100644 --- a/src/video_core/texture_cache/texture_cache.h +++ b/src/video_core/texture_cache/texture_cache.h @@ -795,25 +795,25 @@ bool TextureCache
::BlackListImage(ImageId image_id) {
template ::ImageCanRescale(ImageBase& image) {
- if (True(image.flags & ImageFlagBits::Blacklisted)) {
+ if (!image.info.rescaleable || True(image.flags & ImageFlagBits::Blacklisted)) {
return false;
}
- if (True(image.flags & (ImageFlagBits::Rescaled | ImageFlagBits::RescaleChecked))) {
+ if (True(image.flags & (ImageFlagBits::Rescaled | ImageFlagBits::CheckingRescalable))) {
return true;
}
- if (!image.info.rescaleable) {
- image.flags &= ~ImageFlagBits::RescaleChecked;
- return false;
+ if (True(image.flags & ImageFlagBits::IsRescalable)) {
+ return true;
}
- image.flags |= ImageFlagBits::RescaleChecked;
+ image.flags |= ImageFlagBits::CheckingRescalable;
for (const auto& alias : image.aliased_images) {
Image& other_image = slot_images[alias.id];
if (!ImageCanRescale(other_image)) {
- image.flags &= ~ImageFlagBits::RescaleChecked;
+ image.flags &= ~ImageFlagBits::CheckingRescalable;
return false;
}
}
- image.flags &= ~ImageFlagBits::RescaleChecked;
+ image.flags &= ~ImageFlagBits::CheckingRescalable;
+ image.flags |= ImageFlagBits::IsRescalable;
return true;
}
--
cgit v1.2.3