mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	Improve msvc codegen for hot-path array LUTs
In some constexpr functions, msvc is building the LUT at runtime (pushing each element onto the stack) out of an abundance of caution. Moving the arrays into be file-scoped constexpr's avoids this and turns the functions into simple look-ups as intended.
This commit is contained in:
		
							parent
							
								
									465f486160
								
							
						
					
					
						commit
						7853e6b5d4
					
				| @ -125,6 +125,75 @@ enum class SurfaceTarget { | ||||
|     TextureCubeArray, | ||||
| }; | ||||
| 
 | ||||
| constexpr std::array<u32, MaxPixelFormat> compression_factor_table = {{ | ||||
|     1, // ABGR8U
 | ||||
|     1, // ABGR8S
 | ||||
|     1, // ABGR8UI
 | ||||
|     1, // B5G6R5U
 | ||||
|     1, // A2B10G10R10U
 | ||||
|     1, // A1B5G5R5U
 | ||||
|     1, // R8U
 | ||||
|     1, // R8UI
 | ||||
|     1, // RGBA16F
 | ||||
|     1, // RGBA16U
 | ||||
|     1, // RGBA16UI
 | ||||
|     1, // R11FG11FB10F
 | ||||
|     1, // RGBA32UI
 | ||||
|     4, // DXT1
 | ||||
|     4, // DXT23
 | ||||
|     4, // DXT45
 | ||||
|     4, // DXN1
 | ||||
|     4, // DXN2UNORM
 | ||||
|     4, // DXN2SNORM
 | ||||
|     4, // BC7U
 | ||||
|     4, // BC6H_UF16
 | ||||
|     4, // BC6H_SF16
 | ||||
|     4, // ASTC_2D_4X4
 | ||||
|     1, // G8R8U
 | ||||
|     1, // G8R8S
 | ||||
|     1, // BGRA8
 | ||||
|     1, // RGBA32F
 | ||||
|     1, // RG32F
 | ||||
|     1, // R32F
 | ||||
|     1, // R16F
 | ||||
|     1, // R16U
 | ||||
|     1, // R16S
 | ||||
|     1, // R16UI
 | ||||
|     1, // R16I
 | ||||
|     1, // RG16
 | ||||
|     1, // RG16F
 | ||||
|     1, // RG16UI
 | ||||
|     1, // RG16I
 | ||||
|     1, // RG16S
 | ||||
|     1, // RGB32F
 | ||||
|     1, // RGBA8_SRGB
 | ||||
|     1, // RG8U
 | ||||
|     1, // RG8S
 | ||||
|     1, // RG32UI
 | ||||
|     1, // R32UI
 | ||||
|     4, // ASTC_2D_8X8
 | ||||
|     4, // ASTC_2D_8X5
 | ||||
|     4, // ASTC_2D_5X4
 | ||||
|     1, // BGRA8_SRGB
 | ||||
|     4, // DXT1_SRGB
 | ||||
|     4, // DXT23_SRGB
 | ||||
|     4, // DXT45_SRGB
 | ||||
|     4, // BC7U_SRGB
 | ||||
|     4, // ASTC_2D_4X4_SRGB
 | ||||
|     4, // ASTC_2D_8X8_SRGB
 | ||||
|     4, // ASTC_2D_8X5_SRGB
 | ||||
|     4, // ASTC_2D_5X4_SRGB
 | ||||
|     4, // ASTC_2D_5X5
 | ||||
|     4, // ASTC_2D_5X5_SRGB
 | ||||
|     4, // ASTC_2D_10X8
 | ||||
|     4, // ASTC_2D_10X8_SRGB
 | ||||
|     1, // Z32F
 | ||||
|     1, // Z16
 | ||||
|     1, // Z24S8
 | ||||
|     1, // S8Z24
 | ||||
|     1, // Z32FS8
 | ||||
| }}; | ||||
| 
 | ||||
