broadcom: Add vc5 CLIF dumping
[mesa.git] / src / intel / vulkan / anv_util.c
index ec5c9486d8c0001e5849deaf2a1956546c8394eb..ec61f7355ef693a8c572ebb6f77a6acff3f68aa5 100644 (file)
@@ -30,6 +30,7 @@
 
 #include "anv_private.h"
 #include "vk_enum_to_str.h"
+#include "util/debug.h"
 
 /** Log an error message.  */
 void anv_printflike(1, 2)
@@ -64,11 +65,41 @@ __anv_finishme(const char *file, int line, const char *format, ...)
    fprintf(stderr, "%s:%d: FINISHME: %s\n", file, line, buffer);
 }
 
+void anv_printflike(6, 7)
+__anv_perf_warn(struct anv_instance *instance, const void *object,
+                VkDebugReportObjectTypeEXT type,
+                const char *file, int line, const char *format, ...)
+{
+   va_list ap;
+   char buffer[256];
+   char report[256];
+
+   va_start(ap, format);
+   vsnprintf(buffer, sizeof(buffer), format, ap);
+   va_end(ap);
+
+   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);
+
+   fprintf(stderr, "%s:%d: PERF: %s\n", file, line, buffer);
+}
+
 VkResult
-__vk_errorf(VkResult error, const char *file, int line, const char *format, ...)
+__vk_errorf(struct anv_instance *instance, const void *object,
+                     VkDebugReportObjectTypeEXT type, VkResult error,
+                     const char *file, int line, const char *format, ...)
 {
    va_list ap;
    char buffer[256];
+   char report[256];
 
    const char *error_str = vk_Result_to_str(error);
 
@@ -77,10 +108,26 @@ __vk_errorf(VkResult error, const char *file, int line, const char *format, ...)
       vsnprintf(buffer, sizeof(buffer), format, ap);
       va_end(ap);
 
-      fprintf(stderr, "%s:%d: %s (%s)\n", file, line, buffer, error_str);
+      snprintf(report, sizeof(report), "%s:%d: %s (%s)", file, line, buffer,
+               error_str);
    } else {
-      fprintf(stderr, "%s:%d: %s\n", file, line, error_str);
+      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);
+
+   fprintf(stderr, "%s\n", report);
+
+   if (error == VK_ERROR_DEVICE_LOST &&
+       env_var_as_boolean("ANV_ABORT_ON_DEVICE_LOSS", false))
+      abort();
+
    return error;
 }