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