Mesa (main): vulkan/format: Add a vk_format_get_aspect_format helper

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jun 7 18:25:03 UTC 2022


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

Author: Jason Ekstrand <jason.ekstrand at collabora.com>
Date:   Mon Jun  6 11:32:43 2022 -0500

vulkan/format: Add a vk_format_get_aspect_format helper

Reviewed-by: Boris Brezillon <boris.brezillon at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16873>

---

 src/vulkan/util/vk_format.c | 24 ++++++++++++++++++++++++
 src/vulkan/util/vk_format.h |  4 ++++
 2 files changed, 28 insertions(+)

diff --git a/src/vulkan/util/vk_format.c b/src/vulkan/util/vk_format.c
index 039e629d0d9..51a6171e40d 100644
--- a/src/vulkan/util/vk_format.c
+++ b/src/vulkan/util/vk_format.c
@@ -366,6 +366,30 @@ vk_format_get_plane_format(VkFormat format, unsigned plane_id)
    }
 }
 
+VkFormat
+vk_format_get_aspect_format(VkFormat format, const VkImageAspectFlags aspect)
+{
+   assert(util_bitcount(aspect) == 1);
+   assert(aspect & vk_format_aspects(format));
+
+   switch (aspect) {
+   case VK_IMAGE_ASPECT_COLOR_BIT:
+      return format;
+   case VK_IMAGE_ASPECT_DEPTH_BIT:
+      return vk_format_depth_only(format);
+   case VK_IMAGE_ASPECT_STENCIL_BIT:
+      return vk_format_stencil_only(format);
+   case VK_IMAGE_ASPECT_PLANE_0_BIT:
+      return vk_format_get_plane_format(format, 0);
+   case VK_IMAGE_ASPECT_PLANE_1_BIT:
+      return vk_format_get_plane_format(format, 1);
+   case VK_IMAGE_ASPECT_PLANE_2_BIT:
+      return vk_format_get_plane_format(format, 2);
+   default:
+      unreachable("Cannot translate format aspect");
+   }
+}
+
 void
 vk_component_mapping_to_pipe_swizzle(VkComponentMapping mapping,
                                      unsigned char out_swizzle[4])
diff --git a/src/vulkan/util/vk_format.h b/src/vulkan/util/vk_format.h
index b83c2d03d44..a822aa5fc5a 100644
--- a/src/vulkan/util/vk_format.h
+++ b/src/vulkan/util/vk_format.h
@@ -27,6 +27,7 @@
 
 #include <vulkan/vulkan_core.h>
 #include "util/format/u_format.h"
+#include "util/u_math.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -191,6 +192,9 @@ vk_format_get_plane_count(VkFormat format)
 VkFormat
 vk_format_get_plane_format(VkFormat format, unsigned plane_id);
 
+VkFormat
+vk_format_get_aspect_format(VkFormat format, const VkImageAspectFlags aspect);
+
 #ifdef __cplusplus
 }
 #endif



More information about the mesa-commit mailing list