mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-31 16:09:03 -05:00 
			
		
		
		
	Implement RG32UI and R32UI
Needed for xenoblade
This commit is contained in:
		| @@ -49,6 +49,7 @@ u32 RenderTargetBytesPerPixel(RenderTargetFormat format) { | |||||||
|     case RenderTargetFormat::RGBA16_UINT: |     case RenderTargetFormat::RGBA16_UINT: | ||||||
|     case RenderTargetFormat::RGBA16_FLOAT: |     case RenderTargetFormat::RGBA16_FLOAT: | ||||||
|     case RenderTargetFormat::RG32_FLOAT: |     case RenderTargetFormat::RG32_FLOAT: | ||||||
|  |     case RenderTargetFormat::RG32_UINT: | ||||||
|         return 8; |         return 8; | ||||||
|     case RenderTargetFormat::RGBA8_UNORM: |     case RenderTargetFormat::RGBA8_UNORM: | ||||||
|     case RenderTargetFormat::RGBA8_SNORM: |     case RenderTargetFormat::RGBA8_SNORM: | ||||||
| @@ -62,6 +63,7 @@ u32 RenderTargetBytesPerPixel(RenderTargetFormat format) { | |||||||
|     case RenderTargetFormat::RG16_FLOAT: |     case RenderTargetFormat::RG16_FLOAT: | ||||||
|     case RenderTargetFormat::R32_FLOAT: |     case RenderTargetFormat::R32_FLOAT: | ||||||
|     case RenderTargetFormat::R11G11B10_FLOAT: |     case RenderTargetFormat::R11G11B10_FLOAT: | ||||||
|  |     case RenderTargetFormat::R32_UINT: | ||||||
|         return 4; |         return 4; | ||||||
|     case RenderTargetFormat::R16_UNORM: |     case RenderTargetFormat::R16_UNORM: | ||||||
|     case RenderTargetFormat::R16_SNORM: |     case RenderTargetFormat::R16_SNORM: | ||||||
|   | |||||||
| @@ -23,6 +23,7 @@ enum class RenderTargetFormat : u32 { | |||||||
|     RGBA16_UINT = 0xC9, |     RGBA16_UINT = 0xC9, | ||||||
|     RGBA16_FLOAT = 0xCA, |     RGBA16_FLOAT = 0xCA, | ||||||
|     RG32_FLOAT = 0xCB, |     RG32_FLOAT = 0xCB, | ||||||
|  |     RG32_UINT = 0xCD, | ||||||
|     BGRA8_UNORM = 0xCF, |     BGRA8_UNORM = 0xCF, | ||||||
|     RGB10_A2_UNORM = 0xD1, |     RGB10_A2_UNORM = 0xD1, | ||||||
|     RGBA8_UNORM = 0xD5, |     RGBA8_UNORM = 0xD5, | ||||||
| @@ -34,6 +35,7 @@ enum class RenderTargetFormat : u32 { | |||||||
|     RG16_UINT = 0xDD, |     RG16_UINT = 0xDD, | ||||||
|     RG16_FLOAT = 0xDE, |     RG16_FLOAT = 0xDE, | ||||||
|     R11G11B10_FLOAT = 0xE0, |     R11G11B10_FLOAT = 0xE0, | ||||||
|  |     R32_UINT = 0xE4, | ||||||
|     R32_FLOAT = 0xE5, |     R32_FLOAT = 0xE5, | ||||||
|     B5G6R5_UNORM = 0xE8, |     B5G6R5_UNORM = 0xE8, | ||||||
|     RG8_UNORM = 0xEA, |     RG8_UNORM = 0xEA, | ||||||
|   | |||||||
| @@ -137,6 +137,8 @@ static constexpr std::array<FormatTuple, SurfaceParams::MaxPixelFormat> tex_form | |||||||
|     {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, ComponentType::UNorm, false}, // SRGBA8 |     {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, ComponentType::UNorm, false}, // SRGBA8 | ||||||
|     {GL_RG8, GL_RG, GL_UNSIGNED_BYTE, ComponentType::UNorm, false},                       // RG8U |     {GL_RG8, GL_RG, GL_UNSIGNED_BYTE, ComponentType::UNorm, false},                       // RG8U | ||||||
|     {GL_RG8, GL_RG, GL_BYTE, ComponentType::SNorm, false},                                // RG8S |     {GL_RG8, GL_RG, GL_BYTE, ComponentType::SNorm, false},                                // RG8S | ||||||
|  |     {GL_RG32UI, GL_RG_INTEGER, GL_UNSIGNED_INT, ComponentType::UInt, false},              // RG32UI | ||||||
|  |     {GL_R32UI, GL_RED_INTEGER, GL_UNSIGNED_INT, ComponentType::UInt, false},              // R32UI | ||||||
|  |  | ||||||
|     // DepthStencil formats |     // DepthStencil formats | ||||||
|     {GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, ComponentType::UNorm, |     {GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, ComponentType::UNorm, | ||||||
| @@ -275,6 +277,8 @@ static constexpr std::array<void (*)(u32, u32, u32, std::vector<u8>&, Tegra::GPU | |||||||
|         MortonCopy<true, PixelFormat::SRGBA8>, |         MortonCopy<true, PixelFormat::SRGBA8>, | ||||||
|         MortonCopy<true, PixelFormat::RG8U>, |         MortonCopy<true, PixelFormat::RG8U>, | ||||||
|         MortonCopy<true, PixelFormat::RG8S>, |         MortonCopy<true, PixelFormat::RG8S>, | ||||||
|  |         MortonCopy<true, PixelFormat::RG32UI>, | ||||||
|  |         MortonCopy<true, PixelFormat::R32UI>, | ||||||
|         MortonCopy<true, PixelFormat::Z24S8>, |         MortonCopy<true, PixelFormat::Z24S8>, | ||||||
|         MortonCopy<true, PixelFormat::S8Z24>, |         MortonCopy<true, PixelFormat::S8Z24>, | ||||||
|         MortonCopy<true, PixelFormat::Z32F>, |         MortonCopy<true, PixelFormat::Z32F>, | ||||||
| @@ -327,6 +331,8 @@ static constexpr std::array<void (*)(u32, u32, u32, std::vector<u8>&, Tegra::GPU | |||||||
|         MortonCopy<false, PixelFormat::SRGBA8>, |         MortonCopy<false, PixelFormat::SRGBA8>, | ||||||
|         MortonCopy<false, PixelFormat::RG8U>, |         MortonCopy<false, PixelFormat::RG8U>, | ||||||
|         MortonCopy<false, PixelFormat::RG8S>, |         MortonCopy<false, PixelFormat::RG8S>, | ||||||
|  |         MortonCopy<false, PixelFormat::RG32UI>, | ||||||
|  |         MortonCopy<false, PixelFormat::R32UI>, | ||||||
|         MortonCopy<false, PixelFormat::Z24S8>, |         MortonCopy<false, PixelFormat::Z24S8>, | ||||||
|         MortonCopy<false, PixelFormat::S8Z24>, |         MortonCopy<false, PixelFormat::S8Z24>, | ||||||
|         MortonCopy<false, PixelFormat::Z32F>, |         MortonCopy<false, PixelFormat::Z32F>, | ||||||
|   | |||||||
| @@ -61,15 +61,17 @@ struct SurfaceParams { | |||||||
|         SRGBA8 = 35, |         SRGBA8 = 35, | ||||||
|         RG8U = 36, |         RG8U = 36, | ||||||
|         RG8S = 37, |         RG8S = 37, | ||||||
|  |         RG32UI = 38, | ||||||
|  |         R32UI = 39, | ||||||
|  |  | ||||||
|         MaxColorFormat, |         MaxColorFormat, | ||||||
|  |  | ||||||
|         // DepthStencil formats |         // DepthStencil formats | ||||||
|         Z24S8 = 38, |         Z24S8 = 40, | ||||||
|         S8Z24 = 39, |         S8Z24 = 41, | ||||||
|         Z32F = 40, |         Z32F = 42, | ||||||
|         Z16 = 41, |         Z16 = 43, | ||||||
|         Z32FS8 = 42, |         Z32FS8 = 44, | ||||||
|  |  | ||||||
|         MaxDepthStencilFormat, |         MaxDepthStencilFormat, | ||||||
|  |  | ||||||
| @@ -145,6 +147,8 @@ struct SurfaceParams { | |||||||
|             1, // SRGBA8 |             1, // SRGBA8 | ||||||
|             1, // RG8U |             1, // RG8U | ||||||
|             1, // RG8S |             1, // RG8S | ||||||
|  |             1, // RG32UI | ||||||
|  |             1, // R32UI | ||||||
|             1, // Z24S8 |             1, // Z24S8 | ||||||
|             1, // S8Z24 |             1, // S8Z24 | ||||||
|             1, // Z32F |             1, // Z32F | ||||||
| @@ -199,6 +203,8 @@ struct SurfaceParams { | |||||||
|             32,  // SRGBA8 |             32,  // SRGBA8 | ||||||
|             16,  // RG8U |             16,  // RG8U | ||||||
|             16,  // RG8S |             16,  // RG8S | ||||||
|  |             64,  // RG32UI | ||||||
|  |             32,  // R32UI | ||||||
|             32,  // Z24S8 |             32,  // Z24S8 | ||||||
|             32,  // S8Z24 |             32,  // S8Z24 | ||||||
|             32,  // Z32F |             32,  // Z32F | ||||||
| @@ -289,6 +295,10 @@ struct SurfaceParams { | |||||||
|             return PixelFormat::R16I; |             return PixelFormat::R16I; | ||||||
|         case Tegra::RenderTargetFormat::R32_FLOAT: |         case Tegra::RenderTargetFormat::R32_FLOAT: | ||||||
|             return PixelFormat::R32F; |             return PixelFormat::R32F; | ||||||
|  |         case Tegra::RenderTargetFormat::R32_UINT: | ||||||
|  |             return PixelFormat::R32UI; | ||||||
|  |         case Tegra::RenderTargetFormat::RG32_UINT: | ||||||
|  |             return PixelFormat::RG32UI; | ||||||
|         default: |         default: | ||||||
|             LOG_CRITICAL(HW_GPU, "Unimplemented format={}", static_cast<u32>(format)); |             LOG_CRITICAL(HW_GPU, "Unimplemented format={}", static_cast<u32>(format)); | ||||||
|             UNREACHABLE(); |             UNREACHABLE(); | ||||||
| @@ -342,7 +352,15 @@ struct SurfaceParams { | |||||||
|                          static_cast<u32>(component_type)); |                          static_cast<u32>(component_type)); | ||||||
|             UNREACHABLE(); |             UNREACHABLE(); | ||||||
|         case Tegra::Texture::TextureFormat::R32_G32: |         case Tegra::Texture::TextureFormat::R32_G32: | ||||||
|             return PixelFormat::RG32F; |             switch (component_type) { | ||||||
|  |             case Tegra::Texture::ComponentType::FLOAT: | ||||||
|  |                 return PixelFormat::RG32F; | ||||||
|  |             case Tegra::Texture::ComponentType::UINT: | ||||||
|  |                 return PixelFormat::RG32UI; | ||||||
|  |             } | ||||||
|  |             LOG_CRITICAL(HW_GPU, "Unimplemented component_type={}", | ||||||
|  |                          static_cast<u32>(component_type)); | ||||||
|  |             UNREACHABLE(); | ||||||
|         case Tegra::Texture::TextureFormat::R32_G32_B32: |         case Tegra::Texture::TextureFormat::R32_G32_B32: | ||||||
|             return PixelFormat::RGB32F; |             return PixelFormat::RGB32F; | ||||||
|         case Tegra::Texture::TextureFormat::R16: |         case Tegra::Texture::TextureFormat::R16: | ||||||
| @@ -362,7 +380,15 @@ struct SurfaceParams { | |||||||
|                          static_cast<u32>(component_type)); |                          static_cast<u32>(component_type)); | ||||||
|             UNREACHABLE(); |             UNREACHABLE(); | ||||||
|         case Tegra::Texture::TextureFormat::R32: |         case Tegra::Texture::TextureFormat::R32: | ||||||
|             return PixelFormat::R32F; |             switch (component_type) { | ||||||
|  |             case Tegra::Texture::ComponentType::FLOAT: | ||||||
|  |                 return PixelFormat::R32F; | ||||||
|  |             case Tegra::Texture::ComponentType::UINT: | ||||||
|  |                 return PixelFormat::R32UI; | ||||||
|  |             } | ||||||
|  |             LOG_CRITICAL(HW_GPU, "Unimplemented component_type={}", | ||||||
|  |                          static_cast<u32>(component_type)); | ||||||
|  |             UNREACHABLE(); | ||||||
|         case Tegra::Texture::TextureFormat::ZF32: |         case Tegra::Texture::TextureFormat::ZF32: | ||||||
|             return PixelFormat::Z32F; |             return PixelFormat::Z32F; | ||||||
|         case Tegra::Texture::TextureFormat::Z24S8: |         case Tegra::Texture::TextureFormat::Z24S8: | ||||||
| @@ -462,6 +488,8 @@ struct SurfaceParams { | |||||||
|         case Tegra::RenderTargetFormat::RG16_UINT: |         case Tegra::RenderTargetFormat::RG16_UINT: | ||||||
|         case Tegra::RenderTargetFormat::R8_UINT: |         case Tegra::RenderTargetFormat::R8_UINT: | ||||||
|         case Tegra::RenderTargetFormat::R16_UINT: |         case Tegra::RenderTargetFormat::R16_UINT: | ||||||
|  |         case Tegra::RenderTargetFormat::RG32_UINT: | ||||||
|  |         case Tegra::RenderTargetFormat::R32_UINT: | ||||||
|             return ComponentType::UInt; |             return ComponentType::UInt; | ||||||
|         case Tegra::RenderTargetFormat::RG16_SINT: |         case Tegra::RenderTargetFormat::RG16_SINT: | ||||||
|         case Tegra::RenderTargetFormat::R16_SINT: |         case Tegra::RenderTargetFormat::R16_SINT: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 David Marcec
					David Marcec