diff options
author | Fernando Sahmkow <fsahmkow27@gmail.com> | 2019-04-11 08:35:29 +0200 |
---|---|---|
committer | FernandoS27 <fsahmkow27@gmail.com> | 2019-04-11 19:14:28 +0200 |
commit | c9305959d31a8683581b9866f11e1c990527d9c4 (patch) | |
tree | 965543091085393ed2791a4850f618bbadc63d52 /src/video_core | |
parent | Merge pull request #2278 from ReinUsesLisp/vc-texture-cache (diff) | |
download | yuzu-c9305959d31a8683581b9866f11e1c990527d9c4.tar yuzu-c9305959d31a8683581b9866f11e1c990527d9c4.tar.gz yuzu-c9305959d31a8683581b9866f11e1c990527d9c4.tar.bz2 yuzu-c9305959d31a8683581b9866f11e1c990527d9c4.tar.lz yuzu-c9305959d31a8683581b9866f11e1c990527d9c4.tar.xz yuzu-c9305959d31a8683581b9866f11e1c990527d9c4.tar.zst yuzu-c9305959d31a8683581b9866f11e1c990527d9c4.zip |
Diffstat (limited to 'src/video_core')
-rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer_cache.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp index 9026a9452..55b6d8591 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp @@ -1179,10 +1179,16 @@ Surface RasterizerCacheOpenGL::RecreateSurface(const Surface& old_surface, return new_surface; } + const bool old_compressed = + GetFormatTuple(old_params.pixel_format, old_params.component_type).compressed; + const bool new_compressed = + GetFormatTuple(new_params.pixel_format, new_params.component_type).compressed; + const bool compatible_formats = + GetFormatBpp(old_params.pixel_format) == GetFormatBpp(new_params.pixel_format) && + !(old_compressed || new_compressed); // For compatible surfaces, we can just do fast glCopyImageSubData based copy - if (old_params.target == new_params.target && old_params.type == new_params.type && - old_params.depth == new_params.depth && old_params.depth == 1 && - GetFormatBpp(old_params.pixel_format) == GetFormatBpp(new_params.pixel_format)) { + if (old_params.target == new_params.target && old_params.depth == new_params.depth && + old_params.depth == 1 && compatible_formats) { FastCopySurface(old_surface, new_surface); return new_surface; } @@ -1197,7 +1203,7 @@ Surface RasterizerCacheOpenGL::RecreateSurface(const Surface& old_surface, case SurfaceTarget::TextureCubemap: case SurfaceTarget::Texture2DArray: case SurfaceTarget::TextureCubeArray: - if (old_params.pixel_format == new_params.pixel_format) + if (compatible_formats) FastLayeredCopySurface(old_surface, new_surface); else { AccurateCopySurface(old_surface, new_surface); |