diff options
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer_cache.cpp | 6 |
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 |