summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer_cache.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp
index b20ef8fae..9c8925383 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp
@@ -1123,8 +1123,8 @@ Surface RasterizerCacheOpenGL::GetSurface(const SurfaceParams& params, bool pres
1123 } else if (preserve_contents) { 1123 } else if (preserve_contents) {
1124 // If surface parameters changed and we care about keeping the previous data, recreate 1124 // If surface parameters changed and we care about keeping the previous data, recreate
1125 // the surface from the old one 1125 // the surface from the old one
1126 Unregister(surface);
1127 Surface new_surface{RecreateSurface(surface, params)}; 1126 Surface new_surface{RecreateSurface(surface, params)};
1127 Unregister(surface);
1128 Register(new_surface); 1128 Register(new_surface);
1129 return new_surface; 1129 return new_surface;
1130 } else { 1130 } else {
@@ -1214,7 +1214,6 @@ Surface RasterizerCacheOpenGL::RecreateSurface(const Surface& old_surface,
1214 const bool is_blit{old_params.pixel_format == new_params.pixel_format}; 1214 const bool is_blit{old_params.pixel_format == new_params.pixel_format};
1215 1215
1216 switch (new_params.target) { 1216 switch (new_params.target) {
1217 case SurfaceParams::SurfaceTarget::Texture3D:
1218 case SurfaceParams::SurfaceTarget::Texture2D: 1217 case SurfaceParams::SurfaceTarget::Texture2D:
1219 if (is_blit) { 1218 if (is_blit) {
1220 BlitSurface(old_surface, new_surface, read_framebuffer.handle, draw_framebuffer.handle); 1219 BlitSurface(old_surface, new_surface, read_framebuffer.handle, draw_framebuffer.handle);
@@ -1222,6 +1221,9 @@ Surface RasterizerCacheOpenGL::RecreateSurface(const Surface& old_surface,
1222 CopySurface(old_surface, new_surface, copy_pbo.handle); 1221 CopySurface(old_surface, new_surface, copy_pbo.handle);
1223 } 1222 }
1224 break; 1223 break;
1224 case SurfaceParams::SurfaceTarget::Texture3D:
1225 AccurateCopySurface(old_surface, new_surface);
1226 break;
1225 case SurfaceParams::SurfaceTarget::TextureCubemap: { 1227 case SurfaceParams::SurfaceTarget::TextureCubemap: {
1226 if (old_params.rt.array_mode != 1) { 1228 if (old_params.rt.array_mode != 1) {
1227 // TODO(bunnei): This is used by Breath of the Wild, I'm not sure how to implement this 1229 // TODO(bunnei): This is used by Breath of the Wild, I'm not sure how to implement this