|
|
@ -42,142 +42,138 @@ static void MortonCopy(u32 stride, u32 block_height, u32 height, u32 block_depth
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static constexpr ConversionArray morton_to_linear_fns = {
|
|
|
|
static constexpr ConversionArray morton_to_linear_fns = {
|
|
|
|
// clang-format off
|
|
|
|
MortonCopy<true, PixelFormat::ABGR8U>,
|
|
|
|
MortonCopy<true, PixelFormat::ABGR8U>,
|
|
|
|
MortonCopy<true, PixelFormat::ABGR8S>,
|
|
|
|
MortonCopy<true, PixelFormat::ABGR8S>,
|
|
|
|
MortonCopy<true, PixelFormat::ABGR8UI>,
|
|
|
|
MortonCopy<true, PixelFormat::ABGR8UI>,
|
|
|
|
MortonCopy<true, PixelFormat::B5G6R5U>,
|
|
|
|
MortonCopy<true, PixelFormat::B5G6R5U>,
|
|
|
|
MortonCopy<true, PixelFormat::A2B10G10R10U>,
|
|
|
|
MortonCopy<true, PixelFormat::A2B10G10R10U>,
|
|
|
|
MortonCopy<true, PixelFormat::A1B5G5R5U>,
|
|
|
|
MortonCopy<true, PixelFormat::A1B5G5R5U>,
|
|
|
|
MortonCopy<true, PixelFormat::R8U>,
|
|
|
|
MortonCopy<true, PixelFormat::R8U>,
|
|
|
|
MortonCopy<true, PixelFormat::R8UI>,
|
|
|
|
MortonCopy<true, PixelFormat::R8UI>,
|
|
|
|
MortonCopy<true, PixelFormat::RGBA16F>,
|
|
|
|
MortonCopy<true, PixelFormat::RGBA16F>,
|
|
|
|
MortonCopy<true, PixelFormat::RGBA16U>,
|
|
|
|
MortonCopy<true, PixelFormat::RGBA16U>,
|
|
|
|
MortonCopy<true, PixelFormat::RGBA16UI>,
|
|
|
|
MortonCopy<true, PixelFormat::RGBA16UI>,
|
|
|
|
MortonCopy<true, PixelFormat::R11FG11FB10F>,
|
|
|
|
MortonCopy<true, PixelFormat::R11FG11FB10F>,
|
|
|
|
MortonCopy<true, PixelFormat::RGBA32UI>,
|
|
|
|
MortonCopy<true, PixelFormat::RGBA32UI>,
|
|
|
|
MortonCopy<true, PixelFormat::DXT1>,
|
|
|
|
MortonCopy<true, PixelFormat::DXT1>,
|
|
|
|
MortonCopy<true, PixelFormat::DXT23>,
|
|
|
|
MortonCopy<true, PixelFormat::DXT23>,
|
|
|
|
MortonCopy<true, PixelFormat::DXT45>,
|
|
|
|
MortonCopy<true, PixelFormat::DXT45>,
|
|
|
|
MortonCopy<true, PixelFormat::DXN1>,
|
|
|
|
MortonCopy<true, PixelFormat::DXN1>,
|
|
|
|
MortonCopy<true, PixelFormat::DXN2UNORM>,
|
|
|
|
MortonCopy<true, PixelFormat::DXN2UNORM>,
|
|
|
|
MortonCopy<true, PixelFormat::DXN2SNORM>,
|
|
|
|
MortonCopy<true, PixelFormat::DXN2SNORM>,
|
|
|
|
MortonCopy<true, PixelFormat::BC7U>,
|
|
|
|
MortonCopy<true, PixelFormat::BC7U>,
|
|
|
|
MortonCopy<true, PixelFormat::BC6H_UF16>,
|
|
|
|
MortonCopy<true, PixelFormat::BC6H_UF16>,
|
|
|
|
MortonCopy<true, PixelFormat::BC6H_SF16>,
|
|
|
|
MortonCopy<true, PixelFormat::BC6H_SF16>,
|
|
|
|
MortonCopy<true, PixelFormat::ASTC_2D_4X4>,
|
|
|
|
MortonCopy<true, PixelFormat::ASTC_2D_4X4>,
|
|
|
|
MortonCopy<true, PixelFormat::BGRA8>,
|
|
|
|
MortonCopy<true, PixelFormat::BGRA8>,
|
|
|
|
MortonCopy<true, PixelFormat::RGBA32F>,
|
|
|
|
MortonCopy<true, PixelFormat::RGBA32F>,
|
|
|
|
MortonCopy<true, PixelFormat::RG32F>,
|
|
|
|
MortonCopy<true, PixelFormat::RG32F>,
|
|
|
|
MortonCopy<true, PixelFormat::R32F>,
|
|
|
|
MortonCopy<true, PixelFormat::R32F>,
|
|
|
|
MortonCopy<true, PixelFormat::R16F>,
|
|
|
|
MortonCopy<true, PixelFormat::R16F>,
|
|
|
|
MortonCopy<true, PixelFormat::R16U>,
|
|
|
|
MortonCopy<true, PixelFormat::R16U>,
|
|
|
|
MortonCopy<true, PixelFormat::R16S>,
|
|
|
|
MortonCopy<true, PixelFormat::R16S>,
|
|
|
|
MortonCopy<true, PixelFormat::R16UI>,
|
|
|
|
MortonCopy<true, PixelFormat::R16UI>,
|
|
|
|
MortonCopy<true, PixelFormat::R16I>,
|
|
|
|
MortonCopy<true, PixelFormat::R16I>,
|
|
|
|
MortonCopy<true, PixelFormat::RG16>,
|
|
|
|
MortonCopy<true, PixelFormat::RG16>,
|
|
|
|
MortonCopy<true, PixelFormat::RG16F>,
|
|
|
|
MortonCopy<true, PixelFormat::RG16F>,
|
|
|
|
MortonCopy<true, PixelFormat::RG16UI>,
|
|
|
|
MortonCopy<true, PixelFormat::RG16UI>,
|
|
|
|
MortonCopy<true, PixelFormat::RG16I>,
|
|
|
|
MortonCopy<true, PixelFormat::RG16I>,
|
|
|
|
MortonCopy<true, PixelFormat::RG16S>,
|
|
|
|
MortonCopy<true, PixelFormat::RG16S>,
|
|
|
|
MortonCopy<true, PixelFormat::RGB32F>,
|
|
|
|
MortonCopy<true, PixelFormat::RGB32F>,
|
|
|
|
MortonCopy<true, PixelFormat::RGBA8_SRGB>,
|
|
|
|
MortonCopy<true, PixelFormat::RGBA8_SRGB>,
|
|
|
|
MortonCopy<true, PixelFormat::RG8U>,
|
|
|
|
MortonCopy<true, PixelFormat::RG8U>,
|
|
|
|
MortonCopy<true, PixelFormat::RG8S>,
|
|
|
|
MortonCopy<true, PixelFormat::RG8S>,
|
|
|
|
MortonCopy<true, PixelFormat::RG32UI>,
|
|
|
|
MortonCopy<true, PixelFormat::RG32UI>,
|
|
|
|
MortonCopy<true, PixelFormat::R32UI>,
|
|
|
|
MortonCopy<true, PixelFormat::R32UI>,
|
|
|
|
MortonCopy<true, PixelFormat::ASTC_2D_8X8>,
|
|
|
|
MortonCopy<true, PixelFormat::ASTC_2D_8X8>,
|
|
|
|
MortonCopy<true, PixelFormat::ASTC_2D_8X5>,
|
|
|
|
MortonCopy<true, PixelFormat::ASTC_2D_8X5>,
|
|
|
|
MortonCopy<true, PixelFormat::ASTC_2D_5X4>,
|
|
|
|
MortonCopy<true, PixelFormat::ASTC_2D_5X4>,
|
|
|
|
MortonCopy<true, PixelFormat::BGRA8_SRGB>,
|
|
|
|
MortonCopy<true, PixelFormat::BGRA8_SRGB>,
|
|
|
|
MortonCopy<true, PixelFormat::DXT1_SRGB>,
|
|
|
|
MortonCopy<true, PixelFormat::DXT1_SRGB>,
|
|
|
|
MortonCopy<true, PixelFormat::DXT23_SRGB>,
|
|
|
|
MortonCopy<true, PixelFormat::DXT23_SRGB>,
|
|
|
|
MortonCopy<true, PixelFormat::DXT45_SRGB>,
|
|
|
|
MortonCopy<true, PixelFormat::DXT45_SRGB>,
|
|
|
|
MortonCopy<true, PixelFormat::BC7U_SRGB>,
|
|
|
|
MortonCopy<true, PixelFormat::BC7U_SRGB>,
|
|
|
|
MortonCopy<true, PixelFormat::ASTC_2D_4X4_SRGB>,
|
|
|
|
MortonCopy<true, PixelFormat::ASTC_2D_4X4_SRGB>,
|
|
|
|
MortonCopy<true, PixelFormat::ASTC_2D_8X8_SRGB>,
|
|
|
|
MortonCopy<true, PixelFormat::ASTC_2D_8X8_SRGB>,
|
|
|
|
MortonCopy<true, PixelFormat::ASTC_2D_8X5_SRGB>,
|
|
|
|
MortonCopy<true, PixelFormat::ASTC_2D_8X5_SRGB>,
|
|
|
|
MortonCopy<true, PixelFormat::ASTC_2D_5X4_SRGB>,
|
|
|
|
MortonCopy<true, PixelFormat::ASTC_2D_5X4_SRGB>,
|
|
|
|
MortonCopy<true, PixelFormat::ASTC_2D_5X5>,
|
|
|
|
MortonCopy<true, PixelFormat::ASTC_2D_5X5>,
|
|
|
|
MortonCopy<true, PixelFormat::ASTC_2D_5X5_SRGB>,
|
|
|
|
MortonCopy<true, PixelFormat::ASTC_2D_5X5_SRGB>,
|
|
|
|
MortonCopy<true, PixelFormat::ASTC_2D_10X8>,
|
|
|
|
MortonCopy<true, PixelFormat::ASTC_2D_10X8>,
|
|
|
|
MortonCopy<true, PixelFormat::ASTC_2D_10X8_SRGB>,
|
|
|
|
MortonCopy<true, PixelFormat::ASTC_2D_10X8_SRGB>,
|
|
|
|
MortonCopy<true, PixelFormat::Z32F>,
|
|
|
|
MortonCopy<true, PixelFormat::Z32F>,
|
|
|
|
MortonCopy<true, PixelFormat::Z16>,
|
|
|
|
MortonCopy<true, PixelFormat::Z16>,
|
|
|
|
MortonCopy<true, PixelFormat::Z24S8>,
|
|
|
|
MortonCopy<true, PixelFormat::Z24S8>,
|
|
|
|
MortonCopy<true, PixelFormat::S8Z24>,
|
|
|
|
MortonCopy<true, PixelFormat::S8Z24>,
|
|
|
|
MortonCopy<true, PixelFormat::Z32FS8>,
|
|
|
|
MortonCopy<true, PixelFormat::Z32FS8>,
|
|
|
|
|
|
|
|
// clang-format on
|
|
|
|
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
static constexpr ConversionArray linear_to_morton_fns = {
|
|
|
|
static constexpr ConversionArray linear_to_morton_fns = {
|
|
|
|
// clang-format off
|
|
|
|
MortonCopy<false, PixelFormat::ABGR8U>,
|
|
|
|
MortonCopy<false, PixelFormat::ABGR8U>,
|
|
|
|
MortonCopy<false, PixelFormat::ABGR8S>,
|
|
|
|
MortonCopy<false, PixelFormat::ABGR8S>,
|
|
|
|
MortonCopy<false, PixelFormat::ABGR8UI>,
|
|
|
|
MortonCopy<false, PixelFormat::ABGR8UI>,
|
|
|
|
MortonCopy<false, PixelFormat::B5G6R5U>,
|
|
|
|
MortonCopy<false, PixelFormat::B5G6R5U>,
|
|
|
|
MortonCopy<false, PixelFormat::A2B10G10R10U>,
|
|
|
|
MortonCopy<false, PixelFormat::A2B10G10R10U>,
|
|
|
|
MortonCopy<false, PixelFormat::A1B5G5R5U>,
|
|
|
|
MortonCopy<false, PixelFormat::A1B5G5R5U>,
|
|
|
|
MortonCopy<false, PixelFormat::R8U>,
|
|
|
|
MortonCopy<false, PixelFormat::R8U>,
|
|
|
|
MortonCopy<false, PixelFormat::R8UI>,
|
|
|
|
MortonCopy<false, PixelFormat::R8UI>,
|
|
|
|
MortonCopy<false, PixelFormat::RGBA16F>,
|
|
|
|
MortonCopy<false, PixelFormat::RGBA16F>,
|
|
|
|
MortonCopy<false, PixelFormat::RGBA16U>,
|
|
|
|
MortonCopy<false, PixelFormat::RGBA16U>,
|
|
|
|
MortonCopy<false, PixelFormat::RGBA16UI>,
|
|
|
|
MortonCopy<false, PixelFormat::RGBA16UI>,
|
|
|
|
MortonCopy<false, PixelFormat::R11FG11FB10F>,
|
|
|
|
MortonCopy<false, PixelFormat::R11FG11FB10F>,
|
|
|
|
MortonCopy<false, PixelFormat::RGBA32UI>,
|
|
|
|
MortonCopy<false, PixelFormat::RGBA32UI>,
|
|
|
|
MortonCopy<false, PixelFormat::DXT1>,
|
|
|
|
MortonCopy<false, PixelFormat::DXT1>,
|
|
|
|
MortonCopy<false, PixelFormat::DXT23>,
|
|
|
|
MortonCopy<false, PixelFormat::DXT23>,
|
|
|
|
MortonCopy<false, PixelFormat::DXT45>,
|
|
|
|
MortonCopy<false, PixelFormat::DXT45>,
|
|
|
|
MortonCopy<false, PixelFormat::DXN1>,
|
|
|
|
MortonCopy<false, PixelFormat::DXN1>,
|
|
|
|
MortonCopy<false, PixelFormat::DXN2UNORM>,
|
|
|
|
MortonCopy<false, PixelFormat::DXN2UNORM>,
|
|
|
|
MortonCopy<false, PixelFormat::DXN2SNORM>,
|
|
|
|
MortonCopy<false, PixelFormat::DXN2SNORM>,
|
|
|
|
MortonCopy<false, PixelFormat::BC7U>,
|
|
|
|
MortonCopy<false, PixelFormat::BC7U>,
|
|
|
|
MortonCopy<false, PixelFormat::BC6H_UF16>,
|
|
|
|
MortonCopy<false, PixelFormat::BC6H_UF16>,
|
|
|
|
MortonCopy<false, PixelFormat::BC6H_SF16>,
|
|
|
|
MortonCopy<false, PixelFormat::BC6H_SF16>,
|
|
|
|
// TODO(Subv): Swizzling ASTC formats are not supported
|
|
|
|
// TODO(Subv): Swizzling ASTC formats are not supported
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
MortonCopy<false, PixelFormat::BGRA8>,
|
|
|
|
MortonCopy<false, PixelFormat::BGRA8>,
|
|
|
|
MortonCopy<false, PixelFormat::RGBA32F>,
|
|
|
|
MortonCopy<false, PixelFormat::RGBA32F>,
|
|
|
|
MortonCopy<false, PixelFormat::RG32F>,
|
|
|
|
MortonCopy<false, PixelFormat::RG32F>,
|
|
|
|
MortonCopy<false, PixelFormat::R32F>,
|
|
|
|
MortonCopy<false, PixelFormat::R32F>,
|
|
|
|
MortonCopy<false, PixelFormat::R16F>,
|
|
|
|
MortonCopy<false, PixelFormat::R16F>,
|
|
|
|
MortonCopy<false, PixelFormat::R16U>,
|
|
|
|
MortonCopy<false, PixelFormat::R16U>,
|
|
|
|
MortonCopy<false, PixelFormat::R16S>,
|
|
|
|
MortonCopy<false, PixelFormat::R16S>,
|
|
|
|
MortonCopy<false, PixelFormat::R16UI>,
|
|
|
|
MortonCopy<false, PixelFormat::R16UI>,
|
|
|
|
MortonCopy<false, PixelFormat::R16I>,
|
|
|
|
MortonCopy<false, PixelFormat::R16I>,
|
|
|
|
MortonCopy<false, PixelFormat::RG16>,
|
|
|
|
MortonCopy<false, PixelFormat::RG16>,
|
|
|
|
MortonCopy<false, PixelFormat::RG16F>,
|
|
|
|
MortonCopy<false, PixelFormat::RG16F>,
|
|
|
|
MortonCopy<false, PixelFormat::RG16UI>,
|
|
|
|
MortonCopy<false, PixelFormat::RG16UI>,
|
|
|
|
MortonCopy<false, PixelFormat::RG16I>,
|
|
|
|
MortonCopy<false, PixelFormat::RG16I>,
|
|
|
|
MortonCopy<false, PixelFormat::RG16S>,
|
|
|
|
MortonCopy<false, PixelFormat::RG16S>,
|
|
|
|
MortonCopy<false, PixelFormat::RGB32F>,
|
|
|
|
MortonCopy<false, PixelFormat::RGB32F>,
|
|
|
|
MortonCopy<false, PixelFormat::RGBA8_SRGB>,
|
|
|
|
MortonCopy<false, PixelFormat::RGBA8_SRGB>,
|
|
|
|
MortonCopy<false, PixelFormat::RG8U>,
|
|
|
|
MortonCopy<false, PixelFormat::RG8U>,
|
|
|
|
MortonCopy<false, PixelFormat::RG8S>,
|
|
|
|
MortonCopy<false, PixelFormat::RG8S>,
|
|
|
|
MortonCopy<false, PixelFormat::RG32UI>,
|
|
|
|
MortonCopy<false, PixelFormat::RG32UI>,
|
|
|
|
MortonCopy<false, PixelFormat::R32UI>,
|
|
|
|
MortonCopy<false, PixelFormat::R32UI>,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
MortonCopy<false, PixelFormat::BGRA8_SRGB>,
|
|
|
|
MortonCopy<false, PixelFormat::BGRA8_SRGB>,
|
|
|
|
MortonCopy<false, PixelFormat::DXT1_SRGB>,
|
|
|
|
MortonCopy<false, PixelFormat::DXT1_SRGB>,
|
|
|
|
MortonCopy<false, PixelFormat::DXT23_SRGB>,
|
|
|
|
MortonCopy<false, PixelFormat::DXT23_SRGB>,
|
|
|
|
MortonCopy<false, PixelFormat::DXT45_SRGB>,
|
|
|
|
MortonCopy<false, PixelFormat::DXT45_SRGB>,
|
|
|
|
MortonCopy<false, PixelFormat::BC7U_SRGB>,
|
|
|
|
MortonCopy<false, PixelFormat::BC7U_SRGB>,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
MortonCopy<false, PixelFormat::Z32F>,
|
|
|
|
MortonCopy<false, PixelFormat::Z32F>,
|
|
|
|
MortonCopy<false, PixelFormat::Z16>,
|
|
|
|
MortonCopy<false, PixelFormat::Z16>,
|
|
|
|
MortonCopy<false, PixelFormat::Z24S8>,
|
|
|
|
MortonCopy<false, PixelFormat::Z24S8>,
|
|
|
|
MortonCopy<false, PixelFormat::S8Z24>,
|
|
|
|
MortonCopy<false, PixelFormat::S8Z24>,
|
|
|
|
MortonCopy<false, PixelFormat::Z32FS8>,
|
|
|
|
MortonCopy<false, PixelFormat::Z32FS8>,
|
|
|
|
|
|
|
|
// clang-format on
|
|
|
|
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
static MortonCopyFn GetSwizzleFunction(MortonSwizzleMode mode, Surface::PixelFormat format) {
|
|
|
|
static MortonCopyFn GetSwizzleFunction(MortonSwizzleMode mode, Surface::PixelFormat format) {
|
|
|
|