i965: fix unsigned long overflows for i386
[mesa.git] / src / vulkan / anv_util.c
index a78847acec6e4bffd9817b6bdffe7334042054c9..22fd01c9495f83e05dbdbdf3b3402592fcda6d46 100644 (file)
@@ -83,48 +83,45 @@ anv_abortfv(const char *format, va_list va)
 }
 
 VkResult
-__vk_error(VkResult error, const char *file, int line)
+__vk_errorf(VkResult error, const char *file, int line, const char *format, ...)
 {
-   static const char *error_names[] = {
-      "VK_ERROR_UNKNOWN",
-      "VK_ERROR_UNAVAILABLE",
-      "VK_ERROR_INITIALIZATION_FAILED",
-      "VK_ERROR_OUT_OF_HOST_MEMORY",
-      "VK_ERROR_OUT_OF_DEVICE_MEMORY",
-      "VK_ERROR_DEVICE_ALREADY_CREATED",
-      "VK_ERROR_DEVICE_LOST",
-      "VK_ERROR_INVALID_POINTER",
-      "VK_ERROR_INVALID_VALUE",
-      "VK_ERROR_INVALID_HANDLE",
-      "VK_ERROR_INVALID_ORDINAL",
-      "VK_ERROR_INVALID_MEMORY_SIZE",
-      "VK_ERROR_INVALID_EXTENSION",
-      "VK_ERROR_INVALID_FLAGS",
-      "VK_ERROR_INVALID_ALIGNMENT",
-      "VK_ERROR_INVALID_FORMAT",
-      "VK_ERROR_INVALID_IMAGE",
-      "VK_ERROR_INVALID_DESCRIPTOR_SET_DATA",
-      "VK_ERROR_INVALID_QUEUE_TYPE",
-      "VK_ERROR_UNSUPPORTED_SHADER_IL_VERSION",
-      "VK_ERROR_BAD_SHADER_CODE",
-      "VK_ERROR_BAD_PIPELINE_DATA",
-      "VK_ERROR_NOT_MAPPABLE",
-      "VK_ERROR_MEMORY_MAP_FAILED",
-      "VK_ERROR_MEMORY_UNMAP_FAILED",
-      "VK_ERROR_INCOMPATIBLE_DEVICE",
-      "VK_ERROR_INCOMPATIBLE_DRIVER",
-      "VK_ERROR_INCOMPLETE_COMMAND_BUFFER",
-      "VK_ERROR_BUILDING_COMMAND_BUFFER",
-      "VK_ERROR_MEMORY_NOT_BOUND",
-      "VK_ERROR_INCOMPATIBLE_QUEUE",
-      "VK_ERROR_INVALID_LAYER",
-   };
-
-   if (error <= VK_ERROR_UNKNOWN && error >= VK_ERROR_INVALID_LAYER)
-      fprintf(stderr, "%s:%d: %s\n",
-              file, line, error_names[-error - VK_ERROR_UNKNOWN]);
-   else
-      fprintf(stderr, "%s:%d: vk error %d\n", file, line, error);
+   va_list ap;
+   char buffer[256];
+
+#define ERROR_CASE(error) case error: error_str = #error; break;
+
+   const char *error_str;
+   switch ((int32_t)error) {
+
+   /* Core errors */
+   ERROR_CASE(VK_ERROR_OUT_OF_HOST_MEMORY)
+   ERROR_CASE(VK_ERROR_OUT_OF_DEVICE_MEMORY)
+   ERROR_CASE(VK_ERROR_INITIALIZATION_FAILED)
+   ERROR_CASE(VK_ERROR_DEVICE_LOST)
+   ERROR_CASE(VK_ERROR_MEMORY_MAP_FAILED)
+   ERROR_CASE(VK_ERROR_LAYER_NOT_PRESENT)
+   ERROR_CASE(VK_ERROR_EXTENSION_NOT_PRESENT)
+   ERROR_CASE(VK_ERROR_INCOMPATIBLE_DRIVER)
+
+   /* Extension errors */
+   ERROR_CASE(VK_ERROR_OUT_OF_DATE_KHR)
+
+   default:
+      assert(!"Unknown error");
+      error_str = "unknown error";
+   }
+
+#undef ERROR_CASE
+
+   if (format) {
+      va_start(ap, format);
+      vsnprintf(buffer, sizeof(buffer), format, ap);
+      va_end(ap);
+
+      fprintf(stderr, "%s:%d: %s (%s)\n", file, line, buffer, error_str);
+   } else {
+      fprintf(stderr, "%s:%d: %s\n", file, line, error_str);
+   }
 
    return error;
 }