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 33 /** Log an error message. */ 34 void anv_printflike(1, 2) 35 anv_loge(const char *format, ...) 36 { 37 va_list va; 38 39 va_start(va, format); 40 anv_loge_v(format, va); 41 va_end(va); 42 } 43 44 /** \see anv_loge() */ 45 void 46 anv_loge_v(const char *format, va_list va) 47 { 48 fprintf(stderr, "vk: error: "); 49 vfprintf(stderr, format, va); 50 fprintf(stderr, "\n"); 51 } 52 53 void anv_printflike(3, 4) 54 __anv_finishme(const char *file, int line, const char *format, ...) 55 { 56 va_list ap; 57 char buffer[256]; 58 59 va_start(ap, format); 60 vsnprintf(buffer, sizeof(buffer), format, ap); 61 va_end(ap); 62 63 fprintf(stderr, "%s:%d: FINISHME: %s\n", file, line, buffer); 64 } 65 66 VkResult 67 __vk_errorf(VkResult error, const char *file, int line, const char *format, ...) 68 { 69 va_list ap; 70 char buffer[256]; 71 72 #define ERROR_CASE(error) case error: error_str = #error; break; 73 74 const char *error_str; 75 switch ((int32_t)error) { 76 77 /* Core errors */ 78 ERROR_CASE(VK_ERROR_OUT_OF_HOST_MEMORY) 79 ERROR_CASE(VK_ERROR_OUT_OF_DEVICE_MEMORY) 80 ERROR_CASE(VK_ERROR_INITIALIZATION_FAILED) 81 ERROR_CASE(VK_ERROR_DEVICE_LOST) 82 ERROR_CASE(VK_ERROR_MEMORY_MAP_FAILED) 83 ERROR_CASE(VK_ERROR_LAYER_NOT_PRESENT) 84 ERROR_CASE(VK_ERROR_EXTENSION_NOT_PRESENT) 85 ERROR_CASE(VK_ERROR_INCOMPATIBLE_DRIVER) 86 87 /* Extension errors */ 88 ERROR_CASE(VK_ERROR_OUT_OF_DATE_KHR) 89 90 default: 91 assert(!"Unknown error"); 92 error_str = "unknown error"; 93 } 94 95 #undef ERROR_CASE 96 97 if (format) { 98 va_start(ap, format); 99 vsnprintf(buffer, sizeof(buffer), format, ap); 100 va_end(ap); 101 102 fprintf(stderr, "%s:%d: %s (%s)\n", file, line, buffer, error_str); 103 } else { 104 fprintf(stderr, "%s:%d: %s\n", file, line, error_str); 105 } 106 107 return error; 108 } 109