X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fintel%2Fvulkan%2Fanv_util.c;h=3c1803aa05668fd6e8f36cef8f98dc9ccde893e4;hb=1e941a05283b6873d2501f17944e545f6c76166f;hp=5fbc7cc113b0bd81d4694e14a5662688c72f8ae3;hpb=ba26c791573727acf802787a3c7b5e19504d946c;p=mesa.git diff --git a/src/intel/vulkan/anv_util.c b/src/intel/vulkan/anv_util.c index 5fbc7cc113b..3c1803aa056 100644 --- a/src/intel/vulkan/anv_util.c +++ b/src/intel/vulkan/anv_util.c @@ -29,6 +29,8 @@ #include #include "anv_private.h" +#include "vk_enum_to_str.h" +#include "util/debug.h" /** Log an error message. */ void anv_printflike(1, 2) @@ -45,66 +47,74 @@ anv_loge(const char *format, ...) void anv_loge_v(const char *format, va_list va) { - fprintf(stderr, "vk: error: "); - vfprintf(stderr, format, va); - fprintf(stderr, "\n"); + intel_loge_v(format, va); } -void anv_printflike(3, 4) -__anv_finishme(const char *file, int line, const char *format, ...) +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); - fprintf(stderr, "%s:%d: FINISHME: %s\n", file, line, buffer); + snprintf(report, sizeof(report), "%s: %s", file, buffer); + + 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(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]; -#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) - ERROR_CASE(VK_ERROR_FRAGMENTED_POOL) - - /* Extension errors */ - ERROR_CASE(VK_ERROR_OUT_OF_DATE_KHR) - ERROR_CASE(VK_ERROR_OUT_OF_POOL_MEMORY_KHR) - - default: - assert(!"Unknown error"); - error_str = "unknown error"; - } - -#undef ERROR_CASE + const char *error_str = vk_Result_to_str(error); 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); + 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); } + 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; }