From e44fb33b79f08e9ea762b6eeaa890b594a107e65 Mon Sep 17 00:00:00 2001 From: "Dr. Chat" Date: Mon, 7 May 2018 19:00:25 -0500 Subject: [PATCH] [Vulkan] Fix (non-mipmapped) linear 2D texture uploads --- src/xenia/gpu/vulkan/texture_cache.cc | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/xenia/gpu/vulkan/texture_cache.cc b/src/xenia/gpu/vulkan/texture_cache.cc index a7f3aa894..937f19a04 100644 --- a/src/xenia/gpu/vulkan/texture_cache.cc +++ b/src/xenia/gpu/vulkan/texture_cache.cc @@ -924,12 +924,17 @@ bool TextureCache::ConvertTexture2D(uint8_t* dest, uint32_t bytes_per_block = src.format_info()->block_width * src.format_info()->block_height * src.format_info()->bits_per_pixel / 8; + uint32_t src_pitch = xe::round_up(block_width * bytes_per_block, 256); + uint32_t dst_pitch = input_width * src.format_info()->block_width * + src.format_info()->bits_per_pixel / 8; const uint8_t* src_mem = reinterpret_cast(host_address); - src_mem += offset_y * src.size_2d.input_pitch; + src_mem += offset_y * src_pitch; src_mem += offset_x * bytes_per_block; - TextureSwap(src.endianness, dest, src_mem, - src.size_2d.input_pitch * src.size_2d.logical_height); + for (uint32_t y = 0; y < src.size_2d.logical_height; y++) { + TextureSwap(src.endianness, dest + y * dst_pitch, src_mem + y * src_pitch, + dst_pitch); + } } else { // Untile image. // We could do this in a shader to speed things up, as this is pretty