mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	gl_rasterizer_cache: Implement G8R8S format.
- Used by Super Mario Odyssey.
This commit is contained in:
		
							parent
							
								
									d1520410a3
								
							
						
					
					
						commit
						d8fd3ef4fe
					
				| @ -119,7 +119,8 @@ static constexpr std::array<FormatTuple, SurfaceParams::MaxPixelFormat> tex_form | |||||||
|     {GL_COMPRESSED_RGBA_BPTC_UNORM_ARB, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, ComponentType::UNorm, |     {GL_COMPRESSED_RGBA_BPTC_UNORM_ARB, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, ComponentType::UNorm, | ||||||
|      true},                                                                    // BC7U
 |      true},                                                                    // BC7U
 | ||||||
|     {GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false},        // ASTC_2D_4X4
 |     {GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false},        // ASTC_2D_4X4
 | ||||||
|     {GL_RG8, GL_RG, GL_UNSIGNED_BYTE, ComponentType::UNorm, false},            // G8R8
 |     {GL_RG8, GL_RG, GL_UNSIGNED_BYTE, ComponentType::UNorm, false},            // G8R8U
 | ||||||
|  |     {GL_RG8, GL_RG, GL_BYTE, ComponentType::SNorm, false},                     // G8R8S
 | ||||||
|     {GL_RGBA8, GL_BGRA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false},        // BGRA8
 |     {GL_RGBA8, GL_BGRA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false},        // BGRA8
 | ||||||
|     {GL_RGBA32F, GL_RGBA, GL_FLOAT, ComponentType::Float, false},              // RGBA32F
 |     {GL_RGBA32F, GL_RGBA, GL_FLOAT, ComponentType::Float, false},              // RGBA32F
 | ||||||
|     {GL_RG32F, GL_RG, GL_FLOAT, ComponentType::Float, false},                  // RG32F
 |     {GL_RG32F, GL_RG, GL_FLOAT, ComponentType::Float, false},                  // RG32F
 | ||||||
