blob: 4e1569c1e0c6f5f5c3d5714e67789acfe388c4f7 [file] [log] [blame]
Courtney Goeltzenleuchterf579fa62015-06-10 17:39:03 -06001//
2// File: vk_debug_report_lunarg.h
3//
4/*
5 * Vulkan
6 *
7 * Copyright (C) 2015 LunarG, Inc.
8 *
9 * Permission is hereby granted, free of charge, to any person obtaining a
10 * copy of this software and associated documentation files (the "Software"),
11 * to deal in the Software without restriction, including without limitation
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
15 *
16 * The above copyright notice and this permission notice shall be included
17 * in all copies or substantial portions of the Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
24 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25 * DEALINGS IN THE SOFTWARE.
26 *
27 * Authors:
28 * Jon Ashburn <jon@lunarg.com>
29 * Courtney Goeltzenleuchter <courtney@lunarg.com>
30 */
31
32#ifndef __VK_DEBUG_REPORT_LUNARG_H__
33#define __VK_DEBUG_REPORT_LUNARG_H__
34
35#include "vulkan.h"
36
37#define VK_DEBUG_REPORT_EXTENSION_NUMBER 2
Courtney Goeltzenleuchter110fdf92015-06-29 15:39:26 -060038#define VK_DEBUG_REPORT_EXTENSION_VERSION VK_MAKE_VERSION(0, 1, 0)
Courtney Goeltzenleuchterf579fa62015-06-10 17:39:03 -060039#ifdef __cplusplus
40extern "C"
41{
42#endif // __cplusplus
43
44/*
45***************************************************************************************************
46* DebugReport Vulkan Extension API
47***************************************************************************************************
48*/
Tony Barbour1d2cd3f2015-07-03 10:33:54 -060049typedef enum {
50 VK_OBJECT_TYPE_INSTANCE = 0,
51 VK_OBJECT_TYPE_PHYSICAL_DEVICE = 1,
52 VK_OBJECT_TYPE_DEVICE = 2,
53 VK_OBJECT_TYPE_QUEUE = 3,
54 VK_OBJECT_TYPE_COMMAND_BUFFER = 4,
55 VK_OBJECT_TYPE_DEVICE_MEMORY = 5,
56 VK_OBJECT_TYPE_BUFFER = 6,
57 VK_OBJECT_TYPE_BUFFER_VIEW = 7,
58 VK_OBJECT_TYPE_IMAGE = 8,
59 VK_OBJECT_TYPE_IMAGE_VIEW = 9,
60 VK_OBJECT_TYPE_ATTACHMENT_VIEW = 10,
61 VK_OBJECT_TYPE_SHADER_MODULE = 12,
62 VK_OBJECT_TYPE_SHADER = 13,
63 VK_OBJECT_TYPE_PIPELINE = 14,
64 VK_OBJECT_TYPE_PIPELINE_LAYOUT = 15,
65 VK_OBJECT_TYPE_SAMPLER = 16,
66 VK_OBJECT_TYPE_DESCRIPTOR_SET = 17,
67 VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT = 18,
68 VK_OBJECT_TYPE_DESCRIPTOR_POOL = 19,
Tony Barboura05dbaa2015-07-09 17:31:46 -060069 VK_OBJECT_TYPE_DYNAMIC_VIEWPORT_STATE = 20,
70 VK_OBJECT_TYPE_DYNAMIC_RASTER_STATE = 21,
71 VK_OBJECT_TYPE_DYNAMIC_COLOR_BLEND_STATE = 22,
72 VK_OBJECT_TYPE_DYNAMIC_DEPTH_STENCIL_STATE = 23,
Tony Barbour1d2cd3f2015-07-03 10:33:54 -060073 VK_OBJECT_TYPE_FENCE = 24,
74 VK_OBJECT_TYPE_SEMAPHORE = 25,
75 VK_OBJECT_TYPE_EVENT = 26,
76 VK_OBJECT_TYPE_QUERY_POOL = 27,
77 VK_OBJECT_TYPE_FRAMEBUFFER = 28,
78 VK_OBJECT_TYPE_RENDER_PASS = 29,
79 VK_OBJECT_TYPE_PIPELINE_CACHE = 30,
80 VK_OBJECT_TYPE_SWAP_CHAIN_WSI = 31,
Cody Northrope62183e2015-07-09 18:08:05 -060081 VK_OBJECT_TYPE_CMD_POOL = 32,
Tony Barbour1d2cd3f2015-07-03 10:33:54 -060082 VK_OBJECT_TYPE_BEGIN_RANGE = VK_OBJECT_TYPE_INSTANCE,
Cody Northrope62183e2015-07-09 18:08:05 -060083 VK_OBJECT_TYPE_END_RANGE = VK_OBJECT_TYPE_CMD_POOL,
84 VK_OBJECT_TYPE_NUM = (VK_OBJECT_TYPE_CMD_POOL - VK_OBJECT_TYPE_INSTANCE + 1),
Tony Barbour1d2cd3f2015-07-03 10:33:54 -060085 VK_OBJECT_TYPE_MAX_ENUM = 0x7FFFFFFF
86} VkDbgObjectType;
Courtney Goeltzenleuchterf579fa62015-06-10 17:39:03 -060087
Tony Barboura05dbaa2015-07-09 17:31:46 -060088static inline const char* string_VkDbgObjectType(VkDbgObjectType input_value)
89{
90 switch ((VkDbgObjectType)input_value)
91 {
Mark Lobodzinskia6650b32015-07-17 12:00:21 -060092 case VK_OBJECT_TYPE_CMD_POOL:
93 return "VK_OBJECT_TYPE_CMD_POOL";
Tony Barboura05dbaa2015-07-09 17:31:46 -060094 case VK_OBJECT_TYPE_BUFFER:
95 return "VK_OBJECT_TYPE_BUFFER";
96 case VK_OBJECT_TYPE_BUFFER_VIEW:
97 return "VK_OBJECT_TYPE_BUFFER_VIEW";
98 case VK_OBJECT_TYPE_ATTACHMENT_VIEW:
99 return "VK_OBJECT_TYPE_ATTACHMENT_VIEW";
100 case VK_OBJECT_TYPE_COMMAND_BUFFER:
101 return "VK_OBJECT_TYPE_COMMAND_BUFFER";
102 case VK_OBJECT_TYPE_DESCRIPTOR_POOL:
103 return "VK_OBJECT_TYPE_DESCRIPTOR_POOL";
104 case VK_OBJECT_TYPE_DESCRIPTOR_SET:
105 return "VK_OBJECT_TYPE_DESCRIPTOR_SET";
106 case VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT:
107 return "VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT";
108 case VK_OBJECT_TYPE_DEVICE:
109 return "VK_OBJECT_TYPE_DEVICE";
110 case VK_OBJECT_TYPE_DEVICE_MEMORY:
111 return "VK_OBJECT_TYPE_DEVICE_MEMORY";
112 case VK_OBJECT_TYPE_DYNAMIC_COLOR_BLEND_STATE:
113 return "VK_OBJECT_TYPE_DYNAMIC_COLOR_BLEND_STATE";
114 case VK_OBJECT_TYPE_DYNAMIC_DEPTH_STENCIL_STATE:
115 return "VK_OBJECT_TYPE_DYNAMIC_DEPTH_STENCIL_STATE";
116 case VK_OBJECT_TYPE_DYNAMIC_RASTER_STATE:
117 return "VK_OBJECT_TYPE_DYNAMIC_RASTER_STATE";
118 case VK_OBJECT_TYPE_DYNAMIC_VIEWPORT_STATE:
119 return "VK_OBJECT_TYPE_DYNAMIC_VIEPORT_STATE";
120 case VK_OBJECT_TYPE_EVENT:
121 return "VK_OBJECT_TYPE_EVENT";
122 case VK_OBJECT_TYPE_FENCE:
123 return "VK_OBJECT_TYPE_FENCE";
124 case VK_OBJECT_TYPE_FRAMEBUFFER:
125 return "VK_OBJECT_TYPE_FRAMEBUFFER";
126 case VK_OBJECT_TYPE_IMAGE:
127 return "VK_OBJECT_TYPE_IMAGE";
128 case VK_OBJECT_TYPE_IMAGE_VIEW:
129 return "VK_OBJECT_TYPE_IMAGE_VIEW";
130 case VK_OBJECT_TYPE_INSTANCE:
131 return "VK_OBJECT_TYPE_INSTANCE";
132 case VK_OBJECT_TYPE_PHYSICAL_DEVICE:
133 return "VK_OBJECT_TYPE_PHYSICAL_DEVICE";
134 case VK_OBJECT_TYPE_PIPELINE:
135 return "VK_OBJECT_TYPE_PIPELINE";
136 case VK_OBJECT_TYPE_PIPELINE_LAYOUT:
137 return "VK_OBJECT_TYPE_PIPELINE_LAYOUT";
Mark Lobodzinskia6650b32015-07-17 12:00:21 -0600138 case VK_OBJECT_TYPE_PIPELINE_CACHE:
139 return "VK_OBJECT_TYPE_PIPELINE_CACHE";
Tony Barboura05dbaa2015-07-09 17:31:46 -0600140 case VK_OBJECT_TYPE_QUERY_POOL:
141 return "VK_OBJECT_TYPE_QUERY_POOL";
142 case VK_OBJECT_TYPE_QUEUE:
143 return "VK_OBJECT_TYPE_QUEUE";
144 case VK_OBJECT_TYPE_RENDER_PASS:
145 return "VK_OBJECT_TYPE_RENDER_PASS";
146 case VK_OBJECT_TYPE_SAMPLER:
147 return "VK_OBJECT_TYPE_SAMPLER";
148 case VK_OBJECT_TYPE_SEMAPHORE:
149 return "VK_OBJECT_TYPE_SEMAPHORE";
150 case VK_OBJECT_TYPE_SHADER:
151 return "VK_OBJECT_TYPE_SHADER";
152 case VK_OBJECT_TYPE_SHADER_MODULE:
153 return "VK_OBJECT_TYPE_SHADER_MODULE";
Mark Lobodzinskia6650b32015-07-17 12:00:21 -0600154 case VK_OBJECT_TYPE_SWAP_CHAIN_WSI:
155 return "VK_OBJECT_TYPE_SWAP_CHAIN_WSI";
Tony Barboura05dbaa2015-07-09 17:31:46 -0600156 default:
157 return "Unhandled VkObjectType";
158 }
159}
Courtney Goeltzenleuchter05159a92015-07-30 11:32:46 -0600160#define VK_DEBUG_REPORT_EXTENSION_NAME "DEBUG_REPORT"
Courtney Goeltzenleuchterf579fa62015-06-10 17:39:03 -0600161
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600162VK_DEFINE_NONDISP_HANDLE(VkDbgMsgCallback)
Courtney Goeltzenleuchterf579fa62015-06-10 17:39:03 -0600163
164// ------------------------------------------------------------------------------------------------
165// Enumerations
166
167typedef enum VkDbgReportFlags_
168{
Courtney Goeltzenleuchterf3387652015-07-08 18:41:08 -0600169 VK_DBG_REPORT_INFO_BIT = 0x0001,
170 VK_DBG_REPORT_WARN_BIT = 0x0002,
171 VK_DBG_REPORT_PERF_WARN_BIT = 0x0004,
172 VK_DBG_REPORT_ERROR_BIT = 0x0008,
173 VK_DBG_REPORT_DEBUG_BIT = 0x0010,
Courtney Goeltzenleuchterf579fa62015-06-10 17:39:03 -0600174} VkDbgReportFlags;
175
Courtney Goeltzenleuchter1b6f0302015-06-11 15:56:14 -0600176// Debug Report ERROR codes
177typedef enum _DEBUG_REPORT_ERROR
178{
179 DEBUG_REPORT_NONE, // Used for INFO & other non-error messages
180 DEBUG_REPORT_CALLBACK_REF, // Callbacks were not destroyed prior to calling DestroyInstance
181} DEBUG_REPORT_ERROR;
182
Courtney Goeltzenleuchterf579fa62015-06-10 17:39:03 -0600183#define VK_DEBUG_REPORT_ENUM_EXTEND(type, id) ((type)(VK_DEBUG_REPORT_EXTENSION_NUMBER * -1000 + (id)))
184
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600185#define VK_OBJECT_TYPE_MSG_CALLBACK VK_DEBUG_REPORT_ENUM_EXTEND(VkDbgObjectType, 0)
Courtney Goeltzenleuchterf579fa62015-06-10 17:39:03 -0600186// ------------------------------------------------------------------------------------------------
187// Vulkan function pointers
188
189typedef void (*PFN_vkDbgMsgCallback)(
190 VkFlags msgFlags,
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600191 VkDbgObjectType objType,
192 uint64_t srcObject,
Courtney Goeltzenleuchterf579fa62015-06-10 17:39:03 -0600193 size_t location,
194 int32_t msgCode,
195 const char* pLayerPrefix,
196 const char* pMsg,
197 void* pUserData);
198
199// ------------------------------------------------------------------------------------------------
200// API functions
201
Jon Ashburne67741a2015-08-06 13:56:43 -0600202typedef VkResult (VKAPI *PFN_vkDbgCreateMsgCallback)(VkInstance instance, VkFlags msgFlags, const PFN_vkDbgMsgCallback pfnMsgCallback, void* pUserData, VkDbgMsgCallback* pMsgCallback);
Courtney Goeltzenleuchterf579fa62015-06-10 17:39:03 -0600203typedef VkResult (VKAPI *PFN_vkDbgDestroyMsgCallback)(VkInstance instance, VkDbgMsgCallback msgCallback);
Courtney Goeltzenleuchterf579fa62015-06-10 17:39:03 -0600204
205#ifdef VK_PROTOTYPES
206
207// DebugReport extension entrypoints
208VkResult VKAPI vkDbgCreateMsgCallback(
209 VkInstance instance,
210 VkFlags msgFlags,
211 const PFN_vkDbgMsgCallback pfnMsgCallback,
212 void* pUserData,
213 VkDbgMsgCallback* pMsgCallback);
214
215VkResult VKAPI vkDbgDestroyMsgCallback(
216 VkInstance instance,
217 VkDbgMsgCallback msgCallback);
218
219// DebugReport utility callback functions
220void VKAPI vkDbgStringCallback(
221 VkFlags msgFlags,
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600222 VkDbgObjectType objType,
223 uint64_t srcObject,
Courtney Goeltzenleuchterf579fa62015-06-10 17:39:03 -0600224 size_t location,
225 int32_t msgCode,
226 const char* pLayerPrefix,
227 const char* pMsg,
228 void* pUserData);
229
230void VKAPI vkDbgStdioCallback(
231 VkFlags msgFlags,
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600232 VkDbgObjectType objType,
233 uint64_t srcObject,
Courtney Goeltzenleuchterf579fa62015-06-10 17:39:03 -0600234 size_t location,
235 int32_t msgCode,
236 const char* pLayerPrefix,
237 const char* pMsg,
238 void* pUserData);
239
240void VKAPI vkDbgBreakCallback(
241 VkFlags msgFlags,
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600242 VkDbgObjectType objType,
243 uint64_t srcObject,
Courtney Goeltzenleuchterf579fa62015-06-10 17:39:03 -0600244 size_t location,
245 int32_t msgCode,
246 const char* pLayerPrefix,
247 const char* pMsg,
248 void* pUserData);
249
250#endif // VK_PROTOTYPES
251
252#ifdef __cplusplus
253} // extern "C"
254#endif // __cplusplus
255
256#endif // __VK_DEBUG_REPORT_LUNARG_H__