mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-10-30 22:36:46 +08:00 
			
		
		
		
	Merge pull request #11688 from Kelebek1/x8d42
Implement X8_D24 pixel format
This commit is contained in:
		
						commit
						ff3859d482
					
				| @ -116,6 +116,7 @@ constexpr std::array<FormatTuple, VideoCore::Surface::MaxPixelFormat> FORMAT_TAB | |||||||
|     {GL_RGB9_E5, GL_RGB, GL_UNSIGNED_INT_5_9_9_9_REV},                // E5B9G9R9_FLOAT
 |     {GL_RGB9_E5, GL_RGB, GL_UNSIGNED_INT_5_9_9_9_REV},                // E5B9G9R9_FLOAT
 | ||||||
|     {GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT},            // D32_FLOAT
 |     {GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT},            // D32_FLOAT
 | ||||||
|     {GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT},    // D16_UNORM
 |     {GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT},    // D16_UNORM
 | ||||||
|  |     {GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT_24_8}, // X8_D24_UNORM
 | ||||||
|     {GL_STENCIL_INDEX8, GL_STENCIL, GL_UNSIGNED_BYTE},                // S8_UINT
 |     {GL_STENCIL_INDEX8, GL_STENCIL, GL_UNSIGNED_BYTE},                // S8_UINT
 | ||||||
|     {GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8},    // D24_UNORM_S8_UINT
 |     {GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8},    // D24_UNORM_S8_UINT
 | ||||||
|     {GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8},    // S8_UINT_D24_UNORM
 |     {GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8},    // S8_UINT_D24_UNORM
 | ||||||
