Просмотр исходного кода

GLCache: Use the full uncompressed size when blitting from one texture to another.

This avoids the problem of only copying a tiny piece of the textures when they are compressed.
Subv 8 лет назад
Родитель
Сommit
f22e090b86
1 измененных файлов с 6 добавлено и 3 удалено
  1. 6 3
      src/video_core/renderer_opengl/gl_rasterizer_cache.cpp

+ 6 - 3
src/video_core/renderer_opengl/gl_rasterizer_cache.cpp

@@ -1052,16 +1052,19 @@ Surface RasterizerCacheOpenGL::GetTextureSurface(const Tegra::Texture::FullTextu
 
 
     params.UpdateParams();
     params.UpdateParams();
 
 
-    if (config.tic.Width() % 8 != 0 || config.tic.Height() % 8 != 0 ||
+    if (params.GetActualWidth() % 8 != 0 || params.GetActualHeight() % 8 != 0 ||
         params.stride != params.width) {
         params.stride != params.width) {
         Surface src_surface;
         Surface src_surface;
         MathUtil::Rectangle<u32> rect;
         MathUtil::Rectangle<u32> rect;
         std::tie(src_surface, rect) = GetSurfaceSubRect(params, ScaleMatch::Ignore, true);
         std::tie(src_surface, rect) = GetSurfaceSubRect(params, ScaleMatch::Ignore, true);
 
 
+        rect = rect.Scale(params.GetCompresssionFactor());
+
         params.res_scale = src_surface->res_scale;
         params.res_scale = src_surface->res_scale;
         Surface tmp_surface = CreateSurface(params);
         Surface tmp_surface = CreateSurface(params);
-        BlitTextures(src_surface->texture.handle, rect, tmp_surface->texture.handle,
-                     tmp_surface->GetScaledRect(),
+
+        auto dst_rect = tmp_surface->GetScaledRect().Scale(params.GetCompresssionFactor());
+        BlitTextures(src_surface->texture.handle, rect, tmp_surface->texture.handle, dst_rect,
                      SurfaceParams::GetFormatType(params.pixel_format), read_framebuffer.handle,
                      SurfaceParams::GetFormatType(params.pixel_format), read_framebuffer.handle,
                      draw_framebuffer.handle);
                      draw_framebuffer.handle);