Browse Source

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.
nce_cpp
ReinUsesLisp 6 years ago
parent
commit
2337a2fdbc
  1. 4
      src/video_core/texture_cache/surface_params.cpp

4
src/video_core/texture_cache/surface_params.cpp

@ -113,7 +113,9 @@ 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 ||
if (params.target == SurfaceTarget::Texture2D && params.depth > 1) {
params.depth = 1;
} else if (params.target == SurfaceTarget::TextureCubemap ||
params.target == SurfaceTarget::TextureCubeArray) { params.target == SurfaceTarget::TextureCubeArray) {
params.depth *= 6; params.depth *= 6;
} }

Loading…
Cancel
Save