Browse Source
Merge pull request #11688 from Kelebek1/x8d42
Implement X8_D24 pixel format
pull/15/merge
liamwhite
2 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with
21 additions and
2 deletions
-
src/video_core/renderer_opengl/maxwell_to_gl.h
-
src/video_core/renderer_vulkan/maxwell_to_vk.cpp
-
src/video_core/renderer_vulkan/vk_blit_screen.cpp
-
src/video_core/renderer_vulkan/vk_texture_cache.cpp
-
src/video_core/surface.cpp
-
src/video_core/surface.h
-
src/video_core/texture_cache/format_lookup_table.cpp
-
src/video_core/texture_cache/formatter.h
-
src/video_core/texture_cache/image_view_base.cpp
-
src/video_core/vulkan_common/vulkan_device.cpp
|
|
|
@ -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_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT}, // D32_FLOAT |
|
|
|
{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_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 |
|
|
|
|
|
|
|
@ -214,8 +214,9 @@ struct FormatTuple { |
|
|
|
{VK_FORMAT_E5B9G9R9_UFLOAT_PACK32}, // E5B9G9R9_FLOAT
|
|
|
|
|
|
|
|
// Depth formats
|
|
|
|
{VK_FORMAT_D32_SFLOAT, Attachable}, // D32_FLOAT
|
|
|
|
{VK_FORMAT_D16_UNORM, Attachable}, // D16_UNORM
|
|
|
|
{VK_FORMAT_D32_SFLOAT, Attachable}, // D32_FLOAT
|
|
|
|
{VK_FORMAT_D16_UNORM, Attachable}, // D16_UNORM
|
|
|
|
{VK_FORMAT_X8_D24_UNORM_PACK32, Attachable}, // X8_D24_UNORM
|
|
|
|
|
|
|
|
// Stencil formats
|
|
|
|
{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) { |
|
|
|
switch (framebuffer.pixel_format) { |
|
|
|
case Service::android::PixelFormat::Rgba8888: |
|
|
|
case Service::android::PixelFormat::Rgbx8888: |
|
|
|
return VK_FORMAT_A8B8G8R8_UNORM_PACK32; |
|
|
|
case Service::android::PixelFormat::Rgb565: |
|
|
|
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; |
|
|
|
case PixelFormat::D16_UNORM: |
|
|
|
case PixelFormat::D32_FLOAT: |
|
|
|
case PixelFormat::X8_D24_UNORM: |
|
|
|
return VK_IMAGE_ASPECT_DEPTH_BIT; |
|
|
|
case PixelFormat::S8_UINT: |
|
|
|
return VK_IMAGE_ASPECT_STENCIL_BIT; |
|
|
|
|
|
|
|
@ -85,6 +85,8 @@ PixelFormat PixelFormatFromDepthFormat(Tegra::DepthFormat format) { |
|
|
|
return PixelFormat::S8_UINT; |
|
|
|
case Tegra::DepthFormat::Z32_FLOAT_X24S8_UINT: |
|
|
|
return PixelFormat::D32_FLOAT_S8_UINT; |
|
|
|
case Tegra::DepthFormat::X8Z24_UNORM: |
|
|
|
return PixelFormat::X8_D24_UNORM; |
|
|
|
default: |
|
|
|
UNIMPLEMENTED_MSG("Unimplemented format={}", format); |
|
|
|
return PixelFormat::S8_UINT_D24_UNORM; |
|
|
|
@ -202,6 +204,7 @@ PixelFormat PixelFormatFromRenderTargetFormat(Tegra::RenderTargetFormat format) |
|
|
|
PixelFormat PixelFormatFromGPUPixelFormat(Service::android::PixelFormat format) { |
|
|
|
switch (format) { |
|
|
|
case Service::android::PixelFormat::Rgba8888: |
|
|
|
case Service::android::PixelFormat::Rgbx8888: |
|
|
|
return PixelFormat::A8B8G8R8_UNORM; |
|
|
|
case Service::android::PixelFormat::Rgb565: |
|
|
|
return PixelFormat::R5G6B5_UNORM; |
|
|
|
|
|
|
|
@ -115,6 +115,7 @@ enum class PixelFormat { |
|
|
|
// Depth formats |
|
|
|
D32_FLOAT = MaxColorFormat, |
|
|
|
D16_UNORM, |
|
|
|
X8_D24_UNORM, |
|
|
|
|
|
|
|
MaxDepthFormat, |
|
|
|
|
|
|
|
@ -251,6 +252,7 @@ constexpr std::array<u8, MaxPixelFormat> BLOCK_WIDTH_TABLE = {{ |
|
|
|
1, // E5B9G9R9_FLOAT |
|
|
|
1, // D32_FLOAT |
|
|
|
1, // D16_UNORM |
|
|
|
1, // X8_D24_UNORM |
|
|
|
1, // S8_UINT |
|
|
|
1, // D24_UNORM_S8_UINT |
|
|
|
1, // S8_UINT_D24_UNORM |
|
|
|
@ -360,6 +362,7 @@ constexpr std::array<u8, MaxPixelFormat> BLOCK_HEIGHT_TABLE = {{ |
|
|
|
1, // E5B9G9R9_FLOAT |
|
|
|
1, // D32_FLOAT |
|
|
|
1, // D16_UNORM |
|
|
|
1, // X8_D24_UNORM |
|
|
|
1, // S8_UINT |
|
|
|
1, // D24_UNORM_S8_UINT |
|
|
|
1, // S8_UINT_D24_UNORM |
|
|
|
@ -469,6 +472,7 @@ constexpr std::array<u8, MaxPixelFormat> BITS_PER_BLOCK_TABLE = {{ |
|
|
|
32, // E5B9G9R9_FLOAT |
|
|
|
32, // D32_FLOAT |
|
|
|
16, // D16_UNORM |
|
|
|
32, // X8_D24_UNORM |
|
|
|
8, // S8_UINT |
|
|
|
32, // D24_UNORM_S8_UINT |
|
|
|
32, // S8_UINT_D24_UNORM |
|
|
|
|
|
|
|
@ -142,6 +142,10 @@ PixelFormat PixelFormatFromTextureInfo(TextureFormat format, ComponentType red, |
|
|
|
return PixelFormat::D16_UNORM; |
|
|
|
case Hash(TextureFormat::Z16, UNORM, UINT, UINT, UINT, LINEAR): |
|
|
|
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): |
|
|
|
return PixelFormat::S8_UINT_D24_UNORM; |
|
|
|
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"; |
|
|
|
case PixelFormat::D16_UNORM: |
|
|
|
return "D16_UNORM"; |
|
|
|
case PixelFormat::X8_D24_UNORM: |
|
|
|
return "X8_D24_UNORM"; |
|
|
|
case PixelFormat::S8_UINT: |
|
|
|
return "S8_UINT"; |
|
|
|
case PixelFormat::D24_UNORM_S8_UINT: |
|
|
|
|
|
|
|
@ -85,6 +85,7 @@ bool ImageViewBase::SupportsAnisotropy() const noexcept { |
|
|
|
// Depth formats
|
|
|
|
case PixelFormat::D32_FLOAT: |
|
|
|
case PixelFormat::D16_UNORM: |
|
|
|
case PixelFormat::X8_D24_UNORM: |
|
|
|
// Stencil formats
|
|
|
|
case PixelFormat::S8_UINT: |
|
|
|
// DepthStencil formats
|
|
|
|
|
|
|
|
@ -203,6 +203,7 @@ std::unordered_map<VkFormat, VkFormatProperties> GetFormatProperties(vk::Physica |
|
|
|
VK_FORMAT_BC7_UNORM_BLOCK, |
|
|
|
VK_FORMAT_D16_UNORM, |
|
|
|
VK_FORMAT_D16_UNORM_S8_UINT, |
|
|
|
VK_FORMAT_X8_D24_UNORM_PACK32, |
|
|
|
VK_FORMAT_D24_UNORM_S8_UINT, |
|
|
|
VK_FORMAT_D32_SFLOAT, |
|
|
|
VK_FORMAT_D32_SFLOAT_S8_UINT, |
|
|
|
|