From 1ff20d8538e7ed6a9121882afef4d73503667842 Mon Sep 17 00:00:00 2001 From: FernandoS27 Date: Sat, 13 Oct 2018 16:11:11 -0400 Subject: [PATCH] Fix a Crash on Zelda BotW and Splatoon 2, and simplified LoadGLBuffer --- .../renderer_opengl/gl_rasterizer_cache.cpp | 19 +------------------ src/video_core/textures/decoders.cpp | 2 +- 2 files changed, 2 insertions(+), 19 deletions(-) diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp index 86cb62dae..8fdb59b5b 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp @@ -833,27 +833,10 @@ void CachedSurface::LoadGLBuffer() { ASSERT_MSG(params.block_width == 1, "Block width is defined as {} on texture type {}", params.block_width, static_cast(params.target)); - switch (params.target) { - case SurfaceParams::SurfaceTarget::Texture2D: + if (params.target == SurfaceParams::SurfaceTarget::Texture2D) { // TODO(Blinkhawk): Eliminate this condition once all texture types are implemented. depth = 1U; block_depth = 1U; - break; - case SurfaceParams::SurfaceTarget::Texture2DArray: - case SurfaceParams::SurfaceTarget::TextureCubemap: - depth = 1U; - block_depth = 1U; - for (std::size_t index = 0; index < params.depth; ++index) { - const std::size_t offset{index * copy_size}; - morton_to_gl_fns[static_cast(params.pixel_format)]( - params.width, params.block_height, params.height, 1U, 1U, - gl_buffer.data() + offset, copy_size, params.addr + offset); - } - break; - default: - LOG_CRITICAL(HW_GPU, "Unimplemented tiled load for target={}", - static_cast(params.target)); - UNREACHABLE(); } const std::size_t size = copy_size * depth; diff --git a/src/video_core/textures/decoders.cpp b/src/video_core/textures/decoders.cpp index 6693067f8..5dab47886 100644 --- a/src/video_core/textures/decoders.cpp +++ b/src/video_core/textures/decoders.cpp @@ -271,7 +271,7 @@ u32 BytesPerPixel(TextureFormat format) { std::vector UnswizzleTexture(VAddr address, u32 tile_size, u32 bytes_per_pixel, u32 width, u32 height, u32 depth, u32 block_height, u32 block_depth) { - std::vector unswizzled_data(width * height * bytes_per_pixel); + std::vector unswizzled_data(width * height * depth * bytes_per_pixel); CopySwizzledData(width / tile_size, height / tile_size, depth, bytes_per_pixel, bytes_per_pixel, Memory::GetPointer(address), unswizzled_data.data(), true, block_height, block_depth);