mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-11-04 04:34:07 +01:00 
			
		
		
		
	Texture Cahe: Fix downscaling on SMO.
This commit is contained in:
		
							parent
							
								
									0f14c9379e
								
							
						
					
					
						commit
						b7ccc58f23
					
				@ -109,10 +109,12 @@ float Volume() {
 | 
			
		||||
void UpdateRescalingInfo() {
 | 
			
		||||
    const auto setup = values.resolution_setup.GetValue();
 | 
			
		||||
    auto& info = values.resolution_info;
 | 
			
		||||
    info.downscale = false;
 | 
			
		||||
    switch (setup) {
 | 
			
		||||
    case ResolutionSetup::Res1_2X:
 | 
			
		||||
        info.up_scale = 1;
 | 
			
		||||
        info.down_shift = 1;
 | 
			
		||||
        info.downscale = true;
 | 
			
		||||
        break;
 | 
			
		||||
    case ResolutionSetup::Res1X:
 | 
			
		||||
        info.up_scale = 1;
 | 
			
		||||
 | 
			
		||||
@ -72,6 +72,7 @@ struct ResolutionScalingInfo {
 | 
			
		||||
    f32 up_factor{1.0f};
 | 
			
		||||
    f32 down_factor{1.0f};
 | 
			
		||||
    bool active{};
 | 
			
		||||
    bool downscale{};
 | 
			
		||||
 | 
			
		||||
    s32 ScaleUp(s32 value) const {
 | 
			
		||||
        if (value == 0) {
 | 
			
		||||
 | 
			
		||||
@ -102,6 +102,7 @@ ImageInfo::ImageInfo(const TICEntry& config) noexcept {
 | 
			
		||||
        layer_stride = CalculateLayerStride(*this);
 | 
			
		||||
        maybe_unaligned_layer_stride = CalculateLayerSize(*this);
 | 
			
		||||
        rescaleable &= (block.depth == 0) && resources.levels == 1;
 | 
			
		||||
        downscaleable = size.height > 512;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -135,6 +136,7 @@ ImageInfo::ImageInfo(const Tegra::Engines::Maxwell3D::Regs& regs, size_t index)
 | 
			
		||||
        size.depth = rt.depth;
 | 
			
		||||
    } else {
 | 
			
		||||
        rescaleable = block.depth == 0 && size.height > 256;
 | 
			
		||||
        downscaleable = size.height > 512;
 | 
			
		||||
        type = ImageType::e2D;
 | 
			
		||||
        resources.layers = rt.depth;
 | 
			
		||||
    }
 | 
			
		||||
@ -164,6 +166,7 @@ ImageInfo::ImageInfo(const Tegra::Engines::Maxwell3D::Regs& regs) noexcept {
 | 
			
		||||
        size.depth = regs.zeta_depth;
 | 
			
		||||
    } else {
 | 
			
		||||
        rescaleable = block.depth == 0 && size.height > 256;
 | 
			
		||||
        downscaleable = size.height > 512;
 | 
			
		||||
        type = ImageType::e2D;
 | 
			
		||||
        resources.layers = regs.zeta_depth;
 | 
			
		||||
    }
 | 
			
		||||
@ -197,6 +200,7 @@ ImageInfo::ImageInfo(const Tegra::Engines::Fermi2D::Surface& config) noexcept {
 | 
			
		||||
            .depth = 1,
 | 
			
		||||
        };
 | 
			
		||||
        rescaleable = block.depth == 0 && size.height > 256;
 | 
			
		||||
        downscaleable = size.height > 512;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -34,6 +34,7 @@ struct ImageInfo {
 | 
			
		||||
    u32 num_samples = 1;
 | 
			
		||||
    u32 tile_width_spacing = 0;
 | 
			
		||||
    bool rescaleable = false;
 | 
			
		||||
    bool downscaleable = false;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} // namespace VideoCommon
 | 
			
		||||
 | 
			
		||||
@ -798,6 +798,9 @@ bool TextureCache<P>::ImageCanRescale(ImageBase& image) {
 | 
			
		||||
    if (!image.info.rescaleable || True(image.flags & ImageFlagBits::Blacklisted)) {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
    if (Settings::values.resolution_info.downscale && !image.info.downscaleable) {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
    if (True(image.flags & (ImageFlagBits::Rescaled | ImageFlagBits::CheckingRescalable))) {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user