video_core: Implement RGBX16F PixelFormat
This commit is contained in:
parent
2b514275ad
commit
55d272efe6
7 changed files with 37 additions and 22 deletions
|
@ -122,6 +122,7 @@ u32 RenderTargetBytesPerPixel(RenderTargetFormat format) {
|
||||||
case RenderTargetFormat::RGBA16_UINT:
|
case RenderTargetFormat::RGBA16_UINT:
|
||||||
case RenderTargetFormat::RGBA16_UNORM:
|
case RenderTargetFormat::RGBA16_UNORM:
|
||||||
case RenderTargetFormat::RGBA16_FLOAT:
|
case RenderTargetFormat::RGBA16_FLOAT:
|
||||||
|
case RenderTargetFormat::RGBX16_FLOAT:
|
||||||
case RenderTargetFormat::RG32_FLOAT:
|
case RenderTargetFormat::RG32_FLOAT:
|
||||||
case RenderTargetFormat::RG32_UINT:
|
case RenderTargetFormat::RG32_UINT:
|
||||||
return 8;
|
return 8;
|
||||||
|
|
|
@ -42,6 +42,7 @@ enum class RenderTargetFormat : u32 {
|
||||||
RGBA16_FLOAT = 0xCA,
|
RGBA16_FLOAT = 0xCA,
|
||||||
RG32_FLOAT = 0xCB,
|
RG32_FLOAT = 0xCB,
|
||||||
RG32_UINT = 0xCD,
|
RG32_UINT = 0xCD,
|
||||||
|
RGBX16_FLOAT = 0xCE,
|
||||||
BGRA8_UNORM = 0xCF,
|
BGRA8_UNORM = 0xCF,
|
||||||
BGRA8_SRGB = 0xD0,
|
BGRA8_SRGB = 0xD0,
|
||||||
RGB10_A2_UNORM = 0xD1,
|
RGB10_A2_UNORM = 0xD1,
|
||||||
|
|
|
@ -83,6 +83,7 @@ static constexpr ConversionArray morton_to_linear_fns = {
|
||||||
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::RGBX16F>,
|
||||||
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>,
|
||||||
|
@ -151,6 +152,7 @@ static constexpr ConversionArray linear_to_morton_fns = {
|
||||||
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::RGBX16F>,
|
||||||
MortonCopy<false, PixelFormat::R32UI>,
|
MortonCopy<false, PixelFormat::R32UI>,
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
|
|
|
@ -97,6 +97,7 @@ constexpr std::array<FormatTuple, VideoCore::Surface::MaxPixelFormat> tex_format
|
||||||
{GL_RG8, GL_RG, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // RG8U
|
{GL_RG8, GL_RG, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // RG8U
|
||||||
{GL_RG8, GL_RG, GL_BYTE, ComponentType::SNorm, false}, // RG8S
|
{GL_RG8, GL_RG, GL_BYTE, ComponentType::SNorm, false}, // RG8S
|
||||||
{GL_RG32UI, GL_RG_INTEGER, GL_UNSIGNED_INT, ComponentType::UInt, false}, // RG32UI
|
{GL_RG32UI, GL_RG_INTEGER, GL_UNSIGNED_INT, ComponentType::UInt, false}, // RG32UI
|
||||||
|
{GL_RGB16F, GL_RGBA16, GL_HALF_FLOAT, ComponentType::Float, false}, // RGBX16F TODO
|
||||||
{GL_R32UI, GL_RED_INTEGER, GL_UNSIGNED_INT, ComponentType::UInt, false}, // R32UI
|
{GL_R32UI, GL_RED_INTEGER, GL_UNSIGNED_INT, ComponentType::UInt, false}, // R32UI
|
||||||
{GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_8X8
|
{GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_8X8
|
||||||
{GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_8X5
|
{GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_8X5
|
||||||
|
|
|
@ -143,6 +143,7 @@ static constexpr std::array<FormatTuple, VideoCore::Surface::MaxPixelFormat> tex
|
||||||
{vk::Format::eUndefined, ComponentType::Invalid, false}, // RG8U
|
{vk::Format::eUndefined, ComponentType::Invalid, false}, // RG8U
|
||||||
{vk::Format::eUndefined, ComponentType::Invalid, false}, // RG8S
|
{vk::Format::eUndefined, ComponentType::Invalid, false}, // RG8S
|
||||||
{vk::Format::eUndefined, ComponentType::Invalid, false}, // RG32UI
|
{vk::Format::eUndefined, ComponentType::Invalid, false}, // RG32UI
|
||||||
|
{vk::Format::eUndefined, ComponentType::Invalid, false}, // RGBX16F
|
||||||
{vk::Format::eUndefined, ComponentType::Invalid, false}, // R32UI
|
{vk::Format::eUndefined, ComponentType::Invalid, false}, // R32UI
|
||||||
{vk::Format::eUndefined, ComponentType::Invalid, false}, // ASTC_2D_8X8
|
{vk::Format::eUndefined, ComponentType::Invalid, false}, // ASTC_2D_8X8
|
||||||
{vk::Format::eUndefined, ComponentType::Invalid, false}, // ASTC_2D_8X5
|
{vk::Format::eUndefined, ComponentType::Invalid, false}, // ASTC_2D_8X5
|
||||||
|
|
|
@ -159,6 +159,8 @@ PixelFormat PixelFormatFromRenderTargetFormat(Tegra::RenderTargetFormat format)
|
||||||
return PixelFormat::R32UI;
|
return PixelFormat::R32UI;
|
||||||
case Tegra::RenderTargetFormat::RG32_UINT:
|
case Tegra::RenderTargetFormat::RG32_UINT:
|
||||||
return PixelFormat::RG32UI;
|
return PixelFormat::RG32UI;
|
||||||
|
case Tegra::RenderTargetFormat::RGBX16_FLOAT:
|
||||||
|
return PixelFormat::RGBX16F;
|
||||||
default:
|
default:
|
||||||
LOG_CRITICAL(HW_GPU, "Unimplemented format={}", static_cast<u32>(format));
|
LOG_CRITICAL(HW_GPU, "Unimplemented format={}", static_cast<u32>(format));
|
||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
|
@ -415,6 +417,7 @@ ComponentType ComponentTypeFromRenderTarget(Tegra::RenderTargetFormat format) {
|
||||||
case Tegra::RenderTargetFormat::RG8_SNORM:
|
case Tegra::RenderTargetFormat::RG8_SNORM:
|
||||||
return ComponentType::SNorm;
|
return ComponentType::SNorm;
|
||||||
case Tegra::RenderTargetFormat::RGBA16_FLOAT:
|
case Tegra::RenderTargetFormat::RGBA16_FLOAT:
|
||||||
|
case Tegra::RenderTargetFormat::RGBX16_FLOAT:
|
||||||
case Tegra::RenderTargetFormat::R11G11B10_FLOAT:
|
case Tegra::RenderTargetFormat::R11G11B10_FLOAT:
|
||||||
case Tegra::RenderTargetFormat::RGBA32_FLOAT:
|
case Tegra::RenderTargetFormat::RGBA32_FLOAT:
|
||||||
case Tegra::RenderTargetFormat::RG32_FLOAT:
|
case Tegra::RenderTargetFormat::RG32_FLOAT:
|
||||||
|
|
|
@ -57,36 +57,37 @@ enum class PixelFormat {
|
||||||
RG8U = 39,
|
RG8U = 39,
|
||||||
RG8S = 40,
|
RG8S = 40,
|
||||||
RG32UI = 41,
|
RG32UI = 41,
|
||||||
R32UI = 42,
|
RGBX16F = 42,
|
||||||
ASTC_2D_8X8 = 43,
|
R32UI = 43,
|
||||||
ASTC_2D_8X5 = 44,
|
ASTC_2D_8X8 = 44,
|
||||||
ASTC_2D_5X4 = 45,
|
ASTC_2D_8X5 = 45,
|
||||||
BGRA8_SRGB = 46,
|
ASTC_2D_5X4 = 46,
|
||||||
DXT1_SRGB = 47,
|
BGRA8_SRGB = 47,
|
||||||
DXT23_SRGB = 48,
|
DXT1_SRGB = 48,
|
||||||
DXT45_SRGB = 49,
|
DXT23_SRGB = 49,
|
||||||
BC7U_SRGB = 50,
|
DXT45_SRGB = 50,
|
||||||
ASTC_2D_4X4_SRGB = 51,
|
BC7U_SRGB = 51,
|
||||||
ASTC_2D_8X8_SRGB = 52,
|
ASTC_2D_4X4_SRGB = 52,
|
||||||
ASTC_2D_8X5_SRGB = 53,
|
ASTC_2D_8X8_SRGB = 53,
|
||||||
ASTC_2D_5X4_SRGB = 54,
|
ASTC_2D_8X5_SRGB = 54,
|
||||||
ASTC_2D_5X5 = 55,
|
ASTC_2D_5X4_SRGB = 55,
|
||||||
ASTC_2D_5X5_SRGB = 56,
|
ASTC_2D_5X5 = 56,
|
||||||
ASTC_2D_10X8 = 57,
|
ASTC_2D_5X5_SRGB = 57,
|
||||||
ASTC_2D_10X8_SRGB = 58,
|
ASTC_2D_10X8 = 58,
|
||||||
|
ASTC_2D_10X8_SRGB = 59,
|
||||||
|
|
||||||
MaxColorFormat,
|
MaxColorFormat,
|
||||||
|
|
||||||
// Depth formats
|
// Depth formats
|
||||||
Z32F = 59,
|
Z32F = 60,
|
||||||
Z16 = 60,
|
Z16 = 61,
|
||||||
|
|
||||||
MaxDepthFormat,
|
MaxDepthFormat,
|
||||||
|
|
||||||
// DepthStencil formats
|
// DepthStencil formats
|
||||||
Z24S8 = 61,
|
Z24S8 = 62,
|
||||||
S8Z24 = 62,
|
S8Z24 = 63,
|
||||||
Z32FS8 = 63,
|
Z32FS8 = 64,
|
||||||
|
|
||||||
MaxDepthStencilFormat,
|
MaxDepthStencilFormat,
|
||||||
|
|
||||||
|
@ -166,6 +167,7 @@ constexpr std::array<u32, MaxPixelFormat> compression_factor_shift_table = {{
|
||||||
0, // RG8U
|
0, // RG8U
|
||||||
0, // RG8S
|
0, // RG8S
|
||||||
0, // RG32UI
|
0, // RG32UI
|
||||||
|
0, // RGBX16F
|
||||||
0, // R32UI
|
0, // R32UI
|
||||||
2, // ASTC_2D_8X8
|
2, // ASTC_2D_8X8
|
||||||
2, // ASTC_2D_8X5
|
2, // ASTC_2D_8X5
|
||||||
|
@ -249,6 +251,7 @@ constexpr std::array<u32, MaxPixelFormat> block_width_table = {{
|
||||||
1, // RG8U
|
1, // RG8U
|
||||||
1, // RG8S
|
1, // RG8S
|
||||||
1, // RG32UI
|
1, // RG32UI
|
||||||
|
1, // RGBX16F
|
||||||
1, // R32UI
|
1, // R32UI
|
||||||
8, // ASTC_2D_8X8
|
8, // ASTC_2D_8X8
|
||||||
8, // ASTC_2D_8X5
|
8, // ASTC_2D_8X5
|
||||||
|
@ -324,6 +327,7 @@ constexpr std::array<u32, MaxPixelFormat> block_height_table = {{
|
||||||
1, // RG8U
|
1, // RG8U
|
||||||
1, // RG8S
|
1, // RG8S
|
||||||
1, // RG32UI
|
1, // RG32UI
|
||||||
|
1, // RGBX16F
|
||||||
1, // R32UI
|
1, // R32UI
|
||||||
8, // ASTC_2D_8X8
|
8, // ASTC_2D_8X8
|
||||||
5, // ASTC_2D_8X5
|
5, // ASTC_2D_8X5
|
||||||
|
@ -399,6 +403,7 @@ constexpr std::array<u32, MaxPixelFormat> bpp_table = {{
|
||||||
16, // RG8U
|
16, // RG8U
|
||||||
16, // RG8S
|
16, // RG8S
|
||||||
64, // RG32UI
|
64, // RG32UI
|
||||||
|
64, // RGBX16F
|
||||||
32, // R32UI
|
32, // R32UI
|
||||||
128, // ASTC_2D_8X8
|
128, // ASTC_2D_8X8
|
||||||
128, // ASTC_2D_8X5
|
128, // ASTC_2D_8X5
|
||||||
|
@ -489,6 +494,7 @@ constexpr std::array<SurfaceCompression, MaxPixelFormat> compression_type_table
|
||||||
SurfaceCompression::None, // RG8U
|
SurfaceCompression::None, // RG8U
|
||||||
SurfaceCompression::None, // RG8S
|
SurfaceCompression::None, // RG8S
|
||||||
SurfaceCompression::None, // RG32UI
|
SurfaceCompression::None, // RG32UI
|
||||||
|
SurfaceCompression::None, // RGBX16F
|
||||||
SurfaceCompression::None, // R32UI
|
SurfaceCompression::None, // R32UI
|
||||||
SurfaceCompression::Converted, // ASTC_2D_8X8
|
SurfaceCompression::Converted, // ASTC_2D_8X8
|
||||||
SurfaceCompression::Converted, // ASTC_2D_8X5
|
SurfaceCompression::Converted, // ASTC_2D_8X5
|
||||||
|
|
Loading…
Reference in a new issue