diff --git a/src/xrt/auxiliary/vk/vk_helpers.c b/src/xrt/auxiliary/vk/vk_helpers.c index 3a80c7edf..dd3ff2458 100644 --- a/src/xrt/auxiliary/vk/vk_helpers.c +++ b/src/xrt/auxiliary/vk/vk_helpers.c @@ -496,6 +496,101 @@ vk_format_feature_string(VkFormatFeatureFlagBits code) } } +XRT_CHECK_RESULT const char * +vk_image_usage_flag_string(VkImageUsageFlagBits bits, bool null_on_unknown) +{ + switch (bits) { + ENUM_TO_STR(VK_IMAGE_USAGE_TRANSFER_SRC_BIT); + ENUM_TO_STR(VK_IMAGE_USAGE_TRANSFER_DST_BIT); + ENUM_TO_STR(VK_IMAGE_USAGE_SAMPLED_BIT); + ENUM_TO_STR(VK_IMAGE_USAGE_STORAGE_BIT); + ENUM_TO_STR(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT); + ENUM_TO_STR(VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT); + ENUM_TO_STR(VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT); + ENUM_TO_STR(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT); +#ifdef VK_KHR_video_decode_queue + ENUM_TO_STR(VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR); + ENUM_TO_STR(VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR); + ENUM_TO_STR(VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR); +#endif +#ifdef VK_EXT_fragment_density_map + ENUM_TO_STR(VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT); +#endif +#ifdef VK_KHR_fragment_shading_rate + ENUM_TO_STR(VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR); +#endif +#ifdef VK_EXT_host_image_copy + ENUM_TO_STR(VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT); +#endif +#ifdef VK_EXT_attachment_feedback_loop_layout + ENUM_TO_STR(VK_IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT); +#endif +#ifdef VK_HUAWEI_invocation_mask + ENUM_TO_STR(VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI); +#endif +#ifdef VK_QCOM_image_processing + ENUM_TO_STR(VK_IMAGE_USAGE_SAMPLE_WEIGHT_BIT_QCOM); +#endif +#ifdef VK_QCOM_image_processing + ENUM_TO_STR(VK_IMAGE_USAGE_SAMPLE_BLOCK_MATCH_BIT_QCOM); +#endif +#if defined(VK_NV_shading_rate_image) && !defined(VK_KHR_fragment_shading_rate) + ENUM_TO_STR(VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV); +#endif + default: + if (bits == 0) { + return "IMAGE USAGE: NO BITS SET"; + } else if (bits & (bits - 1)) { + return "IMAGE USAGE: MULTIPLE BITS SET"; + } else { + return null_on_unknown ? NULL : "IMAGE USAGE: UNKNOWN BIT"; + } + } +} + +XRT_CHECK_RESULT const char * +vk_composite_alpha_flag_string(VkCompositeAlphaFlagBitsKHR bits, bool null_on_unknown) +{ + switch (bits) { + ENUM_TO_STR(VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR); + ENUM_TO_STR(VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR); + ENUM_TO_STR(VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR); + ENUM_TO_STR(VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR); + default: + if (bits == 0) { + return "COMPOSITE ALPHA: NO BITS SET"; + } else if (bits & (bits - 1)) { + return "COMPOSITE ALPHA: MULTIPLE BITS SET"; + } else { + return null_on_unknown ? NULL : "COMPOSITE ALPHA: UNKNOWN BIT"; + } + } +} + +XRT_CHECK_RESULT const char * +vk_surface_transform_flag_string(VkSurfaceTransformFlagBitsKHR bits, bool null_on_unknown) +{ + switch (bits) { + ENUM_TO_STR(VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR); + ENUM_TO_STR(VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR); + ENUM_TO_STR(VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR); + ENUM_TO_STR(VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR); + ENUM_TO_STR(VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR); + ENUM_TO_STR(VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR); + ENUM_TO_STR(VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR); + ENUM_TO_STR(VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR); + ENUM_TO_STR(VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR); + default: + if (bits == 0) { + return "SURFACE TRANSFORM: NO BITS SET"; + } else if (bits & (bits - 1)) { + return "SURFACE TRANSFORM: MULTIPLE BITS SET"; + } else { + return null_on_unknown ? NULL : "SURFACE TRANSFORM: UNKNOWN BIT"; + } + } +} + XRT_CHECK_RESULT const char * xrt_swapchain_usage_string(enum xrt_swapchain_usage_bits code) { diff --git a/src/xrt/auxiliary/vk/vk_helpers.h b/src/xrt/auxiliary/vk/vk_helpers.h index 1ab6ae724..144970d62 100644 --- a/src/xrt/auxiliary/vk/vk_helpers.h +++ b/src/xrt/auxiliary/vk/vk_helpers.h @@ -464,6 +464,27 @@ vk_power_state_string(VkDisplayPowerStateEXT code); XRT_CHECK_RESULT const char * vk_format_feature_string(VkFormatFeatureFlagBits code); +/*! + * Returns the image usage flag if one valid bit is set, + * if multiple bits are set, will return 'MULTIPLE BIT SET'. + */ +XRT_CHECK_RESULT const char * +vk_image_usage_flag_string(VkImageUsageFlagBits bits, bool null_on_unknown); + +/*! + * Returns the composite alpha flag if one valid bit is set, + * if multiple bits are set, will return 'MULTIPLE BIT SET'. + */ +XRT_CHECK_RESULT const char * +vk_composite_alpha_flag_string(VkCompositeAlphaFlagBitsKHR bits, bool null_on_unknown); + +/*! + * Returns the surface transform flag if one valid bit is set, + * if multiple bits are set, will return 'MULTIPLE BIT SET'. + */ +XRT_CHECK_RESULT const char * +vk_surface_transform_flag_string(VkSurfaceTransformFlagBitsKHR bits, bool null_on_unknown); + XRT_CHECK_RESULT const char * xrt_swapchain_usage_string(enum xrt_swapchain_usage_bits code);