Procházet zdrojové kódy

texture_cache/surface_params: Force depth=1 on 2D textures

Sometimes games will sample a 2D array TIC with a 2D access in the
shader. This causes bad interactions with the rest of the texture cache.
To emulate what the game wants to do, force a depth=1 on 2D textures
(not 2D arrays) and let the texture cache handle the rest.
ReinUsesLisp před 6 roky
rodič
revize
daae6a323b
1 změnil soubory, kde provedl 4 přidání a 2 odebrání
  1. 4 2
      src/video_core/texture_cache/surface_params.cpp

+ 4 - 2
src/video_core/texture_cache/surface_params.cpp

@@ -113,8 +113,10 @@ SurfaceParams SurfaceParams::CreateForTexture(const FormatLookupTable& lookup_ta
         params.height = tic.Height();
         params.height = tic.Height();
         params.depth = tic.Depth();
         params.depth = tic.Depth();
         params.pitch = params.is_tiled ? 0 : tic.Pitch();
         params.pitch = params.is_tiled ? 0 : tic.Pitch();
-        if (params.target == SurfaceTarget::TextureCubemap ||
-            params.target == SurfaceTarget::TextureCubeArray) {
+        if (params.target == SurfaceTarget::Texture2D && params.depth > 1) {
+            params.depth = 1;
+        } else if (params.target == SurfaceTarget::TextureCubemap ||
+                   params.target == SurfaceTarget::TextureCubeArray) {
             params.depth *= 6;
             params.depth *= 6;
         }
         }
         params.num_levels = tic.max_mip_level + 1;
         params.num_levels = tic.max_mip_level + 1;