|  | |||||||
| @ -214,8 +214,9 @@ struct FormatTuple { | |||||||
|     {VK_FORMAT_E5B9G9R9_UFLOAT_PACK32},                        // E5B9G9R9_FLOAT
 |     {VK_FORMAT_E5B9G9R9_UFLOAT_PACK32},                        // E5B9G9R9_FLOAT
 | ||||||
| 
 | 
 | ||||||
|     // Depth formats
 |     // Depth formats
 | ||||||
|     {VK_FORMAT_D32_SFLOAT, Attachable}, // D32_FLOAT
 |     {VK_FORMAT_D32_SFLOAT, Attachable},          // D32_FLOAT
 | ||||||
|     {VK_FORMAT_D16_UNORM, Attachable},  // D16_UNORM
 |     {VK_FORMAT_D16_UNORM, Attachable},           // D16_UNORM
 | ||||||
|  |     {VK_FORMAT_X8_D24_UNORM_PACK32, Attachable}, // X8_D24_UNORM
 | ||||||
| 
 | 
 | ||||||
|     // Stencil formats
 |     // Stencil formats
 | ||||||
|     {VK_FORMAT_S8_UINT, Attachable}, // S8_UINT
 |     {VK_FORMAT_S8_UINT, Attachable}, // S8_UINT
 | ||||||
|  | |||||||
| @ -96,6 +96,7 @@ std::size_t GetSizeInBytes(const Tegra::FramebufferConfig& framebuffer) { | |||||||
| VkFormat GetFormat(const Tegra::FramebufferConfig& framebuffer) { | VkFormat GetFormat(const Tegra::FramebufferConfig& framebuffer) { | ||||||
|     switch (framebuffer.pixel_format) { |     switch (framebuffer.pixel_format) { | ||||||
|     case Service::android::PixelFormat::Rgba8888: |     case Service::android::PixelFormat::Rgba8888: | ||||||
|  |     case Service::android::PixelFormat::Rgbx8888: | ||||||
|         return VK_FORMAT_A8B8G8R8_UNORM_PACK32; |         return VK_FORMAT_A8B8G8R8_UNORM_PACK32; | ||||||
|     case Service::android::PixelFormat::Rgb565: |     case Service::android::PixelFormat::Rgb565: | ||||||
|         return VK_FORMAT_R5G6B5_UNORM_PACK16; |         return VK_FORMAT_R5G6B5_UNORM_PACK16; | ||||||
|  | |||||||
| @ -238,6 +238,7 @@ constexpr VkBorderColor ConvertBorderColor(const std::array<float, 4>& color) { | |||||||
|         return any_r ? VK_IMAGE_ASPECT_STENCIL_BIT : VK_IMAGE_ASPECT_DEPTH_BIT; |         return any_r ? VK_IMAGE_ASPECT_STENCIL_BIT : VK_IMAGE_ASPECT_DEPTH_BIT; | ||||||
|     case PixelFormat::D16_UNORM: |     case PixelFormat::D16_UNORM: | ||||||
|     case PixelFormat::D32_FLOAT: |     case PixelFormat::D32_FLOAT: | ||||||
|  |     case PixelFormat::X8_D24_UNORM: | ||||||
|         return VK_IMAGE_ASPECT_DEPTH_BIT; |         return VK_IMAGE_ASPECT_DEPTH_BIT; | ||||||
|     case PixelFormat::S8_UINT: |     case PixelFormat::S8_UINT: | ||||||
|         return VK_IMAGE_ASPECT_STENCIL_BIT; |         return VK_IMAGE_ASPECT_STENCIL_BIT; | ||||||
|  | |||||||
| @ -85,6 +85,8 @@ PixelFormat PixelFormatFromDepthFormat(Tegra::DepthFormat format) { | |||||||
|         return PixelFormat::S8_UINT; |         return PixelFormat::S8_UINT; | ||||||
|     case Tegra::DepthFormat::Z32_FLOAT_X24S8_UINT: |     case Tegra::DepthFormat::Z32_FLOAT_X24S8_UINT: | ||||||
|         return PixelFormat::D32_FLOAT_S8_UINT; |         return PixelFormat::D32_FLOAT_S8_UINT; | ||||||
|  |     case Tegra::DepthFormat::X8Z24_UNORM: | ||||||
|  |         return PixelFormat::X8_D24_UNORM; | ||||||
|     default: |     default: | ||||||
|         UNIMPLEMENTED_MSG("Unimplemented format={}", format); |         UNIMPLEMENTED_MSG("Unimplemented format={}", format); | ||||||
|         return PixelFormat::S8_UINT_D24_UNORM; |         return PixelFormat::S8_UINT_D24_UNORM; | ||||||
| @ -202,6 +204,7 @@ PixelFormat PixelFormatFromRenderTargetFormat(Tegra::RenderTargetFormat format) | |||||||
| PixelFormat PixelFormatFromGPUPixelFormat(Service::android::PixelFormat format) { | PixelFormat PixelFormatFromGPUPixelFormat(Service::android::PixelFormat format) { | ||||||
|     switch (format) { |     switch (format) { | ||||||
|     case Service::android::PixelFormat::Rgba8888: |     case Service::android::PixelFormat::Rgba8888: | ||||||
|  |     case Service::android::PixelFormat::Rgbx8888: | ||||||
|         return PixelFormat::A8B8G8R8_UNORM; |         return PixelFormat::A8B8G8R8_UNORM; | ||||||
|     case Service::android::PixelFormat::Rgb565: |     case Service::android::PixelFormat::Rgb565: | ||||||
|         return PixelFormat::R5G6B5_UNORM; |         return PixelFormat::R5G6B5_UNORM; | ||||||
|  | |||||||
| @ -115,6 +115,7 @@ enum class PixelFormat { | |||||||
|     // Depth formats
 |     // Depth formats
 | ||||||
|     D32_FLOAT = MaxColorFormat, |     D32_FLOAT = MaxColorFormat, | ||||||
|     D16_UNORM, |     D16_UNORM, | ||||||
|  |     X8_D24_UNORM, | ||||||
| 
 | 
 | ||||||
|     MaxDepthFormat, |     MaxDepthFormat, | ||||||
| 
 | 
 | ||||||
| @ -251,6 +252,7 @@ constexpr std::array<u8, MaxPixelFormat> BLOCK_WIDTH_TABLE = {{ | |||||||
|     1,  // E5B9G9R9_FLOAT
 |     1,  // E5B9G9R9_FLOAT
 | ||||||
|     1,  // D32_FLOAT
 |     1,  // D32_FLOAT
 | ||||||
|     1,  // D16_UNORM
 |     1,  // D16_UNORM
 | ||||||
|  |     1,  // X8_D24_UNORM
 | ||||||
|     1,  // S8_UINT
 |     1,  // S8_UINT
 | ||||||
|     1,  // D24_UNORM_S8_UINT
 |     1,  // D24_UNORM_S8_UINT
 | ||||||
|     1,  // S8_UINT_D24_UNORM
 |     1,  // S8_UINT_D24_UNORM
 | ||||||
| @ -360,6 +362,7 @@ constexpr std::array<u8, MaxPixelFormat> BLOCK_HEIGHT_TABLE = {{ | |||||||
|     1,  // E5B9G9R9_FLOAT
 |     1,  // E5B9G9R9_FLOAT
 | ||||||
|     1,  // D32_FLOAT
 |     1,  // D32_FLOAT
 | ||||||
|     1,  // D16_UNORM
 |     1,  // D16_UNORM
 | ||||||
|  |     1,  // X8_D24_UNORM
 | ||||||
|     1,  // S8_UINT
 |     1,  // S8_UINT
 | ||||||
|     1,  // D24_UNORM_S8_UINT
 |     1,  // D24_UNORM_S8_UINT
 | ||||||
|     1,  // S8_UINT_D24_UNORM
 |     1,  // S8_UINT_D24_UNORM
 | ||||||
| @ -469,6 +472,7 @@ constexpr std::array<u8, MaxPixelFormat> BITS_PER_BLOCK_TABLE = {{ | |||||||
|     32,  // E5B9G9R9_FLOAT
 |     32,  // E5B9G9R9_FLOAT
 | ||||||
|     32,  // D32_FLOAT
 |     32,  // D32_FLOAT
 | ||||||
|     16,  // D16_UNORM
 |     16,  // D16_UNORM
 | ||||||
|  |     32,  // X8_D24_UNORM
 | ||||||
|     8,   // S8_UINT
 |     8,   // S8_UINT
 | ||||||
|     32,  // D24_UNORM_S8_UINT
 |     32,  // D24_UNORM_S8_UINT
 | ||||||
|     32,  // S8_UINT_D24_UNORM
 |     32,  // S8_UINT_D24_UNORM
 | ||||||
|  | |||||||
| @ -142,6 +142,10 @@ PixelFormat PixelFormatFromTextureInfo(TextureFormat format, ComponentType red, | |||||||
|         return PixelFormat::D16_UNORM; |         return PixelFormat::D16_UNORM; | ||||||
|     case Hash(TextureFormat::Z16, UNORM, UINT, UINT, UINT, LINEAR): |     case Hash(TextureFormat::Z16, UNORM, UINT, UINT, UINT, LINEAR): | ||||||
|         return PixelFormat::D16_UNORM; |         return PixelFormat::D16_UNORM; | ||||||
|  |     case Hash(TextureFormat::X8Z24, UNORM): | ||||||
|  |         return PixelFormat::X8_D24_UNORM; | ||||||
|  |     case Hash(TextureFormat::X8Z24, UNORM, UINT, UINT, UINT, LINEAR): | ||||||
|  |         return PixelFormat::X8_D24_UNORM; | ||||||
|     case Hash(TextureFormat::Z24S8, UINT, UNORM, UNORM, UNORM, LINEAR): |     case Hash(TextureFormat::Z24S8, UINT, UNORM, UNORM, UNORM, LINEAR): | ||||||
|         return PixelFormat::S8_UINT_D24_UNORM; |         return PixelFormat::S8_UINT_D24_UNORM; | ||||||
|     case Hash(TextureFormat::Z24S8, UINT, UNORM, UINT, UINT, LINEAR): |     case Hash(TextureFormat::Z24S8, UINT, UNORM, UINT, UINT, LINEAR): | ||||||
|  | |||||||
| @ -211,6 +211,8 @@ struct fmt::formatter<VideoCore::Surface::PixelFormat> : fmt::formatter<fmt::str | |||||||
|                 return "D32_FLOAT"; |                 return "D32_FLOAT"; | ||||||
|             case PixelFormat::D16_UNORM: |             case PixelFormat::D16_UNORM: | ||||||
|                 return "D16_UNORM"; |                 return "D16_UNORM"; | ||||||
|  |             case PixelFormat::X8_D24_UNORM: | ||||||
|  |                 return "X8_D24_UNORM"; | ||||||
|             case PixelFormat::S8_UINT: |             case PixelFormat::S8_UINT: | ||||||
|                 return "S8_UINT"; |                 return "S8_UINT"; | ||||||
|             case PixelFormat::D24_UNORM_S8_UINT: |             case PixelFormat::D24_UNORM_S8_UINT: | ||||||
|  | |||||||
| @ -85,6 +85,7 @@ bool ImageViewBase::SupportsAnisotropy() const noexcept { | |||||||
|     // Depth formats
 |     // Depth formats
 | ||||||
|     case PixelFormat::D32_FLOAT: |     case PixelFormat::D32_FLOAT: | ||||||
|     case PixelFormat::D16_UNORM: |     case PixelFormat::D16_UNORM: | ||||||
|  |     case PixelFormat::X8_D24_UNORM: | ||||||
|     // Stencil formats
 |     // Stencil formats
 | ||||||
|     case PixelFormat::S8_UINT: |     case PixelFormat::S8_UINT: | ||||||
|     // DepthStencil formats
 |     // DepthStencil formats
 | ||||||
|  | |||||||
| @ -203,6 +203,7 @@ std::unordered_map<VkFormat, VkFormatProperties> GetFormatProperties(vk::Physica | |||||||
|         VK_FORMAT_BC7_UNORM_BLOCK, |         VK_FORMAT_BC7_UNORM_BLOCK, | ||||||
|         VK_FORMAT_D16_UNORM, |         VK_FORMAT_D16_UNORM, | ||||||
|         VK_FORMAT_D16_UNORM_S8_UINT, |         VK_FORMAT_D16_UNORM_S8_UINT, | ||||||
|  |         VK_FORMAT_X8_D24_UNORM_PACK32, | ||||||
|         VK_FORMAT_D24_UNORM_S8_UINT, |         VK_FORMAT_D24_UNORM_S8_UINT, | ||||||
|         VK_FORMAT_D32_SFLOAT, |         VK_FORMAT_D32_SFLOAT, | ||||||
|         VK_FORMAT_D32_SFLOAT_S8_UINT, |         VK_FORMAT_D32_SFLOAT_S8_UINT, | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user