diff options
| author | Fernando Sahmkow <fsahmkow27@gmail.com> | 2020-06-22 11:29:55 -0400 |
|---|---|---|
| committer | Fernando Sahmkow <fsahmkow27@gmail.com> | 2020-06-22 11:37:40 -0400 |
| commit | 57926f80c06a3cd6190edcda4a086309c206ad40 (patch) | |
| tree | 9bc5db83f4ec4c13d73ab293fb6371d2687d0e98 /src/video_core/texture_cache/surface_base.cpp | |
| parent | 5384c348b34fd3989d01de05a0483dabbb1a0657 (diff) | |
TextureCache: Fix case where layer goes off bound.
The returned layer is expected to be between 0 and the depth of the
surface, anything larger is off bounds.
Diffstat (limited to 'src/video_core/texture_cache/surface_base.cpp')
| -rw-r--r-- | src/video_core/texture_cache/surface_base.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/video_core/texture_cache/surface_base.cpp b/src/video_core/texture_cache/surface_base.cpp index 94d3a6ae53..0caf3b4f05 100644 --- a/src/video_core/texture_cache/surface_base.cpp +++ b/src/video_core/texture_cache/surface_base.cpp @@ -120,6 +120,9 @@ std::optional<std::pair<u32, u32>> SurfaceBaseImpl::GetLayerMipmap( } const auto relative_address{static_cast<GPUVAddr>(candidate_gpu_addr - gpu_addr)}; const auto layer{static_cast<u32>(relative_address / layer_size)}; + if (layer >= params.depth) { + return {}; + } const GPUVAddr mipmap_address = relative_address - layer_size * layer; const auto mipmap_it = Common::BinaryFind(mipmap_offsets.begin(), mipmap_offsets.end(), mipmap_address); |
