|
|
|
@ -56,23 +56,22 @@ u32 BytesPerPixel(TextureFormat format) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
std::vector<u8> UnswizzleTexture(VAddr address, TextureFormat format, u32 width, u32 height) { |
|
|
|
std::vector<u8> UnswizzleTexture(VAddr address, TextureFormat format, u32 width, u32 height, |
|
|
|
u32 block_height) { |
|
|
|
u8* data = Memory::GetPointer(address); |
|
|
|
u32 bytes_per_pixel = BytesPerPixel(format); |
|
|
|
|
|
|
|
static constexpr u32 DefaultBlockHeight = 16; |
|
|
|
|
|
|
|
std::vector<u8> unswizzled_data(width * height * bytes_per_pixel); |
|
|
|
|
|
|
|
switch (format) { |
|
|
|
case TextureFormat::DXT1: |
|
|
|
// In the DXT1 format, each 4x4 tile is swizzled instead of just individual pixel values.
|
|
|
|
CopySwizzledData(width / 4, height / 4, bytes_per_pixel, bytes_per_pixel, data, |
|
|
|
unswizzled_data.data(), true, DefaultBlockHeight); |
|
|
|
unswizzled_data.data(), true, block_height); |
|
|
|
break; |
|
|
|
case TextureFormat::A8R8G8B8: |
|
|
|
CopySwizzledData(width, height, bytes_per_pixel, bytes_per_pixel, data, |
|
|
|
unswizzled_data.data(), true, DefaultBlockHeight); |
|
|
|
unswizzled_data.data(), true, block_height); |
|
|
|
break; |
|
|
|
default: |
|
|
|
UNIMPLEMENTED_MSG("Format not implemented"); |
|
|
|
|