mirror of
				https://github.com/yuzu-emu/yuzu.git
				synced 2025-11-04 02:03:43 +00:00 
			
		
		
		
	GLCache: Implemented GetTextureSurface.
This commit is contained in:
		
							parent
							
								
									65ea52394b
								
							
						
					
					
						commit
						b258403f0d
					
				@ -1018,9 +1018,34 @@ SurfaceRect_Tuple RasterizerCacheOpenGL::GetSurfaceSubRect(const SurfaceParams&
 | 
			
		||||
    return std::make_tuple(surface, surface->GetScaledSubRect(params));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Surface RasterizerCacheOpenGL::GetTextureSurface(const void* config) {
 | 
			
		||||
    UNREACHABLE();
 | 
			
		||||
    return {};
 | 
			
		||||
Surface RasterizerCacheOpenGL::GetTextureSurface(const Tegra::Texture::FullTextureInfo& config) {
 | 
			
		||||
    auto& gpu = Core::System::GetInstance().GPU();
 | 
			
		||||
 | 
			
		||||
    SurfaceParams params;
 | 
			
		||||
    params.addr = gpu.memory_manager->PhysicalToVirtualAddress(config.tic.Address());
 | 
			
		||||
    params.width = config.tic.Width();
 | 
			
		||||
    params.height = config.tic.Height();
 | 
			
		||||
    params.is_tiled = config.tic.IsTiled();
 | 
			
		||||
    params.pixel_format = SurfaceParams::PixelFormatFromTextureFormat(config.tic.format);
 | 
			
		||||
    params.UpdateParams();
 | 
			
		||||
 | 
			
		||||
    if (config.tic.Width() % 8 != 0 || config.tic.Height() % 8 != 0) {
 | 
			
		||||
        Surface src_surface;
 | 
			
		||||
        MathUtil::Rectangle<u32> rect;
 | 
			
		||||
        std::tie(src_surface, rect) = GetSurfaceSubRect(params, ScaleMatch::Ignore, true);
 | 
			
		||||
 | 
			
		||||
        params.res_scale = src_surface->res_scale;
 | 
			
		||||
        Surface tmp_surface = CreateSurface(params);
 | 
			
		||||
        BlitTextures(src_surface->texture.handle, rect, tmp_surface->texture.handle,
 | 
			
		||||
                     tmp_surface->GetScaledRect(),
 | 
			
		||||
                     SurfaceParams::GetFormatType(params.pixel_format), read_framebuffer.handle,
 | 
			
		||||
                     draw_framebuffer.handle);
 | 
			
		||||
 | 
			
		||||
        remove_surfaces.emplace(tmp_surface);
 | 
			
		||||
        return tmp_surface;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return GetSurface(params, ScaleMatch::Ignore, true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SurfaceSurfaceRect_Tuple RasterizerCacheOpenGL::GetFramebufferSurfaces(
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user