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 #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