anv/entrypoints: Better handle promoted extensions
[mesa.git] / src / intel / vulkan / anv_util.c
index 59f893492b7c4efdfcb8889e707ddb352ac28924..1159ccecc6a9fea5fdda9217b703d399fc1cbc1c 100644 (file)
@@ -30,7 +30,6 @@
 
 #include "anv_private.h"
 #include "vk_enum_to_str.h"
-#include "util/debug.h"
 
 /** Log an error message.  */
 void anv_printflike(1, 2)
@@ -57,7 +56,7 @@ __anv_perf_warn(struct anv_instance *instance, const void *object,
 {
    va_list ap;
    char buffer[256];
-   char report[256];
+   char report[512];
 
    va_start(ap, format);
    vsnprintf(buffer, sizeof(buffer), format, ap);
@@ -65,33 +64,30 @@ __anv_perf_warn(struct anv_instance *instance, const void *object,
 
    snprintf(report, sizeof(report), "%s: %s", file, buffer);
 
-   anv_debug_report(instance,
-                    VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT,
-                    type,
-                    (uint64_t) (uintptr_t) object,
-                    line,
-                    0,
-                    "anv",
-                    report);
+   vk_debug_report(&instance->debug_report_callbacks,
+                   VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT,
+                   type,
+                   (uint64_t) (uintptr_t) object,
+                   line,
+                   0,
+                   "anv",
+                   report);
 
    intel_logw("%s:%d: PERF: %s", file, line, buffer);
 }
 
 VkResult
-__vk_errorf(struct anv_instance *instance, const void *object,
-                     VkDebugReportObjectTypeEXT type, VkResult error,
-                     const char *file, int line, const char *format, ...)
+__vk_errorv(struct anv_instance *instance, const void *object,
+            VkDebugReportObjectTypeEXT type, VkResult error,
+            const char *file, int line, const char *format, va_list ap)
 {
-   va_list ap;
    char buffer[256];
-   char report[256];
+   char report[512];
 
    const char *error_str = vk_Result_to_str(error);
 
    if (format) {
-      va_start(ap, format);
       vsnprintf(buffer, sizeof(buffer), format, ap);
-      va_end(ap);
 
       snprintf(report, sizeof(report), "%s:%d: %s (%s)", file, line, buffer,
                error_str);
@@ -99,20 +95,32 @@ __vk_errorf(struct anv_instance *instance, const void *object,
       snprintf(report, sizeof(report), "%s:%d: %s", file, line, error_str);
    }
 
-   anv_debug_report(instance,
-                    VK_DEBUG_REPORT_ERROR_BIT_EXT,
-                    type,
-                    (uint64_t) (uintptr_t) object,
-                    line,
-                    0,
-                    "anv",
-                    report);
+   if (instance) {
+      vk_debug_report(&instance->debug_report_callbacks,
+                      VK_DEBUG_REPORT_ERROR_BIT_EXT,
+                      type,
+                      (uint64_t) (uintptr_t) object,
+                      line,
+                      0,
+                      "anv",
+                      report);
+   }
 
    intel_loge("%s", report);
 
-   if (error == VK_ERROR_DEVICE_LOST &&
-       env_var_as_boolean("ANV_ABORT_ON_DEVICE_LOSS", false))
-      abort();
+   return error;
+}
+
+VkResult
+__vk_errorf(struct anv_instance *instance, const void *object,
+            VkDebugReportObjectTypeEXT type, VkResult error,
+            const char *file, int line, const char *format, ...)
+{
+   va_list ap;
+
+   va_start(ap, format);
+   __vk_errorv(instance, object, type, error, file, line, format, ap);
+   va_end(ap);
 
    return error;
 }