From eb2d5bdeab1d5db70e6b5d1f39a62bc719e39fcd Mon Sep 17 00:00:00 2001
From: Ludovico de Nittis <ludovico.denittis@collabora.com>
Date: Wed, 20 Jan 2021 11:16:28 +0100
Subject: [PATCH] check-vulkan: Improve error messages

Signed-off-by: Ludovico de Nittis <ludovico.denittis@collabora.com>
---
 helpers/check-vulkan.c | 68 +++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 67 insertions(+), 1 deletion(-)

diff --git a/helpers/check-vulkan.c b/helpers/check-vulkan.c
index afcb60eb1..69909a9db 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;
 }
-- 
GitLab