blob: a1d96fdb6775bc3bef3c36bfa66c7aa297707c5e [file] [log] [blame]
Jon Ashburnbca184f2015-04-04 12:13:28 -06001//
2// File: vk_dbg.h
3//
4/*
5** Copyright (c) 2015 The Khronos Group Inc.
6**
7** Permission is hereby granted, free of charge, to any person obtaining a
8** copy of this software and/or associated documentation files (the
9** "Materials"), to deal in the Materials without restriction, including
10** without limitation the rights to use, copy, modify, merge, publish,
11** distribute, sublicense, and/or sell copies of the Materials, and to
12** permit persons to whom the Materials are furnished to do so, subject to
13** the following conditions:
14**
15** The above copyright notice and this permission notice shall be included
16** in all copies or substantial portions of the Materials.
17**
18** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
21** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
22** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
25*/
26
27#ifndef __VK_DBG_H__
28#define __VK_DBG_H__
29
30#include "vulkan.h"
31
32#define VK_DEBUG_REPORT_EXTENSION_NUMBER 2
33#define VK_DEBUG_MARKER_EXTENSION_NUMBER 3
34#ifdef __cplusplus
35extern "C"
36{
37#endif // __cplusplus
38
39/*
40***************************************************************************************************
41* DebugReport and DebugMarker Vulkan Extension API
42***************************************************************************************************
43*/
44
45VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkDbgMsgCallback, VkObject)
46
47// ------------------------------------------------------------------------------------------------
48// Enumerations
49
50typedef enum VkDbgLevel_
51{
52 VK_DBG_LEVEL_INFO_BIT = 0x00000001,
53 VK_DBG_LEVEL_WARN_BIT = 0x00000002,
54 VK_DBG_LEVEL_PERF_WARN_BIT = 0x00000004,
55 VK_DBG_LEVEL_ERROR_BIT = 0x00000008,
56
57 VK_ENUM_RANGE(DBG_LEVEL, INFO_BIT, ERROR_BIT)
58} VkDbgReportFlags;
59
60#define VK_DBG_ENUM_EXTEND(type,id) ((type)(VK_DEBUG_MARKER_EXTENSION_NUMBER * -1000 + (id))
61
62#define VK_OBJECT_INFO_TYPE_DBG_OBJECT_TAG VK_DBG_ENUM_EXTEND(VkObjectInfoType, 0)
63#define VK_OBJECT_INFO_TYPE_DBG_OBJECT_NAME VK_DBG_ENUM_EXTEND(VkObjectInfoType, 1)
64
65#define VK_OBJECT_TYPE_MSG_CALLBACK VK_DBG_ENUM_EXTEND(VkObjectType, 0)
66// ------------------------------------------------------------------------------------------------
67// Vulkan function pointers
68
69typedef void (VKAPI *PFN_vkDbgMsgCallback)(
70 VkFlags msgFlags,
71 VkObjectType objType,
72 VkObject srcObject,
73 size_t location,
74 int32_t msgCode,
75 const char* pLayerPrefix,
76 const char* pMsg,
77 void* pUserData);
78
79// ------------------------------------------------------------------------------------------------
80// API functions
81
82typedef VkResult (VKAPI *PFN_vkDbgCreateMsgCallback)(VkInstance instance, VkFlags msgFlags, const PFN_vkDbgMsgCallback pfnMsgCallback, const void* pUserData, const VkDbgMsgCallback* pMsgCallback);
83typedef void (VKAPI *PFN_vkStringCallback)(VkFlags msgFlags, VkObjectType objType, VkObject srcObject, size_t location, int32_t msgCode, const char* pLayerPrefix, const char* pMsg, void* pUserData);
84typedef void (VKAPI *PFN_vkStdioCallback)(VkFlags msgFlags, VkObjectType objType, VkObject srcObject, size_t location, int32_t msgCode, const char* pLayerPrefix, const char* pMsg, void* pUserData);
85typedef void (VKAPI *PFN_vkBreakCallback)(VkFlags msgFlags, VkObjectType objType, VkObject srcObject, size_t location, int32_t msgCode, const char* pLayerPrefix, const char* pMsg, void* pUserData);
86typedef void (VKAPI *PFN_vkCmdDbgMarkerBegin)(VkCmdBuffer cmdBuffer, const char* pMarker);
87typedef void (VKAPI *PFN_vkCmdDbgMarkerEnd)(VkCmdBuffer cmdBuffer);
88typedef VkResult (VKAPI *PFN_vkDbgSetObjectTag)(VkDevice device, VkObjectType objType, VkObject object, size_t tagSize, const void* pTag);
89typedef VkResult (VKAPI *PFN_vkDbgSetObjectName)(VkDevice device, VkObjectType objType, VkObject object, size_t nameSize, const char* pName);
90
91#ifdef VK_PROTOTYPES
92
93// DebugReport extension entrypoints
94VkResult VKAPI vkDbgCreateMsgCallback(
95 VkInstance instance,
96 VkFlags msgFlags,
97 const PFN_vkDbgMsgCallback pfnMsgCallback,
98 const void* pUserData,
99 const VkDbgMsgCallback* pMsgCallback);
100
101// DebugReport utility callback functions
102void VKAPI vkStringCallback(
103 VkFlags msgFlags,
104 VkObjectType objType,
105 VkObject srcObject,
106 size_t location,
107 int32_t msgCode,
108 const char* pLayerPrefix,
109 const char* pMsg,
110 void* pUserData);
111
112void VKAPI vkStdioCallback(
113 VkFlags msgFlags,
114 VkObjectType objType,
115 VkObject srcObject,
116 size_t location,
117 int32_t msgCode,
118 const char* pLayerPrefix,
119 const char* pMsg,
120 void* pUserData);
121
122void VKAPI vkBreakCallback(
123 VkFlags msgFlags,
124 VkObjectType objType,
125 VkObject srcObject,
126 size_t location,
127 int32_t msgCode,
128 const char* pLayerPrefix,
129 const char* pMsg,
130 void* pUserData);
131
132// DebugMarker extension entrypoints
133void VKAPI vkCmdDbgMarkerBegin(
134 VkCmdBuffer cmdBuffer,
135 const char* pMarker);
136
137void VKAPI vkCmdDbgMarkerEnd(
138 VkCmdBuffer cmdBuffer);
139
140VkResult VKAPI vkDbgSetObjectTag(
141 VkDevice device,
142 VkObjectType objType,
143 VkObject object,
144 size_t tagSize,
145 const void* pTag);
146
147VkResult VKAPI vkDbgSetObjectName(
148 VkDevice device,
149 VkObjectType objType,
150 VkObject object,
151 size_t nameSize,
152 const char* pName);
153
154#endif // VK_PROTOTYPES
155
156#ifdef __cplusplus
157} // extern "C"
158#endif // __cplusplus
159
160#endif // __VK_DBG_H__