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