1 /* 2 * Copyright 2015 Intel Corporation 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice (including the next 12 * paragraph) shall be included in all copies or substantial portions of the 13 * Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21 * IN THE SOFTWARE. 22 */ 23 24 #include <stdarg.h> 25 #include <stdio.h> 26 #include <stdlib.h> 27 #include <string.h> 28 #include <errno.h> 29 #include <assert.h> 30 31 #include "anv_private.h" 32 #include "vk_enum_to_str.h" 33 #include "util/debug.h" 34 35 /** Log an error message. */ 36 void anv_printflike(1, 2) 37 anv_loge(const char *format, ...) 38 { 39 va_list va; 40 41 va_start(va, format); 42 anv_loge_v(format, va); 43 va_end(va); 44 } 45 46 /** \see anv_loge() */ 47 void 48 anv_loge_v(const char *format, va_list va) 49 { 50 intel_loge_v(format, va); 51 } 52 53 void anv_printflike(6, 7) 54 __anv_perf_warn(struct anv_instance *instance, const void *object, 55 VkDebugReportObjectTypeEXT type, 56 const char *file, int line, const char *format, ...) 57 { 58 va_list ap; 59 char buffer[256]; 60 char report[256]; 61 62 va_start(ap, format); 63 vsnprintf(buffer, sizeof(buffer), format, ap); 64 va_end(ap); 65 66 snprintf(report, sizeof(report), "%s: %s", file, buffer); 67 68 vk_debug_report(&instance->debug_report_callbacks, 69 VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT, 70 type, 71 (uint64_t) (uintptr_t) object, 72 line, 73 0, 74 "anv", 75 report); 76 77 intel_logw("%s:%d: PERF: %s", file, line, buffer); 78 } 79 80 VkResult 81 __vk_errorf(struct anv_instance *instance, const void *object, 82 VkDebugReportObjectTypeEXT type, VkResult error, 83 const char *file, int line, const char *format, ...) 84 { 85 va_list ap; 86 char buffer[256]; 87 char report[256]; 88 89 const char *error_str = vk_Result_to_str(error); 90 91 if (format) { 92 va_start(ap, format); 93 vsnprintf(buffer, sizeof(buffer), format, ap); 94 va_end(ap); 95 96 snprintf(report, sizeof(report), "%s:%d: %s (%s)", file, line, buffer, 97 error_str); 98 } else { 99 snprintf(report, sizeof(report), "%s:%d: %s", file, line, error_str); 100 } 101 102 if (instance) { 103 vk_debug_report(&instance->debug_report_callbacks, 104 VK_DEBUG_REPORT_ERROR_BIT_EXT, 105 type, 106 (uint64_t) (uintptr_t) object, 107 line, 108 0, 109 "anv", 110 report); 111 } 112 113 intel_loge("%s", report); 114 115 if (error == VK_ERROR_DEVICE_LOST && 116 env_var_as_boolean("ANV_ABORT_ON_DEVICE_LOSS", false)) 117 abort(); 118 119 return error; 120 } 121