diff --git a/helpers/check-vulkan.c b/helpers/check-vulkan.c index afcb60eb1675da5183454a7ac0fc1180a614cfb4..69909a9db5237e218c1b3a3034aad39856740e4f 100644 --- a/helpers/check-vulkan.c +++ b/helpers/check-vulkan.c @@ -51,13 +51,79 @@ static const char *argv0; #define do_vk(expr, error) (_do_vk (#expr, expr, error)) +static const char * +get_vk_error_string (VkResult error_code) +{ + switch (error_code) + { +#define STR(r) case VK_##r: return #r + STR(SUCCESS); + STR(NOT_READY); + STR(TIMEOUT); + STR(EVENT_SET); + STR(EVENT_RESET); + STR(INCOMPLETE); + STR(ERROR_OUT_OF_HOST_MEMORY); + STR(ERROR_OUT_OF_DEVICE_MEMORY); + STR(ERROR_INITIALIZATION_FAILED); + STR(ERROR_DEVICE_LOST); + STR(ERROR_MEMORY_MAP_FAILED); + STR(ERROR_LAYER_NOT_PRESENT); + STR(ERROR_EXTENSION_NOT_PRESENT); + STR(ERROR_FEATURE_NOT_PRESENT); + STR(ERROR_INCOMPATIBLE_DRIVER); + STR(ERROR_TOO_MANY_OBJECTS); + STR(ERROR_FORMAT_NOT_SUPPORTED); + STR(ERROR_FRAGMENTED_POOL); +#if VK_HEADER_VERSION >= 131 + STR(ERROR_UNKNOWN); +#endif + STR(ERROR_OUT_OF_POOL_MEMORY); + STR(ERROR_INVALID_EXTERNAL_HANDLE); + STR(ERROR_FRAGMENTATION_EXT); +#if VK_HEADER_VERSION >= 97 + STR(ERROR_INVALID_DEVICE_ADDRESS_EXT); +#endif + STR(ERROR_SURFACE_LOST_KHR); + STR(ERROR_NATIVE_WINDOW_IN_USE_KHR); + STR(SUBOPTIMAL_KHR); + STR(ERROR_OUT_OF_DATE_KHR); + STR(ERROR_INCOMPATIBLE_DISPLAY_KHR); + STR(ERROR_VALIDATION_FAILED_EXT); + STR(ERROR_INVALID_SHADER_NV); +#if VK_HEADER_VERSION >= 135 +#if VK_HEADER_VERSION < 162 + STR(ERROR_INCOMPATIBLE_VERSION_KHR); +#endif + STR(THREAD_IDLE_KHR); + STR(THREAD_DONE_KHR); + STR(OPERATION_DEFERRED_KHR); + STR(OPERATION_NOT_DEFERRED_KHR); + STR(ERROR_PIPELINE_COMPILE_REQUIRED_EXT); +#endif + STR(ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT); + STR(ERROR_NOT_PERMITTED_EXT); +#if VK_HEADER_VERSION >= 105 + STR(ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT); +#endif +#if VK_HEADER_VERSION < 140 + STR(RESULT_RANGE_SIZE); +#endif + STR(RESULT_MAX_ENUM); +#undef STR + default: + return "UNKNOWN_ERROR"; + } +} + static gboolean _do_vk (const char *description, VkResult result, GError **error) { if (result != VK_SUCCESS) - return glnx_throw (error, "%s failed: %#X", description, result); + return glnx_throw (error, "%s failed: %s (%d)", description, + get_vk_error_string (result), result); return TRUE; }