| @ -260,7 +261,8 @@ static constexpr std::array<void (*)(u32, u32, u32, std::vector<u8>&, Tegra::GPU | |||||||
|         MortonCopy<true, PixelFormat::DXN2SNORM>, |         MortonCopy<true, PixelFormat::DXN2SNORM>, | ||||||
|         MortonCopy<true, PixelFormat::BC7U>, |         MortonCopy<true, PixelFormat::BC7U>, | ||||||
|         MortonCopy<true, PixelFormat::ASTC_2D_4X4>, |         MortonCopy<true, PixelFormat::ASTC_2D_4X4>, | ||||||
|         MortonCopy<true, PixelFormat::G8R8>, |         MortonCopy<true, PixelFormat::G8R8U>, | ||||||
|  |         MortonCopy<true, PixelFormat::G8R8S>, | ||||||
|         MortonCopy<true, PixelFormat::BGRA8>, |         MortonCopy<true, PixelFormat::BGRA8>, | ||||||
|         MortonCopy<true, PixelFormat::RGBA32F>, |         MortonCopy<true, PixelFormat::RGBA32F>, | ||||||
|         MortonCopy<true, PixelFormat::RG32F>, |         MortonCopy<true, PixelFormat::RG32F>, | ||||||
| @ -315,7 +317,8 @@ static constexpr std::array<void (*)(u32, u32, u32, std::vector<u8>&, Tegra::GPU | |||||||
|         nullptr, |         nullptr, | ||||||
|         nullptr, |         nullptr, | ||||||
|         nullptr, |         nullptr, | ||||||
|         MortonCopy<false, PixelFormat::G8R8>, |         MortonCopy<false, PixelFormat::G8R8U>, | ||||||
|  |         MortonCopy<false, PixelFormat::G8R8S>, | ||||||
|         MortonCopy<false, PixelFormat::BGRA8>, |         MortonCopy<false, PixelFormat::BGRA8>, | ||||||
|         MortonCopy<false, PixelFormat::RGBA32F>, |         MortonCopy<false, PixelFormat::RGBA32F>, | ||||||
|         MortonCopy<false, PixelFormat::RG32F>, |         MortonCopy<false, PixelFormat::RG32F>, | ||||||
| @ -461,7 +464,7 @@ static void ConvertS8Z24ToZ24S8(std::vector<u8>& data, u32 width, u32 height) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void ConvertG8R8ToR8G8(std::vector<u8>& data, u32 width, u32 height) { | static void ConvertG8R8ToR8G8(std::vector<u8>& data, u32 width, u32 height) { | ||||||
|     const auto bpp{CachedSurface::GetGLBytesPerPixel(PixelFormat::G8R8)}; |     const auto bpp{CachedSurface::GetGLBytesPerPixel(PixelFormat::G8R8U)}; | ||||||
|     for (size_t y = 0; y < height; ++y) { |     for (size_t y = 0; y < height; ++y) { | ||||||
|         for (size_t x = 0; x < width; ++x) { |         for (size_t x = 0; x < width; ++x) { | ||||||
|             const size_t offset{bpp * (y * width + x)}; |             const size_t offset{bpp * (y * width + x)}; | ||||||
| @ -493,7 +496,8 @@ static void ConvertFormatAsNeeded_LoadGLBuffer(std::vector<u8>& data, PixelForma | |||||||
|         ConvertS8Z24ToZ24S8(data, width, height); |         ConvertS8Z24ToZ24S8(data, width, height); | ||||||
|         break; |         break; | ||||||
| 
 | 
 | ||||||
|     case PixelFormat::G8R8: |     case PixelFormat::G8R8U: | ||||||
|  |     case PixelFormat::G8R8S: | ||||||
|         // Convert the G8R8 color format to R8G8, as OpenGL does not support G8R8.
 |         // Convert the G8R8 color format to R8G8, as OpenGL does not support G8R8.
 | ||||||
|         ConvertG8R8ToR8G8(data, width, height); |         ConvertG8R8ToR8G8(data, width, height); | ||||||
|         break; |         break; | ||||||
|  | |||||||
| @ -43,36 +43,37 @@ struct SurfaceParams { | |||||||
|         DXN2SNORM = 17, |         DXN2SNORM = 17, | ||||||
|         BC7U = 18, |         BC7U = 18, | ||||||
|         ASTC_2D_4X4 = 19, |         ASTC_2D_4X4 = 19, | ||||||
|         G8R8 = 20, |         G8R8U = 20, | ||||||
|         BGRA8 = 21, |         G8R8S = 21, | ||||||
|         RGBA32F = 22, |         BGRA8 = 22, | ||||||
|         RG32F = 23, |         RGBA32F = 23, | ||||||
|         R32F = 24, |         RG32F = 24, | ||||||
|         R16F = 25, |         R32F = 25, | ||||||
|         R16UNORM = 26, |         R16F = 26, | ||||||
|         R16S = 27, |         R16UNORM = 27, | ||||||
|         R16UI = 28, |         R16S = 28, | ||||||
|         R16I = 29, |         R16UI = 29, | ||||||
|         RG16 = 30, |         R16I = 30, | ||||||
|         RG16F = 31, |         RG16 = 31, | ||||||
|         RG16UI = 32, |         RG16F = 32, | ||||||
|         RG16I = 33, |         RG16UI = 33, | ||||||
|         RG16S = 34, |         RG16I = 34, | ||||||
|         RGB32F = 35, |         RG16S = 35, | ||||||
|         SRGBA8 = 36, |         RGB32F = 36, | ||||||
|         RG8U = 37, |         SRGBA8 = 37, | ||||||
|         RG8S = 38, |         RG8U = 38, | ||||||
|         RG32UI = 39, |         RG8S = 39, | ||||||
|         R32UI = 40, |         RG32UI = 40, | ||||||
|  |         R32UI = 41, | ||||||
| 
 | 
 | ||||||
|         MaxColorFormat, |         MaxColorFormat, | ||||||
| 
 | 
 | ||||||
|         // DepthStencil formats
 |         // DepthStencil formats
 | ||||||
|         Z24S8 = 41, |         Z24S8 = 42, | ||||||
|         S8Z24 = 42, |         S8Z24 = 43, | ||||||
|         Z32F = 43, |         Z32F = 44, | ||||||
|         Z16 = 44, |         Z16 = 45, | ||||||
|         Z32FS8 = 45, |         Z32FS8 = 46, | ||||||
| 
 | 
 | ||||||
|         MaxDepthStencilFormat, |         MaxDepthStencilFormat, | ||||||
| 
 | 
 | ||||||
| @ -130,7 +131,8 @@ struct SurfaceParams { | |||||||
|             4, // DXN2SNORM
 |             4, // DXN2SNORM
 | ||||||
|             4, // BC7U
 |             4, // BC7U
 | ||||||
|             4, // ASTC_2D_4X4
 |             4, // ASTC_2D_4X4
 | ||||||
|             1, // G8R8
 |             1, // G8R8U
 | ||||||
|  |             1, // G8R8S
 | ||||||
|             1, // BGRA8
 |             1, // BGRA8
 | ||||||
|             1, // RGBA32F
 |             1, // RGBA32F
 | ||||||
|             1, // RG32F
 |             1, // RG32F
 | ||||||
| @ -187,7 +189,8 @@ struct SurfaceParams { | |||||||
|             128, // DXN2SNORM
 |             128, // DXN2SNORM
 | ||||||
|             128, // BC7U
 |             128, // BC7U
 | ||||||
|             32,  // ASTC_2D_4X4
 |             32,  // ASTC_2D_4X4
 | ||||||
|             16,  // G8R8
 |             16,  // G8R8U
 | ||||||
|  |             16,  // G8R8S
 | ||||||
|             32,  // BGRA8
 |             32,  // BGRA8
 | ||||||
|             128, // RGBA32F
 |             128, // RGBA32F
 | ||||||
|             64,  // RG32F
 |             64,  // RG32F
 | ||||||
| @ -341,7 +344,15 @@ struct SurfaceParams { | |||||||
|                          static_cast<u32>(component_type)); |                          static_cast<u32>(component_type)); | ||||||
|             UNREACHABLE(); |             UNREACHABLE(); | ||||||
|         case Tegra::Texture::TextureFormat::G8R8: |         case Tegra::Texture::TextureFormat::G8R8: | ||||||
|             return PixelFormat::G8R8; |             switch (component_type) { | ||||||
|  |             case Tegra::Texture::ComponentType::UNORM: | ||||||
|  |                 return PixelFormat::G8R8U; | ||||||
|  |             case Tegra::Texture::ComponentType::SNORM: | ||||||
|  |                 return PixelFormat::G8R8S; | ||||||
|  |             } | ||||||
|  |             LOG_CRITICAL(HW_GPU, "Unimplemented component_type={}", | ||||||
|  |                          static_cast<u32>(component_type)); | ||||||
|  |             UNREACHABLE(); | ||||||
|         case Tegra::Texture::TextureFormat::R16_G16_B16_A16: |         case Tegra::Texture::TextureFormat::R16_G16_B16_A16: | ||||||
|             return PixelFormat::RGBA16F; |             return PixelFormat::RGBA16F; | ||||||
|         case Tegra::Texture::TextureFormat::BF10GF11RF11: |         case Tegra::Texture::TextureFormat::BF10GF11RF11: | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 bunnei
						bunnei