mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu.git
				synced 2025-05-12 00:45:25 +00:00 
			
		
		
		
	Implement R8_UINT RenderTargetFormat & PixelFormat (#1014)
- Used by Go Vacation
This commit is contained in:
		
							parent
							
								
									403dfd68fc
								
							
						
					
					
						commit
						224071a652
					
				| @ -70,6 +70,7 @@ u32 RenderTargetBytesPerPixel(RenderTargetFormat format) { | |||||||
|     case RenderTargetFormat::RG8_SNORM: |     case RenderTargetFormat::RG8_SNORM: | ||||||
|         return 2; |         return 2; | ||||||
|     case RenderTargetFormat::R8_UNORM: |     case RenderTargetFormat::R8_UNORM: | ||||||
|  |     case RenderTargetFormat::R8_UINT: | ||||||
|         return 1; |         return 1; | ||||||
|     default: |     default: | ||||||
|         UNIMPLEMENTED_MSG("Unimplemented render target format {}", static_cast<u32>(format)); |         UNIMPLEMENTED_MSG("Unimplemented render target format {}", static_cast<u32>(format)); | ||||||
|  | |||||||
| @ -42,6 +42,7 @@ enum class RenderTargetFormat : u32 { | |||||||
|     R16_UINT = 0xF1, |     R16_UINT = 0xF1, | ||||||
|     R16_FLOAT = 0xF2, |     R16_FLOAT = 0xF2, | ||||||
|     R8_UNORM = 0xF3, |     R8_UNORM = 0xF3, | ||||||
|  |     R8_UINT = 0xF6, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| enum class DepthFormat : u32 { | enum class DepthFormat : u32 { | ||||||
|  | |||||||
| @ -99,6 +99,7 @@ static constexpr std::array<FormatTuple, SurfaceParams::MaxPixelFormat> tex_form | |||||||
|      false}, // A2B10G10R10
 |      false}, // A2B10G10R10
 | ||||||
|     {GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_SHORT_1_5_5_5_REV, ComponentType::UNorm, false}, // A1B5G5R5
 |     {GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_SHORT_1_5_5_5_REV, ComponentType::UNorm, false}, // A1B5G5R5
 | ||||||
|     {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_RGBA16F, GL_RGBA, GL_HALF_FLOAT, ComponentType::Float, false},                 // RGBA16F
 |     {GL_RGBA16F, GL_RGBA, GL_HALF_FLOAT, ComponentType::Float, false},                 // RGBA16F
 | ||||||
|     {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
 | ||||||
| @ -233,26 +234,27 @@ void MortonCopy(u32 stride, u32 block_height, u32 height, std::vector<u8>& gl_bu | |||||||
| static constexpr std::array<void (*)(u32, u32, u32, std::vector<u8>&, Tegra::GPUVAddr), | static constexpr std::array<void (*)(u32, u32, u32, std::vector<u8>&, Tegra::GPUVAddr), | ||||||
|                             SurfaceParams::MaxPixelFormat> |                             SurfaceParams::MaxPixelFormat> | ||||||
|     morton_to_gl_fns = { |     morton_to_gl_fns = { | ||||||
|         MortonCopy<true, PixelFormat::ABGR8U>,      MortonCopy<true, PixelFormat::ABGR8S>, |         MortonCopy<true, PixelFormat::ABGR8U>,       MortonCopy<true, PixelFormat::ABGR8S>, | ||||||
|         MortonCopy<true, PixelFormat::B5G6R5>,      MortonCopy<true, PixelFormat::A2B10G10R10>, |         MortonCopy<true, PixelFormat::B5G6R5>,       MortonCopy<true, PixelFormat::A2B10G10R10>, | ||||||
|         MortonCopy<true, PixelFormat::A1B5G5R5>,    MortonCopy<true, PixelFormat::R8>, |         MortonCopy<true, PixelFormat::A1B5G5R5>,     MortonCopy<true, PixelFormat::R8>, | ||||||
|         MortonCopy<true, PixelFormat::RGBA16F>,     MortonCopy<true, PixelFormat::R11FG11FB10F>, |         MortonCopy<true, PixelFormat::R8UI>,         MortonCopy<true, PixelFormat::RGBA16F>, | ||||||
|         MortonCopy<true, PixelFormat::RGBA32UI>,    MortonCopy<true, PixelFormat::DXT1>, |         MortonCopy<true, PixelFormat::R11FG11FB10F>, MortonCopy<true, PixelFormat::RGBA32UI>, | ||||||
|         MortonCopy<true, PixelFormat::DXT23>,       MortonCopy<true, PixelFormat::DXT45>, |         MortonCopy<true, PixelFormat::DXT1>,         MortonCopy<true, PixelFormat::DXT23>, | ||||||
|         MortonCopy<true, PixelFormat::DXN1>,        MortonCopy<true, PixelFormat::DXN2UNORM>, |         MortonCopy<true, PixelFormat::DXT45>,        MortonCopy<true, PixelFormat::DXN1>, | ||||||
|         MortonCopy<true, PixelFormat::DXN2SNORM>,   MortonCopy<true, PixelFormat::BC7U>, |         MortonCopy<true, PixelFormat::DXN2UNORM>,    MortonCopy<true, PixelFormat::DXN2SNORM>, | ||||||
|         MortonCopy<true, PixelFormat::ASTC_2D_4X4>, MortonCopy<true, PixelFormat::G8R8>, |         MortonCopy<true, PixelFormat::BC7U>,         MortonCopy<true, PixelFormat::ASTC_2D_4X4>, | ||||||
|         MortonCopy<true, PixelFormat::BGRA8>,       MortonCopy<true, PixelFormat::RGBA32F>, |         MortonCopy<true, PixelFormat::G8R8>,         MortonCopy<true, PixelFormat::BGRA8>, | ||||||
|         MortonCopy<true, PixelFormat::RG32F>,       MortonCopy<true, PixelFormat::R32F>, |         MortonCopy<true, PixelFormat::RGBA32F>,      MortonCopy<true, PixelFormat::RG32F>, | ||||||
|         MortonCopy<true, PixelFormat::R16F>,        MortonCopy<true, PixelFormat::R16UNORM>, |         MortonCopy<true, PixelFormat::R32F>,         MortonCopy<true, PixelFormat::R16F>, | ||||||
|         MortonCopy<true, PixelFormat::R16S>,        MortonCopy<true, PixelFormat::R16UI>, |         MortonCopy<true, PixelFormat::R16UNORM>,     MortonCopy<true, PixelFormat::R16S>, | ||||||
|         MortonCopy<true, PixelFormat::R16I>,        MortonCopy<true, PixelFormat::RG16>, |         MortonCopy<true, PixelFormat::R16UI>,        MortonCopy<true, PixelFormat::R16I>, | ||||||
|         MortonCopy<true, PixelFormat::RG16F>,       MortonCopy<true, PixelFormat::RG16UI>, |         MortonCopy<true, PixelFormat::RG16>,         MortonCopy<true, PixelFormat::RG16F>, | ||||||
|         MortonCopy<true, PixelFormat::RG16I>,       MortonCopy<true, PixelFormat::RG16S>, |         MortonCopy<true, PixelFormat::RG16UI>,       MortonCopy<true, PixelFormat::RG16I>, | ||||||
|         MortonCopy<true, PixelFormat::RGB32F>,      MortonCopy<true, PixelFormat::SRGBA8>, |         MortonCopy<true, PixelFormat::RG16S>,        MortonCopy<true, PixelFormat::RGB32F>, | ||||||
|         MortonCopy<true, PixelFormat::RG8S>,        MortonCopy<true, PixelFormat::Z24S8>, |         MortonCopy<true, PixelFormat::SRGBA8>,       MortonCopy<true, PixelFormat::RG8S>, | ||||||
|         MortonCopy<true, PixelFormat::S8Z24>,       MortonCopy<true, PixelFormat::Z32F>, |         MortonCopy<true, PixelFormat::Z24S8>,        MortonCopy<true, PixelFormat::S8Z24>, | ||||||
|         MortonCopy<true, PixelFormat::Z16>,         MortonCopy<true, PixelFormat::Z32FS8>, |         MortonCopy<true, PixelFormat::Z32F>,         MortonCopy<true, PixelFormat::Z16>, | ||||||
|  |         MortonCopy<true, PixelFormat::Z32FS8>, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static constexpr std::array<void (*)(u32, u32, u32, std::vector<u8>&, Tegra::GPUVAddr), | static constexpr std::array<void (*)(u32, u32, u32, std::vector<u8>&, Tegra::GPUVAddr), | ||||||
| @ -264,6 +266,7 @@ static constexpr std::array<void (*)(u32, u32, u32, std::vector<u8>&, Tegra::GPU | |||||||
|         MortonCopy<false, PixelFormat::A2B10G10R10>, |         MortonCopy<false, PixelFormat::A2B10G10R10>, | ||||||
|         MortonCopy<false, PixelFormat::A1B5G5R5>, |         MortonCopy<false, PixelFormat::A1B5G5R5>, | ||||||
|         MortonCopy<false, PixelFormat::R8>, |         MortonCopy<false, PixelFormat::R8>, | ||||||
|  |         MortonCopy<false, PixelFormat::R8UI>, | ||||||
|         MortonCopy<false, PixelFormat::RGBA16F>, |         MortonCopy<false, PixelFormat::RGBA16F>, | ||||||
|         MortonCopy<false, PixelFormat::R11FG11FB10F>, |         MortonCopy<false, PixelFormat::R11FG11FB10F>, | ||||||
|         MortonCopy<false, PixelFormat::RGBA32UI>, |         MortonCopy<false, PixelFormat::RGBA32UI>, | ||||||
|  | |||||||
| @ -29,44 +29,45 @@ struct SurfaceParams { | |||||||
|         A2B10G10R10 = 3, |         A2B10G10R10 = 3, | ||||||
|         A1B5G5R5 = 4, |         A1B5G5R5 = 4, | ||||||
|         R8 = 5, |         R8 = 5, | ||||||
|         RGBA16F = 6, |         R8UI = 6, | ||||||
|         R11FG11FB10F = 7, |         RGBA16F = 7, | ||||||
|         RGBA32UI = 8, |         R11FG11FB10F = 8, | ||||||
|         DXT1 = 9, |         RGBA32UI = 9, | ||||||
|         DXT23 = 10, |         DXT1 = 10, | ||||||
|         DXT45 = 11, |         DXT23 = 11, | ||||||
|         DXN1 = 12, // This is also known as BC4
 |         DXT45 = 12, | ||||||
|         DXN2UNORM = 13, |         DXN1 = 13, // This is also known as BC4
 | ||||||
|         DXN2SNORM = 14, |         DXN2UNORM = 14, | ||||||
|         BC7U = 15, |         DXN2SNORM = 15, | ||||||
|         ASTC_2D_4X4 = 16, |         BC7U = 16, | ||||||
|         G8R8 = 17, |         ASTC_2D_4X4 = 17, | ||||||
|         BGRA8 = 18, |         G8R8 = 18, | ||||||
|         RGBA32F = 19, |         BGRA8 = 19, | ||||||
|         RG32F = 20, |         RGBA32F = 20, | ||||||
|         R32F = 21, |         RG32F = 21, | ||||||
|         R16F = 22, |         R32F = 22, | ||||||
|         R16UNORM = 23, |         R16F = 23, | ||||||
|         R16S = 24, |         R16UNORM = 24, | ||||||
|         R16UI = 25, |         R16S = 25, | ||||||
|         R16I = 26, |         R16UI = 26, | ||||||
|         RG16 = 27, |         R16I = 27, | ||||||
|         RG16F = 28, |         RG16 = 28, | ||||||
|         RG16UI = 29, |         RG16F = 29, | ||||||
|         RG16I = 30, |         RG16UI = 30, | ||||||
|         RG16S = 31, |         RG16I = 31, | ||||||
|         RGB32F = 32, |         RG16S = 32, | ||||||
|         SRGBA8 = 33, |         RGB32F = 33, | ||||||
|         RG8S = 34, |         SRGBA8 = 34, | ||||||
|  |         RG8S = 35, | ||||||
| 
 | 
 | ||||||
|         MaxColorFormat, |         MaxColorFormat, | ||||||
| 
 | 
 | ||||||
|         // DepthStencil formats
 |         // DepthStencil formats
 | ||||||
|         Z24S8 = 35, |         Z24S8 = 36, | ||||||
|         S8Z24 = 36, |         S8Z24 = 37, | ||||||
|         Z32F = 37, |         Z32F = 38, | ||||||
|         Z16 = 38, |         Z16 = 39, | ||||||
|         Z32FS8 = 39, |         Z32FS8 = 40, | ||||||
| 
 | 
 | ||||||
|         MaxDepthStencilFormat, |         MaxDepthStencilFormat, | ||||||
| 
 | 
 | ||||||
| @ -110,6 +111,7 @@ struct SurfaceParams { | |||||||
|             1, // A2B10G10R10
 |             1, // A2B10G10R10
 | ||||||
|             1, // A1B5G5R5
 |             1, // A1B5G5R5
 | ||||||
|             1, // R8
 |             1, // R8
 | ||||||
|  |             1, // R8UI
 | ||||||
|             1, // RGBA16F
 |             1, // RGBA16F
 | ||||||
|             1, // R11FG11FB10F
 |             1, // R11FG11FB10F
 | ||||||
|             1, // RGBA32UI
 |             1, // RGBA32UI
 | ||||||
| @ -161,6 +163,7 @@ struct SurfaceParams { | |||||||
|             32,  // A2B10G10R10
 |             32,  // A2B10G10R10
 | ||||||
|             16,  // A1B5G5R5
 |             16,  // A1B5G5R5
 | ||||||
|             8,   // R8
 |             8,   // R8
 | ||||||
|  |             8,   // R8UI
 | ||||||
|             64,  // RGBA16F
 |             64,  // RGBA16F
 | ||||||
|             32,  // R11FG11FB10F
 |             32,  // R11FG11FB10F
 | ||||||
|             128, // RGBA32UI
 |             128, // RGBA32UI
 | ||||||
| @ -250,6 +253,8 @@ struct SurfaceParams { | |||||||
|             return PixelFormat::RGBA32UI; |             return PixelFormat::RGBA32UI; | ||||||
|         case Tegra::RenderTargetFormat::R8_UNORM: |         case Tegra::RenderTargetFormat::R8_UNORM: | ||||||
|             return PixelFormat::R8; |             return PixelFormat::R8; | ||||||
|  |         case Tegra::RenderTargetFormat::R8_UINT: | ||||||
|  |             return PixelFormat::R8UI; | ||||||
|         case Tegra::RenderTargetFormat::RG16_FLOAT: |         case Tegra::RenderTargetFormat::RG16_FLOAT: | ||||||
|             return PixelFormat::RG16F; |             return PixelFormat::RG16F; | ||||||
|         case Tegra::RenderTargetFormat::RG16_UINT: |         case Tegra::RenderTargetFormat::RG16_UINT: | ||||||
| @ -301,7 +306,15 @@ struct SurfaceParams { | |||||||
|         case Tegra::Texture::TextureFormat::A1B5G5R5: |         case Tegra::Texture::TextureFormat::A1B5G5R5: | ||||||
|             return PixelFormat::A1B5G5R5; |             return PixelFormat::A1B5G5R5; | ||||||
|         case Tegra::Texture::TextureFormat::R8: |         case Tegra::Texture::TextureFormat::R8: | ||||||
|             return PixelFormat::R8; |             switch (component_type) { | ||||||
|  |             case Tegra::Texture::ComponentType::UNORM: | ||||||
|  |                 return PixelFormat::R8; | ||||||
|  |             case Tegra::Texture::ComponentType::UINT: | ||||||
|  |                 return PixelFormat::R8UI; | ||||||
|  |             } | ||||||
|  |             LOG_CRITICAL(HW_GPU, "Unimplemented component_type={}", | ||||||
|  |                          static_cast<u32>(component_type)); | ||||||
|  |             UNREACHABLE(); | ||||||
|         case Tegra::Texture::TextureFormat::G8R8: |         case Tegra::Texture::TextureFormat::G8R8: | ||||||
|             return PixelFormat::G8R8; |             return PixelFormat::G8R8; | ||||||
|         case Tegra::Texture::TextureFormat::R16_G16_B16_A16: |         case Tegra::Texture::TextureFormat::R16_G16_B16_A16: | ||||||
| @ -435,6 +448,7 @@ struct SurfaceParams { | |||||||
|             return ComponentType::Float; |             return ComponentType::Float; | ||||||
|         case Tegra::RenderTargetFormat::RGBA32_UINT: |         case Tegra::RenderTargetFormat::RGBA32_UINT: | ||||||
|         case Tegra::RenderTargetFormat::RG16_UINT: |         case Tegra::RenderTargetFormat::RG16_UINT: | ||||||
|  |         case Tegra::RenderTargetFormat::R8_UINT: | ||||||
|         case Tegra::RenderTargetFormat::R16_UINT: |         case Tegra::RenderTargetFormat::R16_UINT: | ||||||
|             return ComponentType::UInt; |             return ComponentType::UInt; | ||||||
|         case Tegra::RenderTargetFormat::RG16_SINT: |         case Tegra::RenderTargetFormat::RG16_SINT: | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 greggameplayer
						greggameplayer