forked from eden-emu/eden
		
	Texture Cahe: Fix downscaling on SMO.
This commit is contained in:
		
							parent
							
								
									0f14c9379e
								
							
						
					
					
						commit
						b7ccc58f23
					
				
					 5 changed files with 11 additions and 0 deletions
				
			
		|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Fernando Sahmkow
						Fernando Sahmkow