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 { | ||||
|     NONE = 0x0, | ||||
|     RGBA32_FLOAT = 0xC0, | ||||
|     RGBA32_UINT = 0xC2, | ||||
|     RGBA16_FLOAT = 0xCA, | ||||
|     RGB10_A2_UNORM = 0xD1, | ||||
|     RGBA8_UNORM = 0xD5, | ||||
|  | ||||
| @ -74,7 +74,8 @@ static constexpr std::array<FormatTuple, SurfaceParams::MaxPixelFormat> tex_form | ||||
|     {GL_R8, GL_RED, GL_UNSIGNED_BYTE, ComponentType::UNorm, false},                    // R8
 | ||||
|     {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, | ||||
|      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, | ||||
|      true}, // DXT1
 | ||||
|     {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::A2B10G10R10>,  MortonCopy<true, PixelFormat::A1B5G5R5>, | ||||
|         MortonCopy<true, PixelFormat::R8>,           MortonCopy<true, PixelFormat::RGBA16F>, | ||||
|         MortonCopy<true, PixelFormat::R11FG11FB10F>, MortonCopy<true, PixelFormat::DXT1>, | ||||
|         MortonCopy<true, PixelFormat::DXT23>,        MortonCopy<true, PixelFormat::DXT45>, | ||||
|         MortonCopy<true, PixelFormat::DXN1>,         MortonCopy<true, PixelFormat::ASTC_2D_4X4>, | ||||
|         MortonCopy<true, PixelFormat::R11FG11FB10F>, MortonCopy<true, PixelFormat::RGBA32UI>, | ||||
|         MortonCopy<true, PixelFormat::DXT1>,         MortonCopy<true, PixelFormat::DXT23>, | ||||
|         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), | ||||
| @ -185,6 +187,7 @@ static constexpr std::array<void (*)(u32, u32, u32, u8*, Tegra::GPUVAddr), | ||||
|         MortonCopy<false, PixelFormat::R8>, | ||||
|         MortonCopy<false, PixelFormat::RGBA16F>, | ||||
|         MortonCopy<false, PixelFormat::R11FG11FB10F>, | ||||
|         MortonCopy<false, PixelFormat::RGBA32UI>, | ||||
|         // TODO(Subv): Swizzling the DXT1/DXT23/DXT45/DXN1 formats is not yet supported
 | ||||
|         nullptr, | ||||
|         nullptr, | ||||
|  | ||||
| @ -30,11 +30,12 @@ struct SurfaceParams { | ||||
|         R8 = 4, | ||||
|         RGBA16F = 5, | ||||
|         R11FG11FB10F = 6, | ||||
|         DXT1 = 7, | ||||
|         DXT23 = 8, | ||||
|         DXT45 = 9, | ||||
|         DXN1 = 10, // This is also known as BC4
 | ||||
|         ASTC_2D_4X4 = 11, | ||||
|         RGBA32UI = 7, | ||||
|         DXT1 = 8, | ||||
|         DXT23 = 9, | ||||
|         DXT45 = 10, | ||||
|         DXN1 = 11, // This is also known as BC4
 | ||||
|         ASTC_2D_4X4 = 12, | ||||
| 
 | ||||
|         Max, | ||||
|         Invalid = 255, | ||||
| @ -77,6 +78,7 @@ struct SurfaceParams { | ||||
|             1, // R8
 | ||||
|             1, // RGBA16F
 | ||||
|             1, // R11FG11FB10F
 | ||||
|             1, // RGBA32UI
 | ||||
|             4, // DXT1
 | ||||
|             4, // DXT23
 | ||||
|             4, // DXT45
 | ||||
| @ -100,6 +102,7 @@ struct SurfaceParams { | ||||
|             8,   // R8
 | ||||
|             64,  // RGBA16F
 | ||||
|             32,  // R11FG11FB10F
 | ||||
|             128, // RGBA32UI
 | ||||
|             64,  // DXT1
 | ||||
|             128, // DXT23
 | ||||
|             128, // DXT45
 | ||||
| @ -125,6 +128,8 @@ struct SurfaceParams { | ||||
|             return PixelFormat::RGBA16F; | ||||
|         case Tegra::RenderTargetFormat::R11G11B10_FLOAT: | ||||
|             return PixelFormat::R11FG11FB10F; | ||||
|         case Tegra::RenderTargetFormat::RGBA32_UINT: | ||||
|             return PixelFormat::RGBA32UI; | ||||
|         default: | ||||
|             NGLOG_CRITICAL(HW_GPU, "Unimplemented format={}", static_cast<u32>(format)); | ||||
|             UNREACHABLE(); | ||||
| @ -148,6 +153,8 @@ struct SurfaceParams { | ||||
|             return PixelFormat::RGBA16F; | ||||
|         case Tegra::Texture::TextureFormat::BF10GF11RF11: | ||||
|             return PixelFormat::R11FG11FB10F; | ||||
|         case Tegra::Texture::TextureFormat::R32_G32_B32_A32: | ||||
|             return PixelFormat::RGBA32UI; | ||||
|         case Tegra::Texture::TextureFormat::DXT1: | ||||
|             return PixelFormat::DXT1; | ||||
|         case Tegra::Texture::TextureFormat::DXT23: | ||||
| @ -181,6 +188,8 @@ struct SurfaceParams { | ||||
|             return Tegra::Texture::TextureFormat::R16_G16_B16_A16; | ||||
|         case PixelFormat::R11FG11FB10F: | ||||
|             return Tegra::Texture::TextureFormat::BF10GF11RF11; | ||||
|         case PixelFormat::RGBA32UI: | ||||
|             return Tegra::Texture::TextureFormat::R32_G32_B32_A32; | ||||
|         case PixelFormat::DXT1: | ||||
|             return Tegra::Texture::TextureFormat::DXT1; | ||||
|         case PixelFormat::DXT23: | ||||
| @ -217,6 +226,8 @@ struct SurfaceParams { | ||||
|         case Tegra::RenderTargetFormat::RGBA16_FLOAT: | ||||
|         case Tegra::RenderTargetFormat::R11G11B10_FLOAT: | ||||
|             return ComponentType::Float; | ||||
|         case Tegra::RenderTargetFormat::RGBA32_UINT: | ||||
|             return ComponentType::UInt; | ||||
|         default: | ||||
|             NGLOG_CRITICAL(HW_GPU, "Unimplemented format={}", static_cast<u32>(format)); | ||||
|             UNREACHABLE(); | ||||
|  | ||||
| @ -65,6 +65,8 @@ u32 BytesPerPixel(TextureFormat format) { | ||||
|         return 1; | ||||
|     case TextureFormat::R16_G16_B16_A16: | ||||
|         return 8; | ||||
|     case TextureFormat::R32_G32_B32_A32: | ||||
|         return 16; | ||||
|     default: | ||||
|         UNIMPLEMENTED_MSG("Format not implemented"); | ||||
|         break; | ||||
| @ -94,6 +96,7 @@ std::vector<u8> UnswizzleTexture(VAddr address, TextureFormat format, u32 width, | ||||
|     case TextureFormat::B5G6R5: | ||||
|     case TextureFormat::R8: | ||||
|     case TextureFormat::R16_G16_B16_A16: | ||||
|     case TextureFormat::R32_G32_B32_A32: | ||||
|     case TextureFormat::BF10GF11RF11: | ||||
|     case TextureFormat::ASTC_2D_4X4: | ||||
|         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::R8: | ||||
|     case TextureFormat::BF10GF11RF11: | ||||
|     case TextureFormat::R32_G32_B32_A32: | ||||
|         // TODO(Subv): For the time being just forward the same data without any decoding.
 | ||||
|         rgba_data = texture_data; | ||||
|         break; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Subv
						Subv