diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp index 81ba557d9..1500519fc 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp @@ -1264,9 +1264,17 @@ void RasterizerCacheOpenGL::FillTextureCube(GLuint dest_handle, state.Apply(); glActiveTexture(TextureUnits::TextureCube.Enum()); FormatTuple format_tuple = GetFormatTuple(faces[0].surface->pixel_format); - for (auto& face : faces) { - glTexImage2D(face.gl_face, 0, format_tuple.internal_format, scaled_size, scaled_size, 0, - format_tuple.format, format_tuple.type, nullptr); + + GLint cur_size, cur_format; + glGetTexLevelParameteriv(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_TEXTURE_WIDTH, &cur_size); + glGetTexLevelParameteriv(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_TEXTURE_INTERNAL_FORMAT, + &cur_format); + + if (cur_size != scaled_size || cur_format != format_tuple.internal_format) { + for (auto& face : faces) { + glTexImage2D(face.gl_face, 0, format_tuple.internal_format, scaled_size, scaled_size, 0, + format_tuple.format, format_tuple.type, nullptr); + } } state.draw.read_framebuffer = read_framebuffer.handle;