| /**
 | ||||
|  * Gets the compression factor for the specified PixelFormat. This applies to just the | ||||
|  * "compressed width" and "compressed height", not the overall compression factor of a | ||||
| @ -135,304 +204,237 @@ static constexpr u32 GetCompressionFactor(PixelFormat format) { | ||||
|     if (format == PixelFormat::Invalid) | ||||
|         return 0; | ||||
| 
 | ||||
|     constexpr std::array<u32, MaxPixelFormat> compression_factor_table = {{ | ||||
|         1, // ABGR8U
 | ||||
|         1, // ABGR8S
 | ||||
|         1, // ABGR8UI
 | ||||
|         1, // B5G6R5U
 | ||||
|         1, // A2B10G10R10U
 | ||||
|         1, // A1B5G5R5U
 | ||||
|         1, // R8U
 | ||||
|         1, // R8UI
 | ||||
|         1, // RGBA16F
 | ||||
|         1, // RGBA16U
 | ||||
|         1, // RGBA16UI
 | ||||
|         1, // R11FG11FB10F
 | ||||
|         1, // RGBA32UI
 | ||||
|         4, // DXT1
 | ||||
|         4, // DXT23
 | ||||
|         4, // DXT45
 | ||||
|         4, // DXN1
 | ||||
|         4, // DXN2UNORM
 | ||||
|         4, // DXN2SNORM
 | ||||
|         4, // BC7U
 | ||||
|         4, // BC6H_UF16
 | ||||
|         4, // BC6H_SF16
 | ||||
|         4, // ASTC_2D_4X4
 | ||||
|         1, // G8R8U
 | ||||
|         1, // G8R8S
 | ||||
|         1, // BGRA8
 | ||||
|         1, // RGBA32F
 | ||||
|         1, // RG32F
 | ||||
|         1, // R32F
 | ||||
|         1, // R16F
 | ||||
|         1, // R16U
 | ||||
|         1, // R16S
 | ||||
|         1, // R16UI
 | ||||
|         1, // R16I
 | ||||
|         1, // RG16
 | ||||
|         1, // RG16F
 | ||||
|         1, // RG16UI
 | ||||
|         1, // RG16I
 | ||||
|         1, // RG16S
 | ||||
|         1, // RGB32F
 | ||||
|         1, // RGBA8_SRGB
 | ||||
|         1, // RG8U
 | ||||
|         1, // RG8S
 | ||||
|         1, // RG32UI
 | ||||
|         1, // R32UI
 | ||||
|         4, // ASTC_2D_8X8
 | ||||
|         4, // ASTC_2D_8X5
 | ||||
|         4, // ASTC_2D_5X4
 | ||||
|         1, // BGRA8_SRGB
 | ||||
|         4, // DXT1_SRGB
 | ||||
|         4, // DXT23_SRGB
 | ||||
|         4, // DXT45_SRGB
 | ||||
|         4, // BC7U_SRGB
 | ||||
|         4, // ASTC_2D_4X4_SRGB
 | ||||
|         4, // ASTC_2D_8X8_SRGB
 | ||||
|         4, // ASTC_2D_8X5_SRGB
 | ||||
|         4, // ASTC_2D_5X4_SRGB
 | ||||
|         4, // ASTC_2D_5X5
 | ||||
|         4, // ASTC_2D_5X5_SRGB
 | ||||
|         4, // ASTC_2D_10X8
 | ||||
|         4, // ASTC_2D_10X8_SRGB
 | ||||
|         1, // Z32F
 | ||||
|         1, // Z16
 | ||||
|         1, // Z24S8
 | ||||
|         1, // S8Z24
 | ||||
|         1, // Z32FS8
 | ||||
|     }}; | ||||
| 
 | ||||
|     ASSERT(static_cast<std::size_t>(format) < compression_factor_table.size()); | ||||
|     return compression_factor_table[static_cast<std::size_t>(format)]; | ||||
| } | ||||
| 
 | ||||
| constexpr std::array<u32, MaxPixelFormat> block_width_table = {{ | ||||
|     1,  // ABGR8U
 | ||||
|     1,  // ABGR8S
 | ||||
|     1,  // ABGR8UI
 | ||||
|     1,  // B5G6R5U
 | ||||
|     1,  // A2B10G10R10U
 | ||||
|     1,  // A1B5G5R5U
 | ||||
|     1,  // R8U
 | ||||
|     1,  // R8UI
 | ||||
|     1,  // RGBA16F
 | ||||
|     1,  // RGBA16U
 | ||||
|     1,  // RGBA16UI
 | ||||
|     1,  // R11FG11FB10F
 | ||||
|     1,  // RGBA32UI
 | ||||
|     4,  // DXT1
 | ||||
|     4,  // DXT23
 | ||||
|     4,  // DXT45
 | ||||
|     4,  // DXN1
 | ||||
|     4,  // DXN2UNORM
 | ||||
|     4,  // DXN2SNORM
 | ||||
|     4,  // BC7U
 | ||||
|     4,  // BC6H_UF16
 | ||||
|     4,  // BC6H_SF16
 | ||||
|     4,  // ASTC_2D_4X4
 | ||||
|     1,  // G8R8U
 | ||||
|     1,  // G8R8S
 | ||||
|     1,  // BGRA8
 | ||||
|     1,  // RGBA32F
 | ||||
|     1,  // RG32F
 | ||||
|     1,  // R32F
 | ||||
|     1,  // R16F
 | ||||
|     1,  // R16U
 | ||||
|     1,  // R16S
 | ||||
|     1,  // R16UI
 | ||||
|     1,  // R16I
 | ||||
|     1,  // RG16
 | ||||
|     1,  // RG16F
 | ||||
|     1,  // RG16UI
 | ||||
|     1,  // RG16I
 | ||||
|     1,  // RG16S
 | ||||
|     1,  // RGB32F
 | ||||
|     1,  // RGBA8_SRGB
 | ||||
|     1,  // RG8U
 | ||||
|     1,  // RG8S
 | ||||
|     1,  // RG32UI
 | ||||
|     1,  // R32UI
 | ||||
|     8,  // ASTC_2D_8X8
 | ||||
|     8,  // ASTC_2D_8X5
 | ||||
|     5,  // ASTC_2D_5X4
 | ||||
|     1,  // BGRA8_SRGB
 | ||||
|     4,  // DXT1_SRGB
 | ||||
|     4,  // DXT23_SRGB
 | ||||
|     4,  // DXT45_SRGB
 | ||||
|     4,  // BC7U_SRGB
 | ||||
|     4,  // ASTC_2D_4X4_SRGB
 | ||||
|     8,  // ASTC_2D_8X8_SRGB
 | ||||
|     8,  // ASTC_2D_8X5_SRGB
 | ||||
|     5,  // ASTC_2D_5X4_SRGB
 | ||||
|     5,  // ASTC_2D_5X5
 | ||||
|     5,  // ASTC_2D_5X5_SRGB
 | ||||
|     10, // ASTC_2D_10X8
 | ||||
|     10, // ASTC_2D_10X8_SRGB
 | ||||
|     1,  // Z32F
 | ||||
|     1,  // Z16
 | ||||
|     1,  // Z24S8
 | ||||
|     1,  // S8Z24
 | ||||
|     1,  // Z32FS8
 | ||||
| }}; | ||||
| 
 | ||||
| static constexpr u32 GetDefaultBlockWidth(PixelFormat format) { | ||||
|     if (format == PixelFormat::Invalid) | ||||
|         return 0; | ||||
|     constexpr std::array<u32, MaxPixelFormat> block_width_table = {{ | ||||
|         1,  // ABGR8U
 | ||||
|         1,  // ABGR8S
 | ||||
|         1,  // ABGR8UI
 | ||||
|         1,  // B5G6R5U
 | ||||
|         1,  // A2B10G10R10U
 | ||||
|         1,  // A1B5G5R5U
 | ||||
|         1,  // R8U
 | ||||
|         1,  // R8UI
 | ||||
|         1,  // RGBA16F
 | ||||
|         1,  // RGBA16U
 | ||||
|         1,  // RGBA16UI
 | ||||
|         1,  // R11FG11FB10F
 | ||||
|         1,  // RGBA32UI
 | ||||
|         4,  // DXT1
 | ||||
|         4,  // DXT23
 | ||||
|         4,  // DXT45
 | ||||
|         4,  // DXN1
 | ||||
|         4,  // DXN2UNORM
 | ||||
|         4,  // DXN2SNORM
 | ||||
|         4,  // BC7U
 | ||||
|         4,  // BC6H_UF16
 | ||||
|         4,  // BC6H_SF16
 | ||||
|         4,  // ASTC_2D_4X4
 | ||||
|         1,  // G8R8U
 | ||||
|         1,  // G8R8S
 | ||||
|         1,  // BGRA8
 | ||||
|         1,  // RGBA32F
 | ||||
|         1,  // RG32F
 | ||||
|         1,  // R32F
 | ||||
|         1,  // R16F
 | ||||
|         1,  // R16U
 | ||||
|         1,  // R16S
 | ||||
|         1,  // R16UI
 | ||||
|         1,  // R16I
 | ||||
|         1,  // RG16
 | ||||
|         1,  // RG16F
 | ||||
|         1,  // RG16UI
 | ||||
|         1,  // RG16I
 | ||||
|         1,  // RG16S
 | ||||
|         1,  // RGB32F
 | ||||
|         1,  // RGBA8_SRGB
 | ||||
|         1,  // RG8U
 | ||||
|         1,  // RG8S
 | ||||
|         1,  // RG32UI
 | ||||
|         1,  // R32UI
 | ||||
|         8,  // ASTC_2D_8X8
 | ||||
|         8,  // ASTC_2D_8X5
 | ||||
|         5,  // ASTC_2D_5X4
 | ||||
|         1,  // BGRA8_SRGB
 | ||||
|         4,  // DXT1_SRGB
 | ||||
|         4,  // DXT23_SRGB
 | ||||
|         4,  // DXT45_SRGB
 | ||||
|         4,  // BC7U_SRGB
 | ||||
|         4,  // ASTC_2D_4X4_SRGB
 | ||||
|         8,  // ASTC_2D_8X8_SRGB
 | ||||
|         8,  // ASTC_2D_8X5_SRGB
 | ||||
|         5,  // ASTC_2D_5X4_SRGB
 | ||||
|         5,  // ASTC_2D_5X5
 | ||||
|         5,  // ASTC_2D_5X5_SRGB
 | ||||
|         10, // ASTC_2D_10X8
 | ||||
|         10, // ASTC_2D_10X8_SRGB
 | ||||
|         1,  // Z32F
 | ||||
|         1,  // Z16
 | ||||
|         1,  // Z24S8
 | ||||
|         1,  // S8Z24
 | ||||
|         1,  // Z32FS8
 | ||||
|     }}; | ||||
| 
 | ||||
|     ASSERT(static_cast<std::size_t>(format) < block_width_table.size()); | ||||
|     return block_width_table[static_cast<std::size_t>(format)]; | ||||
| } | ||||
| 
 | ||||
| constexpr std::array<u32, MaxPixelFormat> block_height_table = {{ | ||||
|     1, // ABGR8U
 | ||||
|     1, // ABGR8S
 | ||||
|     1, // ABGR8UI
 | ||||
|     1, // B5G6R5U
 | ||||
|     1, // A2B10G10R10U
 | ||||
|     1, // A1B5G5R5U
 | ||||
|     1, // R8U
 | ||||
|     1, // R8UI
 | ||||
|     1, // RGBA16F
 | ||||
|     1, // RGBA16U
 | ||||
|     1, // RGBA16UI
 | ||||
|     1, // R11FG11FB10F
 | ||||
|     1, // RGBA32UI
 | ||||
|     4, // DXT1
 | ||||
|     4, // DXT23
 | ||||
|     4, // DXT45
 | ||||
|     4, // DXN1
 | ||||
|     4, // DXN2UNORM
 | ||||
|     4, // DXN2SNORM
 | ||||
|     4, // BC7U
 | ||||
|     4, // BC6H_UF16
 | ||||
|     4, // BC6H_SF16
 | ||||
|     4, // ASTC_2D_4X4
 | ||||
|     1, // G8R8U
 | ||||
|     1, // G8R8S
 | ||||
|     1, // BGRA8
 | ||||
|     1, // RGBA32F
 | ||||
|     1, // RG32F
 | ||||
|     1, // R32F
 | ||||
|     1, // R16F
 | ||||
|     1, // R16U
 | ||||
|     1, // R16S
 | ||||
|     1, // R16UI
 | ||||
|     1, // R16I
 | ||||
|     1, // RG16
 | ||||
|     1, // RG16F
 | ||||
|     1, // RG16UI
 | ||||
|     1, // RG16I
 | ||||
|     1, // RG16S
 | ||||
|     1, // RGB32F
 | ||||
|     1, // RGBA8_SRGB
 | ||||
|     1, // RG8U
 | ||||
|     1, // RG8S
 | ||||
|     1, // RG32UI
 | ||||
|     1, // R32UI
 | ||||
|     8, // ASTC_2D_8X8
 | ||||
|     5, // ASTC_2D_8X5
 | ||||
|     4, // ASTC_2D_5X4
 | ||||
|     1, // BGRA8_SRGB
 | ||||
|     4, // DXT1_SRGB
 | ||||
|     4, // DXT23_SRGB
 | ||||
|     4, // DXT45_SRGB
 | ||||
|     4, // BC7U_SRGB
 | ||||
|     4, // ASTC_2D_4X4_SRGB
 | ||||
|     8, // ASTC_2D_8X8_SRGB
 | ||||
|     5, // ASTC_2D_8X5_SRGB
 | ||||
|     4, // ASTC_2D_5X4_SRGB
 | ||||
|     5, // ASTC_2D_5X5
 | ||||
|     5, // ASTC_2D_5X5_SRGB
 | ||||
|     8, // ASTC_2D_10X8
 | ||||
|     8, // ASTC_2D_10X8_SRGB
 | ||||
|     1, // Z32F
 | ||||
|     1, // Z16
 | ||||
|     1, // Z24S8
 | ||||
|     1, // S8Z24
 | ||||
|     1, // Z32FS8
 | ||||
| }}; | ||||
| 
 | ||||
| static constexpr u32 GetDefaultBlockHeight(PixelFormat format) { | ||||
|     if (format == PixelFormat::Invalid) | ||||
|         return 0; | ||||
| 
 | ||||
|     constexpr std::array<u32, MaxPixelFormat> block_height_table = {{ | ||||
|         1, // ABGR8U
 | ||||
|         1, // ABGR8S
 | ||||
|         1, // ABGR8UI
 | ||||
|         1, // B5G6R5U
 | ||||
|         1, // A2B10G10R10U
 | ||||
|         1, // A1B5G5R5U
 | ||||
|         1, // R8U
 | ||||
|         1, // R8UI
 | ||||
|         1, // RGBA16F
 | ||||
|         1, // RGBA16U
 | ||||
|         1, // RGBA16UI
 | ||||
|         1, // R11FG11FB10F
 | ||||
|         1, // RGBA32UI
 | ||||
|         4, // DXT1
 | ||||
|         4, // DXT23
 | ||||
|         4, // DXT45
 | ||||
|         4, // DXN1
 | ||||
|         4, // DXN2UNORM
 | ||||
|         4, // DXN2SNORM
 | ||||
|         4, // BC7U
 | ||||
|         4, // BC6H_UF16
 | ||||
|         4, // BC6H_SF16
 | ||||
|         4, // ASTC_2D_4X4
 | ||||
|         1, // G8R8U
 | ||||
|         1, // G8R8S
 | ||||
|         1, // BGRA8
 | ||||
|         1, // RGBA32F
 | ||||
|         1, // RG32F
 | ||||
|         1, // R32F
 | ||||
|         1, // R16F
 | ||||
|         1, // R16U
 | ||||
|         1, // R16S
 | ||||
|         1, // R16UI
 | ||||
|         1, // R16I
 | ||||
|         1, // RG16
 | ||||
|         1, // RG16F
 | ||||
|         1, // RG16UI
 | ||||
|         1, // RG16I
 | ||||
|         1, // RG16S
 | ||||
|         1, // RGB32F
 | ||||
|         1, // RGBA8_SRGB
 | ||||
|         1, // RG8U
 | ||||
|         1, // RG8S
 | ||||
|         1, // RG32UI
 | ||||
|         1, // R32UI
 | ||||
|         8, // ASTC_2D_8X8
 | ||||
|         5, // ASTC_2D_8X5
 | ||||
|         4, // ASTC_2D_5X4
 | ||||
|         1, // BGRA8_SRGB
 | ||||
|         4, // DXT1_SRGB
 | ||||
|         4, // DXT23_SRGB
 | ||||
|         4, // DXT45_SRGB
 | ||||
|         4, // BC7U_SRGB
 | ||||
|         4, // ASTC_2D_4X4_SRGB
 | ||||
|         8, // ASTC_2D_8X8_SRGB
 | ||||
|         5, // ASTC_2D_8X5_SRGB
 | ||||
|         4, // ASTC_2D_5X4_SRGB
 | ||||
|         5, // ASTC_2D_5X5
 | ||||
|         5, // ASTC_2D_5X5_SRGB
 | ||||
|         8, // ASTC_2D_10X8
 | ||||
|         8, // ASTC_2D_10X8_SRGB
 | ||||
|         1, // Z32F
 | ||||
|         1, // Z16
 | ||||
|         1, // Z24S8
 | ||||
|         1, // S8Z24
 | ||||
|         1, // Z32FS8
 | ||||
|     }}; | ||||
| 
 | ||||
|     ASSERT(static_cast<std::size_t>(format) < block_height_table.size()); | ||||
|     return block_height_table[static_cast<std::size_t>(format)]; | ||||
| } | ||||
| 
 | ||||
| constexpr std::array<u32, MaxPixelFormat> bpp_table = {{ | ||||
|     32,  // ABGR8U
 | ||||
|     32,  // ABGR8S
 | ||||
|     32,  // ABGR8UI
 | ||||
|     16,  // B5G6R5U
 | ||||
|     32,  // A2B10G10R10U
 | ||||
|     16,  // A1B5G5R5U
 | ||||
|     8,   // R8U
 | ||||
|     8,   // R8UI
 | ||||
|     64,  // RGBA16F
 | ||||
|     64,  // RGBA16U
 | ||||
|     64,  // RGBA16UI
 | ||||
|     32,  // R11FG11FB10F
 | ||||
|     128, // RGBA32UI
 | ||||
|     64,  // DXT1
 | ||||
|     128, // DXT23
 | ||||
|     128, // DXT45
 | ||||
|     64,  // DXN1
 | ||||
|     128, // DXN2UNORM
 | ||||
|     128, // DXN2SNORM
 | ||||
|     128, // BC7U
 | ||||
|     128, // BC6H_UF16
 | ||||
|     128, // BC6H_SF16
 | ||||
|     128, // ASTC_2D_4X4
 | ||||
|     16,  // G8R8U
 | ||||
|     16,  // G8R8S
 | ||||
|     32,  // BGRA8
 | ||||
|     128, // RGBA32F
 | ||||
|     64,  // RG32F
 | ||||
|     32,  // R32F
 | ||||
|     16,  // R16F
 | ||||
|     16,  // R16U
 | ||||
|     16,  // R16S
 | ||||
|     16,  // R16UI
 | ||||
|     16,  // R16I
 | ||||
|     32,  // RG16
 | ||||
|     32,  // RG16F
 | ||||
|     32,  // RG16UI
 | ||||
|     32,  // RG16I
 | ||||
|     32,  // RG16S
 | ||||
|     96,  // RGB32F
 | ||||
|     32,  // RGBA8_SRGB
 | ||||
|     16,  // RG8U
 | ||||
|     16,  // RG8S
 | ||||
|     64,  // RG32UI
 | ||||
|     32,  // R32UI
 | ||||
|     128, // ASTC_2D_8X8
 | ||||
|     128, // ASTC_2D_8X5
 | ||||
|     128, // ASTC_2D_5X4
 | ||||
|     32,  // BGRA8_SRGB
 | ||||
|     64,  // DXT1_SRGB
 | ||||
|     128, // DXT23_SRGB
 | ||||
|     128, // DXT45_SRGB
 | ||||
|     128, // BC7U
 | ||||
|     128, // ASTC_2D_4X4_SRGB
 | ||||
|     128, // ASTC_2D_8X8_SRGB
 | ||||
|     128, // ASTC_2D_8X5_SRGB
 | ||||
|     128, // ASTC_2D_5X4_SRGB
 | ||||
|     128, // ASTC_2D_5X5
 | ||||
|     128, // ASTC_2D_5X5_SRGB
 | ||||
|     128, // ASTC_2D_10X8
 | ||||
|     128, // ASTC_2D_10X8_SRGB
 | ||||
|     32,  // Z32F
 | ||||
|     16,  // Z16
 | ||||
|     32,  // Z24S8
 | ||||
|     32,  // S8Z24
 | ||||
|     64,  // Z32FS8
 | ||||
| }}; | ||||
| 
 | ||||
| static constexpr u32 GetFormatBpp(PixelFormat format) { | ||||
|     if (format == PixelFormat::Invalid) | ||||
|         return 0; | ||||
| 
 | ||||
|     constexpr std::array<u32, MaxPixelFormat> bpp_table = {{ | ||||
|         32,  // ABGR8U
 | ||||
|         32,  // ABGR8S
 | ||||
|         32,  // ABGR8UI
 | ||||
|         16,  // B5G6R5U
 | ||||
|         32,  // A2B10G10R10U
 | ||||
|         16,  // A1B5G5R5U
 | ||||
|         8,   // R8U
 | ||||
|         8,   // R8UI
 | ||||
|         64,  // RGBA16F
 | ||||
|         64,  // RGBA16U
 | ||||
|         64,  // RGBA16UI
 | ||||
|         32,  // R11FG11FB10F
 | ||||
|         128, // RGBA32UI
 | ||||
|         64,  // DXT1
 | ||||
|         128, // DXT23
 | ||||
|         128, // DXT45
 | ||||
|         64,  // DXN1
 | ||||
|         128, // DXN2UNORM
 | ||||
|         128, // DXN2SNORM
 | ||||
|         128, // BC7U
 | ||||
|         128, // BC6H_UF16
 | ||||
|         128, // BC6H_SF16
 | ||||
|         128, // ASTC_2D_4X4
 | ||||
|         16,  // G8R8U
 | ||||
|         16,  // G8R8S
 | ||||
|         32,  // BGRA8
 | ||||
|         128, // RGBA32F
 | ||||
|         64,  // RG32F
 | ||||
|         32,  // R32F
 | ||||
|         16,  // R16F
 | ||||
|         16,  // R16U
 | ||||
|         16,  // R16S
 | ||||
|         16,  // R16UI
 | ||||
|         16,  // R16I
 | ||||
|         32,  // RG16
 | ||||
|         32,  // RG16F
 | ||||
|         32,  // RG16UI
 | ||||
|         32,  // RG16I
 | ||||
|         32,  // RG16S
 | ||||
|         96,  // RGB32F
 | ||||
|         32,  // RGBA8_SRGB
 | ||||
|         16,  // RG8U
 | ||||
|         16,  // RG8S
 | ||||
|         64,  // RG32UI
 | ||||
|         32,  // R32UI
 | ||||
|         128, // ASTC_2D_8X8
 | ||||
|         128, // ASTC_2D_8X5
 | ||||
|         128, // ASTC_2D_5X4
 | ||||
|         32,  // BGRA8_SRGB
 | ||||
|         64,  // DXT1_SRGB
 | ||||
|         128, // DXT23_SRGB
 | ||||
|         128, // DXT45_SRGB
 | ||||
|         128, // BC7U
 | ||||
|         128, // ASTC_2D_4X4_SRGB
 | ||||
|         128, // ASTC_2D_8X8_SRGB
 | ||||
|         128, // ASTC_2D_8X5_SRGB
 | ||||
|         128, // ASTC_2D_5X4_SRGB
 | ||||
|         128, // ASTC_2D_5X5
 | ||||
|         128, // ASTC_2D_5X5_SRGB
 | ||||
|         128, // ASTC_2D_10X8
 | ||||
|         128, // ASTC_2D_10X8_SRGB
 | ||||
|         32,  // Z32F
 | ||||
|         16,  // Z16
 | ||||
|         32,  // Z24S8
 | ||||
|         32,  // S8Z24
 | ||||
|         64,  // Z32FS8
 | ||||
|     }}; | ||||
| 
 | ||||
|     ASSERT(static_cast<std::size_t>(format) < bpp_table.size()); | ||||
|     return bpp_table[static_cast<std::size_t>(format)]; | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 heapo
						heapo