Module: Mesa
Branch: main
Commit: a32d76b545f6f35065a8ddfc6d454f1ccf9b7f09
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a32d76b545f6f35065a8ddfc6d454f1ccf9b7f09

Author: Juston Li <justo...@google.com>
Date:   Tue Nov  7 16:38:31 2023 -0800

venus: use vk_format helper for plane count

Signed-off-by: Juston Li <justo...@google.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26118>

---

 src/virtio/vulkan/vn_image.c | 52 +++++++++++++-------------------------------
 1 file changed, 15 insertions(+), 37 deletions(-)

diff --git a/src/virtio/vulkan/vn_image.c b/src/virtio/vulkan/vn_image.c
index 265e2927d59..9f358871674 100644
--- a/src/virtio/vulkan/vn_image.c
+++ b/src/virtio/vulkan/vn_image.c
@@ -14,6 +14,7 @@
 #include "venus-protocol/vn_protocol_driver_image_view.h"
 #include "venus-protocol/vn_protocol_driver_sampler.h"
 #include "venus-protocol/vn_protocol_driver_sampler_ycbcr_conversion.h"
+#include "vk_format.h"
 
 #include "vn_android.h"
 #include "vn_device.h"
@@ -23,46 +24,22 @@
 
 /* image commands */
 
+static inline uint32_t
+vn_image_get_plane_count(const VkImageCreateInfo *create_info)
+{
+   if (!(create_info->flags & VK_IMAGE_CREATE_DISJOINT_BIT))
+      return 1;
+
+   /* TODO VkDrmFormatModifierPropertiesEXT::drmFormatModifierPlaneCount */
+   assert(create_info->tiling != VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT);
+   return vk_format_get_plane_count(create_info->format);
+}
+
 static void
 vn_image_init_memory_requirements(struct vn_image *img,
                                   struct vn_device *dev,
-                                  const VkImageCreateInfo *create_info)
+                                  uint32_t plane_count)
 {
-   uint32_t plane_count = 1;
-   if (create_info->flags & VK_IMAGE_CREATE_DISJOINT_BIT) {
-      /* TODO VkDrmFormatModifierPropertiesEXT::drmFormatModifierPlaneCount */
-      assert(create_info->tiling != VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT);
-
-      switch (create_info->format) {
-      case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
-      case VK_FORMAT_G8_B8R8_2PLANE_422_UNORM:
-      case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16:
-      case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16:
-      case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16:
-      case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16:
-      case VK_FORMAT_G16_B16R16_2PLANE_420_UNORM:
-      case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:
-         plane_count = 2;
-         break;
-      case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
-      case VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM:
-      case VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM:
-      case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16:
-      case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16:
-      case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16:
-      case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16:
-      case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16:
-      case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16:
-      case VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM:
-      case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:
-      case VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM:
-         plane_count = 3;
-         break;
-      default:
-         plane_count = 1;
-         break;
-      }
-   }
    assert(plane_count <= ARRAY_SIZE(img->requirements));
 
    /* TODO add a per-device cache for the requirements */
@@ -215,7 +192,8 @@ vn_image_init(struct vn_device *dev,
    if (result != VK_SUCCESS)
       return result;
 
-   vn_image_init_memory_requirements(img, dev, create_info);
+   const uint32_t plane_count = vn_image_get_plane_count(create_info);
+   vn_image_init_memory_requirements(img, dev, plane_count);
 
    return VK_SUCCESS;
 }

Reply via email to