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 34/** Log an error message. */ 35void anv_printflike(1, 2) 36anv_loge(const char *format, ...) 37{ 38 va_list va; 39 40 va_start(va, format); 41 anv_loge_v(format, va); 42 va_end(va); 43} 44 45/** \see anv_loge() */ 46void 47anv_loge_v(const char *format, va_list va) 48{ 49 intel_loge_v(format, va); 50} 51 52void anv_printflike(6, 7) 53__anv_perf_warn(struct anv_instance *instance, const void *object, 54 VkDebugReportObjectTypeEXT type, 55 const char *file, int line, const char *format, ...) 56{ 57 va_list ap; 58 char buffer[256]; 59 char report[512]; 60 61 va_start(ap, format); 62 vsnprintf(buffer, sizeof(buffer), format, ap); 63 va_end(ap); 64 65 snprintf(report, sizeof(report), "%s: %s", file, buffer); 66 67 vk_debug_report(&instance->debug_report_callbacks, 68 VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT, 69 type, 70 (uint64_t) (uintptr_t) object, 71 line, 72 0, 73 "anv", 74 report); 75 76 intel_logw("%s:%d: PERF: %s", file, line, buffer); 77} 78 79VkResult 80__vk_errorv(struct anv_instance *instance, const void *object, 81 VkDebugReportObjectTypeEXT type, VkResult error, 82 const char *file, int line, const char *format, va_list ap) 83{ 84 char buffer[256]; 85 char report[512]; 86 87 const char *error_str = vk_Result_to_str(error); 88 89 if (format) { 90 vsnprintf(buffer, sizeof(buffer), format, ap); 91 92 snprintf(report, sizeof(report), "%s:%d: %s (%s)", file, line, buffer, 93 error_str); 94 } else { 95 snprintf(report, sizeof(report), "%s:%d: %s", file, line, error_str); 96 } 97 98 if (instance) { 99 vk_debug_report(&instance->debug_report_callbacks, 100 VK_DEBUG_REPORT_ERROR_BIT_EXT, 101 type, 102 (uint64_t) (uintptr_t) object, 103 line, 104 0, 105 "anv", 106 report); 107 } 108 109 intel_loge("%s", report); 110 111 return error; 112} 113 114VkResult 115__vk_errorf(struct anv_instance *instance, const void *object, 116 VkDebugReportObjectTypeEXT type, VkResult error, 117 const char *file, int line, const char *format, ...) 118{ 119 va_list ap; 120 121 va_start(ap, format); 122 __vk_errorv(instance, object, type, error, file, line, format, ap); 123 va_end(ap); 124 125 return error; 126} 127