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