renderer_opengl: Implement RenderTargetFormat::RGBA16_UNORM.
- Used by Breath of the Wild.
This commit is contained in:
		| @@ -47,6 +47,7 @@ u32 RenderTargetBytesPerPixel(RenderTargetFormat format) { | |||||||
|     case RenderTargetFormat::RGBA32_UINT: |     case RenderTargetFormat::RGBA32_UINT: | ||||||
|         return 16; |         return 16; | ||||||
|     case RenderTargetFormat::RGBA16_UINT: |     case RenderTargetFormat::RGBA16_UINT: | ||||||
|  |     case RenderTargetFormat::RGBA16_UNORM: | ||||||
|     case RenderTargetFormat::RGBA16_FLOAT: |     case RenderTargetFormat::RGBA16_FLOAT: | ||||||
|     case RenderTargetFormat::RG32_FLOAT: |     case RenderTargetFormat::RG32_FLOAT: | ||||||
|     case RenderTargetFormat::RG32_UINT: |     case RenderTargetFormat::RG32_UINT: | ||||||
|   | |||||||
| @@ -20,6 +20,7 @@ enum class RenderTargetFormat : u32 { | |||||||
|     NONE = 0x0, |     NONE = 0x0, | ||||||
|     RGBA32_FLOAT = 0xC0, |     RGBA32_FLOAT = 0xC0, | ||||||
|     RGBA32_UINT = 0xC2, |     RGBA32_UINT = 0xC2, | ||||||
|  |     RGBA16_UNORM = 0xC6, | ||||||
|     RGBA16_UINT = 0xC9, |     RGBA16_UINT = 0xC9, | ||||||
|     RGBA16_FLOAT = 0xCA, |     RGBA16_FLOAT = 0xCA, | ||||||
|     RG32_FLOAT = 0xCB, |     RG32_FLOAT = 0xCB, | ||||||
|   | |||||||
| @@ -101,6 +101,7 @@ static constexpr std::array<FormatTuple, SurfaceParams::MaxPixelFormat> tex_form | |||||||
|     {GL_R8, GL_RED, GL_UNSIGNED_BYTE, ComponentType::UNorm, false},                    // R8 |     {GL_R8, GL_RED, GL_UNSIGNED_BYTE, ComponentType::UNorm, false},                    // R8 | ||||||
|     {GL_R8UI, GL_RED_INTEGER, GL_UNSIGNED_BYTE, ComponentType::UInt, false},           // R8UI |     {GL_R8UI, GL_RED_INTEGER, GL_UNSIGNED_BYTE, ComponentType::UInt, false},           // R8UI | ||||||
|     {GL_RGBA16F, GL_RGBA, GL_HALF_FLOAT, ComponentType::Float, false},                 // RGBA16F |     {GL_RGBA16F, GL_RGBA, GL_HALF_FLOAT, ComponentType::Float, false},                 // RGBA16F | ||||||
|  |     {GL_RGBA16, GL_RGBA, GL_UNSIGNED_SHORT, ComponentType::UNorm, false},              // RGBA16U | ||||||
|     {GL_RGBA16UI, GL_RGBA, GL_UNSIGNED_SHORT, ComponentType::UInt, false},             // RGBA16UI |     {GL_RGBA16UI, GL_RGBA, GL_UNSIGNED_SHORT, ComponentType::UInt, false},             // RGBA16UI | ||||||
|     {GL_R11F_G11F_B10F, GL_RGB, GL_UNSIGNED_INT_10F_11F_11F_REV, ComponentType::Float, |     {GL_R11F_G11F_B10F, GL_RGB, GL_UNSIGNED_INT_10F_11F_11F_REV, ComponentType::Float, | ||||||
|      false},                                                                     // R11FG11FB10F |      false},                                                                     // R11FG11FB10F | ||||||
| @@ -247,6 +248,7 @@ static constexpr std::array<void (*)(u32, u32, u32, std::vector<u8>&, Tegra::GPU | |||||||
|         MortonCopy<true, PixelFormat::R8>, |         MortonCopy<true, PixelFormat::R8>, | ||||||
|         MortonCopy<true, PixelFormat::R8UI>, |         MortonCopy<true, PixelFormat::R8UI>, | ||||||
|         MortonCopy<true, PixelFormat::RGBA16F>, |         MortonCopy<true, PixelFormat::RGBA16F>, | ||||||
|  |         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>, | ||||||
| @@ -299,6 +301,7 @@ static constexpr std::array<void (*)(u32, u32, u32, std::vector<u8>&, Tegra::GPU | |||||||
|         MortonCopy<false, PixelFormat::R8>, |         MortonCopy<false, PixelFormat::R8>, | ||||||
|         MortonCopy<false, PixelFormat::R8UI>, |         MortonCopy<false, PixelFormat::R8UI>, | ||||||
|         MortonCopy<false, PixelFormat::RGBA16F>, |         MortonCopy<false, PixelFormat::RGBA16F>, | ||||||
|  |         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>, | ||||||
|   | |||||||
| @@ -31,47 +31,48 @@ struct SurfaceParams { | |||||||
|         R8 = 5, |         R8 = 5, | ||||||
|         R8UI = 6, |         R8UI = 6, | ||||||
|         RGBA16F = 7, |         RGBA16F = 7, | ||||||
|         RGBA16UI = 8, |         RGBA16U = 8, | ||||||
|         R11FG11FB10F = 9, |         RGBA16UI = 9, | ||||||
|         RGBA32UI = 10, |         R11FG11FB10F = 10, | ||||||
|         DXT1 = 11, |         RGBA32UI = 11, | ||||||
|         DXT23 = 12, |         DXT1 = 12, | ||||||
|         DXT45 = 13, |         DXT23 = 13, | ||||||
|         DXN1 = 14, // This is also known as BC4 |         DXT45 = 14, | ||||||
|         DXN2UNORM = 15, |         DXN1 = 15, // This is also known as BC4 | ||||||
|         DXN2SNORM = 16, |         DXN2UNORM = 16, | ||||||
|         BC7U = 17, |         DXN2SNORM = 17, | ||||||
|         ASTC_2D_4X4 = 18, |         BC7U = 18, | ||||||
|         G8R8 = 19, |         ASTC_2D_4X4 = 19, | ||||||
|         BGRA8 = 20, |         G8R8 = 20, | ||||||
|         RGBA32F = 21, |         BGRA8 = 21, | ||||||
|         RG32F = 22, |         RGBA32F = 22, | ||||||
|         R32F = 23, |         RG32F = 23, | ||||||
|         R16F = 24, |         R32F = 24, | ||||||
|         R16UNORM = 25, |         R16F = 25, | ||||||
|         R16S = 26, |         R16UNORM = 26, | ||||||
|         R16UI = 27, |         R16S = 27, | ||||||
|         R16I = 28, |         R16UI = 28, | ||||||
|         RG16 = 29, |         R16I = 29, | ||||||
|         RG16F = 30, |         RG16 = 30, | ||||||
|         RG16UI = 31, |         RG16F = 31, | ||||||
|         RG16I = 32, |         RG16UI = 32, | ||||||
|         RG16S = 33, |         RG16I = 33, | ||||||
|         RGB32F = 34, |         RG16S = 34, | ||||||
|         SRGBA8 = 35, |         RGB32F = 35, | ||||||
|         RG8U = 36, |         SRGBA8 = 36, | ||||||
|         RG8S = 37, |         RG8U = 37, | ||||||
|         RG32UI = 38, |         RG8S = 38, | ||||||
|         R32UI = 39, |         RG32UI = 39, | ||||||
|  |         R32UI = 40, | ||||||
|  |  | ||||||
|         MaxColorFormat, |         MaxColorFormat, | ||||||
|  |  | ||||||
|         // DepthStencil formats |         // DepthStencil formats | ||||||
|         Z24S8 = 40, |         Z24S8 = 41, | ||||||
|         S8Z24 = 41, |         S8Z24 = 42, | ||||||
|         Z32F = 42, |         Z32F = 43, | ||||||
|         Z16 = 43, |         Z16 = 44, | ||||||
|         Z32FS8 = 44, |         Z32FS8 = 45, | ||||||
|  |  | ||||||
|         MaxDepthStencilFormat, |         MaxDepthStencilFormat, | ||||||
|  |  | ||||||
| @@ -117,6 +118,7 @@ struct SurfaceParams { | |||||||
|             1, // R8 |             1, // R8 | ||||||
|             1, // R8UI |             1, // R8UI | ||||||
|             1, // RGBA16F |             1, // RGBA16F | ||||||
|  |             1, // RGBA16U | ||||||
|             1, // RGBA16UI |             1, // RGBA16UI | ||||||
|             1, // R11FG11FB10F |             1, // R11FG11FB10F | ||||||
|             1, // RGBA32UI |             1, // RGBA32UI | ||||||
| @@ -173,6 +175,7 @@ struct SurfaceParams { | |||||||
|             8,   // R8 |             8,   // R8 | ||||||
|             8,   // R8UI |             8,   // R8UI | ||||||
|             64,  // RGBA16F |             64,  // RGBA16F | ||||||
|  |             64,  // RGBA16U | ||||||
|             64,  // RGBA16UI |             64,  // RGBA16UI | ||||||
|             32,  // R11FG11FB10F |             32,  // R11FG11FB10F | ||||||
|             128, // RGBA32UI |             128, // RGBA32UI | ||||||
| @@ -253,6 +256,8 @@ struct SurfaceParams { | |||||||
|             return PixelFormat::A2B10G10R10; |             return PixelFormat::A2B10G10R10; | ||||||
|         case Tegra::RenderTargetFormat::RGBA16_FLOAT: |         case Tegra::RenderTargetFormat::RGBA16_FLOAT: | ||||||
|             return PixelFormat::RGBA16F; |             return PixelFormat::RGBA16F; | ||||||
|  |         case Tegra::RenderTargetFormat::RGBA16_UNORM: | ||||||
|  |             return PixelFormat::RGBA16U; | ||||||
|         case Tegra::RenderTargetFormat::RGBA16_UINT: |         case Tegra::RenderTargetFormat::RGBA16_UINT: | ||||||
|             return PixelFormat::RGBA16UI; |             return PixelFormat::RGBA16UI; | ||||||
|         case Tegra::RenderTargetFormat::RGBA32_FLOAT: |         case Tegra::RenderTargetFormat::RGBA32_FLOAT: | ||||||
| @@ -469,6 +474,7 @@ struct SurfaceParams { | |||||||
|         case Tegra::RenderTargetFormat::R16_UNORM: |         case Tegra::RenderTargetFormat::R16_UNORM: | ||||||
|         case Tegra::RenderTargetFormat::B5G6R5_UNORM: |         case Tegra::RenderTargetFormat::B5G6R5_UNORM: | ||||||
|         case Tegra::RenderTargetFormat::RG8_UNORM: |         case Tegra::RenderTargetFormat::RG8_UNORM: | ||||||
|  |         case Tegra::RenderTargetFormat::RGBA16_UNORM: | ||||||
|             return ComponentType::UNorm; |             return ComponentType::UNorm; | ||||||
|         case Tegra::RenderTargetFormat::RGBA8_SNORM: |         case Tegra::RenderTargetFormat::RGBA8_SNORM: | ||||||
|         case Tegra::RenderTargetFormat::RG16_SNORM: |         case Tegra::RenderTargetFormat::RG16_SNORM: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user