|
|
|
@ -16,12 +16,12 @@ namespace VideoCore { |
|
|
|
using Surface::GetBytesPerPixel; |
|
|
|
using Surface::PixelFormat; |
|
|
|
|
|
|
|
using MortonCopyFn = void (*)(u32, u32, u32, u32, u32, u32, u8*, std::size_t, VAddr); |
|
|
|
using MortonCopyFn = void (*)(u32, u32, u32, u32, u32, u32, u8*, VAddr); |
|
|
|
using ConversionArray = std::array<MortonCopyFn, Surface::MaxPixelFormat>; |
|
|
|
|
|
|
|
template <bool morton_to_linear, PixelFormat format> |
|
|
|
static void MortonCopy(u32 stride, u32 block_height, u32 height, u32 block_depth, u32 depth, |
|
|
|
u32 tile_width_spacing, u8* buffer, std::size_t buffer_size, VAddr addr) { |
|
|
|
u32 tile_width_spacing, u8* buffer, VAddr addr) { |
|
|
|
constexpr u32 bytes_per_pixel = GetBytesPerPixel(format); |
|
|
|
|
|
|
|
// With the BCn formats (DXT and DXN), each 4x4 tile is swizzled instead of just individual
|
|
|
|
@ -282,10 +282,9 @@ static u32 GetMortonOffset128(u32 x, u32 y, u32 bytes_per_pixel) { |
|
|
|
|
|
|
|
void MortonSwizzle(MortonSwizzleMode mode, Surface::PixelFormat format, u32 stride, |
|
|
|
u32 block_height, u32 height, u32 block_depth, u32 depth, u32 tile_width_spacing, |
|
|
|
u8* buffer, std::size_t buffer_size, VAddr addr) { |
|
|
|
|
|
|
|
u8* buffer, VAddr addr) { |
|
|
|
GetSwizzleFunction(mode, format)(stride, block_height, height, block_depth, depth, |
|
|
|
tile_width_spacing, buffer, buffer_size, addr); |
|
|
|
tile_width_spacing, buffer, addr); |
|
|
|
} |
|
|
|
|
|
|
|
void MortonCopyPixels128(u32 width, u32 height, u32 bytes_per_pixel, u32 linear_bytes_per_pixel, |
|
|
|
|