diff options
| -rw-r--r-- | src/video_core/textures/decoders.cpp | 8 | 
1 files changed, 8 insertions, 0 deletions
diff --git a/src/video_core/textures/decoders.cpp b/src/video_core/textures/decoders.cpp index 3a463d5db..1bccc09d9 100644 --- a/src/video_core/textures/decoders.cpp +++ b/src/video_core/textures/decoders.cpp @@ -63,6 +63,14 @@ void Swizzle(std::span<u8> output, std::span<const u8> input, u32 bytes_per_pixe                  const u32 unswizzled_offset =                      slice * pitch * height + line * pitch + column * bytes_per_pixel; +                if (const auto offset = (TO_LINEAR ? unswizzled_offset : swizzled_offset); +                    offset >= input.size()) { +                    // TODO(Rodrigo): This is an out of bounds access that should never happen. To +                    // avoid crashing the emulator, continue. +                    ASSERT_MSG(false, "offset {} exceeds input size {}!", offset, input.size()); +                    continue; +                } +                  u8* const dst = &output[TO_LINEAR ? swizzled_offset : unswizzled_offset];                  const u8* const src = &input[TO_LINEAR ? unswizzled_offset : swizzled_offset];                  std::memcpy(dst, src, bytes_per_pixel);  | 
