diff options
author | Chia-I Wu <olvaffe@gmail.com> | 2022-04-25 21:45:50 -0700 |
---|---|---|
committer | Marge Bot <emma+marge@anholt.net> | 2022-04-29 22:30:45 +0000 |
commit | 53d87865caca949ce3e73f2a8ec04c17d5818754 (patch) | |
tree | e93e583b30a405360f0f07bc0e4965086974fe9f | |
parent | ba9c917149e883b3e2b117de41e5a54dd6f9d0cc (diff) |
turnip: fix drm modifier support with planar formats
We need to advertise the results of tu6_plane_count and handle
VK_IMAGE_ASPECT_MEMORY_PLANE_*_BIT.
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/6374
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16169>
-rw-r--r-- | src/freedreno/vulkan/tu_formats.c | 4 | ||||
-rw-r--r-- | src/freedreno/vulkan/tu_image.c | 5 | ||||
-rw-r--r-- | src/freedreno/vulkan/tu_private.h | 1 |
3 files changed, 7 insertions, 3 deletions
diff --git a/src/freedreno/vulkan/tu_formats.c b/src/freedreno/vulkan/tu_formats.c index 429c898e5c0..600088835bc 100644 --- a/src/freedreno/vulkan/tu_formats.c +++ b/src/freedreno/vulkan/tu_formats.c @@ -329,7 +329,7 @@ tu_GetPhysicalDeviceFormatProperties2( if (pFormatProperties->formatProperties.linearTilingFeatures) { vk_outarray_append_typed(VkDrmFormatModifierPropertiesEXT, &out, mod_props) { mod_props->drmFormatModifier = DRM_FORMAT_MOD_LINEAR; - mod_props->drmFormatModifierPlaneCount = 1; + mod_props->drmFormatModifierPlaneCount = tu6_plane_count(format); mod_props->drmFormatModifierTilingFeatures = pFormatProperties->formatProperties.linearTilingFeatures; } @@ -341,7 +341,7 @@ tu_GetPhysicalDeviceFormatProperties2( ubwc_possible(format, VK_IMAGE_TYPE_2D, 0, 0, physical_device->info, VK_SAMPLE_COUNT_1_BIT)) { vk_outarray_append_typed(VkDrmFormatModifierPropertiesEXT, &out, mod_props) { mod_props->drmFormatModifier = DRM_FORMAT_MOD_QCOM_COMPRESSED; - mod_props->drmFormatModifierPlaneCount = 1; + mod_props->drmFormatModifierPlaneCount = tu6_plane_count(format); mod_props->drmFormatModifierTilingFeatures = pFormatProperties->formatProperties.optimalTilingFeatures; } diff --git a/src/freedreno/vulkan/tu_image.c b/src/freedreno/vulkan/tu_image.c index 4c214f265c1..ff011f9bc3a 100644 --- a/src/freedreno/vulkan/tu_image.c +++ b/src/freedreno/vulkan/tu_image.c @@ -37,7 +37,7 @@ #include "tu_cs.h" -static uint32_t +uint32_t tu6_plane_count(VkFormat format) { switch (format) { @@ -71,10 +71,13 @@ tu6_plane_index(VkFormat format, VkImageAspectFlags aspect_mask) { switch (aspect_mask) { default: + assert(aspect_mask != VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT); return 0; case VK_IMAGE_ASPECT_PLANE_1_BIT: + case VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT: return 1; case VK_IMAGE_ASPECT_PLANE_2_BIT: + case VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT: return 2; case VK_IMAGE_ASPECT_STENCIL_BIT: return format == VK_FORMAT_D32_SFLOAT_S8_UINT; diff --git a/src/freedreno/vulkan/tu_private.h b/src/freedreno/vulkan/tu_private.h index 00563280436..643040929c9 100644 --- a/src/freedreno/vulkan/tu_private.h +++ b/src/freedreno/vulkan/tu_private.h @@ -1675,6 +1675,7 @@ tu_get_levelCount(const struct tu_image *image, : range->levelCount; } +uint32_t tu6_plane_count(VkFormat format); enum pipe_format tu6_plane_format(VkFormat format, uint32_t plane); uint32_t tu6_plane_index(VkFormat format, VkImageAspectFlags aspect_mask); |