mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu.git
				synced 2025-05-12 00:45:25 +00:00 
			
		
		
		
	GPU: Implemented the RGBA32_UINT rendertarget format.
This commit is contained in:
		
							parent
							
								
									b11072d54a
								
							
						
					
					
						commit
						c0e2d52758
					
				| @ -16,6 +16,7 @@ namespace Tegra { | |||||||
| enum class RenderTargetFormat : u32 { | enum class RenderTargetFormat : u32 { | ||||||
|     NONE = 0x0, |     NONE = 0x0, | ||||||
|     RGBA32_FLOAT = 0xC0, |     RGBA32_FLOAT = 0xC0, | ||||||
|  |     RGBA32_UINT = 0xC2, | ||||||
|     RGBA16_FLOAT = 0xCA, |     RGBA16_FLOAT = 0xCA, | ||||||
|     RGB10_A2_UNORM = 0xD1, |     RGB10_A2_UNORM = 0xD1, | ||||||
|     RGBA8_UNORM = 0xD5, |     RGBA8_UNORM = 0xD5, | ||||||
|  | |||||||
| @ -75,6 +75,7 @@ static constexpr std::array<FormatTuple, SurfaceParams::MaxPixelFormat> tex_form | |||||||
|     {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
 | ||||||
|  |     {GL_RGBA32UI, GL_RGBA_INTEGER, GL_UNSIGNED_INT, ComponentType::UInt, false}, // RGBA32UI
 | ||||||
|     {GL_COMPRESSED_RGB_S3TC_DXT1_EXT, GL_RGB, GL_UNSIGNED_INT_8_8_8_8, ComponentType::UNorm, |     {GL_COMPRESSED_RGB_S3TC_DXT1_EXT, GL_RGB, GL_UNSIGNED_INT_8_8_8_8, ComponentType::UNorm, | ||||||
|      true}, // DXT1
 |      true}, // DXT1
 | ||||||
|     {GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, ComponentType::UNorm, |     {GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, ComponentType::UNorm, | ||||||
| @ -170,9 +171,10 @@ static constexpr std::array<void (*)(u32, u32, u32, u8*, Tegra::GPUVAddr), | |||||||
|         MortonCopy<true, PixelFormat::ABGR8>,        MortonCopy<true, PixelFormat::B5G6R5>, |         MortonCopy<true, PixelFormat::ABGR8>,        MortonCopy<true, PixelFormat::B5G6R5>, | ||||||
|         MortonCopy<true, PixelFormat::A2B10G10R10>,  MortonCopy<true, PixelFormat::A1B5G5R5>, |         MortonCopy<true, PixelFormat::A2B10G10R10>,  MortonCopy<true, PixelFormat::A1B5G5R5>, | ||||||
|         MortonCopy<true, PixelFormat::R8>,           MortonCopy<true, PixelFormat::RGBA16F>, |         MortonCopy<true, PixelFormat::R8>,           MortonCopy<true, PixelFormat::RGBA16F>, | ||||||
|         MortonCopy<true, PixelFormat::R11FG11FB10F>, 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::ASTC_2D_4X4>, |         MortonCopy<true, PixelFormat::DXT45>,        MortonCopy<true, PixelFormat::DXN1>, | ||||||
|  |         MortonCopy<true, PixelFormat::ASTC_2D_4X4>, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static constexpr std::array<void (*)(u32, u32, u32, u8*, Tegra::GPUVAddr), | static constexpr std::array<void (*)(u32, u32, u32, u8*, Tegra::GPUVAddr), | ||||||
| @ -185,6 +187,7 @@ static constexpr std::array<void (*)(u32, u32, u32, u8*, Tegra::GPUVAddr), | |||||||
|         MortonCopy<false, PixelFormat::R8>, |         MortonCopy<false, PixelFormat::R8>, | ||||||
|         MortonCopy<false, PixelFormat::RGBA16F>, |         MortonCopy<false, PixelFormat::RGBA16F>, | ||||||
|         MortonCopy<false, PixelFormat::R11FG11FB10F>, |         MortonCopy<false, PixelFormat::R11FG11FB10F>, | ||||||
|  |         MortonCopy<false, PixelFormat::RGBA32UI>, | ||||||
|         // TODO(Subv): Swizzling the DXT1/DXT23/DXT45/DXN1 formats is not yet supported
 |         // TODO(Subv): Swizzling the DXT1/DXT23/DXT45/DXN1 formats is not yet supported
 | ||||||
|         nullptr, |         nullptr, | ||||||
|         nullptr, |         nullptr, | ||||||
|  | |||||||
| @ -30,11 +30,12 @@ struct SurfaceParams { | |||||||
|         R8 = 4, |         R8 = 4, | ||||||
|         RGBA16F = 5, |         RGBA16F = 5, | ||||||
|         R11FG11FB10F = 6, |         R11FG11FB10F = 6, | ||||||
|         DXT1 = 7, |         RGBA32UI = 7, | ||||||
|         DXT23 = 8, |         DXT1 = 8, | ||||||
|         DXT45 = 9, |         DXT23 = 9, | ||||||
|         DXN1 = 10, // This is also known as BC4
 |         DXT45 = 10, | ||||||
|         ASTC_2D_4X4 = 11, |         DXN1 = 11, // This is also known as BC4
 | ||||||
|  |         ASTC_2D_4X4 = 12, | ||||||
| 
 | 
 | ||||||
|         Max, |         Max, | ||||||
|         Invalid = 255, |         Invalid = 255, | ||||||
| @ -77,6 +78,7 @@ struct SurfaceParams { | |||||||
|             1, // R8
 |             1, // R8
 | ||||||
|             1, // RGBA16F
 |             1, // RGBA16F
 | ||||||
|             1, // R11FG11FB10F
 |             1, // R11FG11FB10F
 | ||||||
|  |             1, // RGBA32UI
 | ||||||
|             4, // DXT1
 |             4, // DXT1
 | ||||||
|             4, // DXT23
 |             4, // DXT23
 | ||||||
|             4, // DXT45
 |             4, // DXT45
 | ||||||
| @ -100,6 +102,7 @@ struct SurfaceParams { | |||||||
|             8,   // R8
 |             8,   // R8
 | ||||||
|             64,  // RGBA16F
 |             64,  // RGBA16F
 | ||||||
|             32,  // R11FG11FB10F
 |             32,  // R11FG11FB10F
 | ||||||
|  |             128, // RGBA32UI
 | ||||||
|             64,  // DXT1
 |             64,  // DXT1
 | ||||||
|             128, // DXT23
 |             128, // DXT23
 | ||||||
|             128, // DXT45
 |             128, // DXT45
 | ||||||
| @ -125,6 +128,8 @@ struct SurfaceParams { | |||||||
|             return PixelFormat::RGBA16F; |             return PixelFormat::RGBA16F; | ||||||
|         case Tegra::RenderTargetFormat::R11G11B10_FLOAT: |         case Tegra::RenderTargetFormat::R11G11B10_FLOAT: | ||||||
|             return PixelFormat::R11FG11FB10F; |             return PixelFormat::R11FG11FB10F; | ||||||
|  |         case Tegra::RenderTargetFormat::RGBA32_UINT: | ||||||
|  |             return PixelFormat::RGBA32UI; | ||||||
|         default: |         default: | ||||||
|             NGLOG_CRITICAL(HW_GPU, "Unimplemented format={}", static_cast<u32>(format)); |             NGLOG_CRITICAL(HW_GPU, "Unimplemented format={}", static_cast<u32>(format)); | ||||||
|             UNREACHABLE(); |             UNREACHABLE(); | ||||||
| @ -148,6 +153,8 @@ struct SurfaceParams { | |||||||
|             return PixelFormat::RGBA16F; |             return PixelFormat::RGBA16F; | ||||||
|         case Tegra::Texture::TextureFormat::BF10GF11RF11: |         case Tegra::Texture::TextureFormat::BF10GF11RF11: | ||||||
|             return PixelFormat::R11FG11FB10F; |             return PixelFormat::R11FG11FB10F; | ||||||
|  |         case Tegra::Texture::TextureFormat::R32_G32_B32_A32: | ||||||
|  |             return PixelFormat::RGBA32UI; | ||||||
|         case Tegra::Texture::TextureFormat::DXT1: |         case Tegra::Texture::TextureFormat::DXT1: | ||||||
|             return PixelFormat::DXT1; |             return PixelFormat::DXT1; | ||||||
|         case Tegra::Texture::TextureFormat::DXT23: |         case Tegra::Texture::TextureFormat::DXT23: | ||||||
| @ -181,6 +188,8 @@ struct SurfaceParams { | |||||||
|             return Tegra::Texture::TextureFormat::R16_G16_B16_A16; |             return Tegra::Texture::TextureFormat::R16_G16_B16_A16; | ||||||
|         case PixelFormat::R11FG11FB10F: |         case PixelFormat::R11FG11FB10F: | ||||||
|             return Tegra::Texture::TextureFormat::BF10GF11RF11; |             return Tegra::Texture::TextureFormat::BF10GF11RF11; | ||||||
|  |         case PixelFormat::RGBA32UI: | ||||||
|  |             return Tegra::Texture::TextureFormat::R32_G32_B32_A32; | ||||||
|         case PixelFormat::DXT1: |         case PixelFormat::DXT1: | ||||||
|             return Tegra::Texture::TextureFormat::DXT1; |             return Tegra::Texture::TextureFormat::DXT1; | ||||||
|         case PixelFormat::DXT23: |         case PixelFormat::DXT23: | ||||||
| @ -217,6 +226,8 @@ struct SurfaceParams { | |||||||
|         case Tegra::RenderTargetFormat::RGBA16_FLOAT: |         case Tegra::RenderTargetFormat::RGBA16_FLOAT: | ||||||
|         case Tegra::RenderTargetFormat::R11G11B10_FLOAT: |         case Tegra::RenderTargetFormat::R11G11B10_FLOAT: | ||||||
|             return ComponentType::Float; |             return ComponentType::Float; | ||||||
|  |         case Tegra::RenderTargetFormat::RGBA32_UINT: | ||||||
|  |             return ComponentType::UInt; | ||||||
|         default: |         default: | ||||||
|             NGLOG_CRITICAL(HW_GPU, "Unimplemented format={}", static_cast<u32>(format)); |             NGLOG_CRITICAL(HW_GPU, "Unimplemented format={}", static_cast<u32>(format)); | ||||||
|             UNREACHABLE(); |             UNREACHABLE(); | ||||||
|  | |||||||
| @ -65,6 +65,8 @@ u32 BytesPerPixel(TextureFormat format) { | |||||||
|         return 1; |         return 1; | ||||||
|     case TextureFormat::R16_G16_B16_A16: |     case TextureFormat::R16_G16_B16_A16: | ||||||
|         return 8; |         return 8; | ||||||
|  |     case TextureFormat::R32_G32_B32_A32: | ||||||
|  |         return 16; | ||||||
|     default: |     default: | ||||||
|         UNIMPLEMENTED_MSG("Format not implemented"); |         UNIMPLEMENTED_MSG("Format not implemented"); | ||||||
|         break; |         break; | ||||||
| @ -94,6 +96,7 @@ std::vector<u8> UnswizzleTexture(VAddr address, TextureFormat format, u32 width, | |||||||
|     case TextureFormat::B5G6R5: |     case TextureFormat::B5G6R5: | ||||||
|     case TextureFormat::R8: |     case TextureFormat::R8: | ||||||
|     case TextureFormat::R16_G16_B16_A16: |     case TextureFormat::R16_G16_B16_A16: | ||||||
|  |     case TextureFormat::R32_G32_B32_A32: | ||||||
|     case TextureFormat::BF10GF11RF11: |     case TextureFormat::BF10GF11RF11: | ||||||
|     case TextureFormat::ASTC_2D_4X4: |     case TextureFormat::ASTC_2D_4X4: | ||||||
|         CopySwizzledData(width, height, bytes_per_pixel, bytes_per_pixel, data, |         CopySwizzledData(width, height, bytes_per_pixel, bytes_per_pixel, data, | ||||||
| @ -124,6 +127,7 @@ std::vector<u8> DecodeTexture(const std::vector<u8>& texture_data, TextureFormat | |||||||
|     case TextureFormat::B5G6R5: |     case TextureFormat::B5G6R5: | ||||||
|     case TextureFormat::R8: |     case TextureFormat::R8: | ||||||
|     case TextureFormat::BF10GF11RF11: |     case TextureFormat::BF10GF11RF11: | ||||||
|  |     case TextureFormat::R32_G32_B32_A32: | ||||||
|         // TODO(Subv): For the time being just forward the same data without any decoding.
 |         // TODO(Subv): For the time being just forward the same data without any decoding.
 | ||||||
|         rgba_data = texture_data; |         rgba_data = texture_data; | ||||||
|         break; |         break; | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Subv
						Subv