blob: fb224829a2122c389b452b60c5a4d1b93fa2abf9 [file] [log] [blame]
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -06001#ifndef __VKDBG_H__
2#define __VKDBG_H__
Chia-I Wu68a55242014-08-01 11:18:21 +08003
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -06004#include <vulkan.h>
Chia-I Wu68a55242014-08-01 11:18:21 +08005
6#ifdef __cplusplus
7extern "C"
8{
9#endif // __cplusplus
10
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060011typedef enum _VK_DBG_MSG_TYPE
Chia-I Wu68a55242014-08-01 11:18:21 +080012{
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060013 VK_DBG_MSG_UNKNOWN = 0x0,
14 VK_DBG_MSG_ERROR = 0x1,
15 VK_DBG_MSG_WARNING = 0x2,
16 VK_DBG_MSG_PERF_WARNING = 0x3,
Chia-I Wu68a55242014-08-01 11:18:21 +080017
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060018 VK_DBG_MSG_TYPE_BEGIN_RANGE = VK_DBG_MSG_UNKNOWN,
19 VK_DBG_MSG_TYPE_END_RANGE = VK_DBG_MSG_PERF_WARNING,
20 VK_NUM_DBG_MSG_TYPE = (VK_DBG_MSG_TYPE_END_RANGE - VK_DBG_MSG_TYPE_BEGIN_RANGE + 1),
21} VK_DBG_MSG_TYPE;
Chia-I Wu68a55242014-08-01 11:18:21 +080022
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060023typedef enum _VK_DBG_MSG_FILTER
Chia-I Wu68a55242014-08-01 11:18:21 +080024{
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060025 VK_DBG_MSG_FILTER_NONE = 0x0,
26 VK_DBG_MSG_FILTER_REPEATED = 0x1,
27 VK_DBG_MSG_FILTER_ALL = 0x2,
Chia-I Wu68a55242014-08-01 11:18:21 +080028
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060029 VK_DBG_MSG_FILTER_BEGIN_RANGE = VK_DBG_MSG_FILTER_NONE,
30 VK_DBG_MSG_FILTER_END_RANGE = VK_DBG_MSG_FILTER_ALL,
31 VK_NUM_DBG_MSG_FILTER = (VK_DBG_MSG_FILTER_END_RANGE - VK_DBG_MSG_FILTER_BEGIN_RANGE + 1),
32} VK_DBG_MSG_FILTER;
Chia-I Wu68a55242014-08-01 11:18:21 +080033
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060034typedef enum _VK_DBG_GLOBAL_OPTION
Chia-I Wu68a55242014-08-01 11:18:21 +080035{
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060036 VK_DBG_OPTION_DEBUG_ECHO_ENABLE = 0x0,
37 VK_DBG_OPTION_BREAK_ON_ERROR = 0x1,
38 VK_DBG_OPTION_BREAK_ON_WARNING = 0x2,
Chia-I Wu68a55242014-08-01 11:18:21 +080039
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060040 VK_DBG_GLOBAL_OPTION_BEGIN_RANGE = VK_DBG_OPTION_DEBUG_ECHO_ENABLE,
41 VK_DBG_GLOBAL_OPTION_END_RANGE = VK_DBG_OPTION_BREAK_ON_WARNING,
42 VK_NUM_DBG_GLOBAL_OPTION = (VK_DBG_GLOBAL_OPTION_END_RANGE - VK_DBG_GLOBAL_OPTION_BEGIN_RANGE + 1),
43} VK_DBG_GLOBAL_OPTION;
Chia-I Wu68a55242014-08-01 11:18:21 +080044
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060045typedef enum _VK_DBG_DEVICE_OPTION
Chia-I Wu68a55242014-08-01 11:18:21 +080046{
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060047 VK_DBG_OPTION_DISABLE_PIPELINE_LOADS = 0x0,
48 VK_DBG_OPTION_FORCE_OBJECT_MEMORY_REQS = 0x1,
49 VK_DBG_OPTION_FORCE_LARGE_IMAGE_ALIGNMENT = 0x2,
Chia-I Wu68a55242014-08-01 11:18:21 +080050
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060051 VK_DBG_DEVICE_OPTION_BEGIN_RANGE = VK_DBG_OPTION_DISABLE_PIPELINE_LOADS,
52 VK_DBG_DEVICE_OPTION_END_RANGE = VK_DBG_OPTION_FORCE_LARGE_IMAGE_ALIGNMENT,
53 VK_NUM_DBG_DEVICE_OPTION = (VK_DBG_DEVICE_OPTION_END_RANGE - VK_DBG_DEVICE_OPTION_BEGIN_RANGE + 1),
54} VK_DBG_DEVICE_OPTION;
Chia-I Wu68a55242014-08-01 11:18:21 +080055
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060056typedef enum _VK_DBG_OBJECT_TYPE
Chia-I Wu450a4232014-08-05 14:50:53 +080057{
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060058 VK_DBG_OBJECT_UNKNOWN = 0x00,
59 VK_DBG_OBJECT_DEVICE = 0x01,
60 VK_DBG_OBJECT_QUEUE = 0x02,
61 VK_DBG_OBJECT_GPU_MEMORY = 0x03,
62 VK_DBG_OBJECT_IMAGE = 0x04,
63 VK_DBG_OBJECT_IMAGE_VIEW = 0x05,
64 VK_DBG_OBJECT_COLOR_TARGET_VIEW = 0x06,
65 VK_DBG_OBJECT_DEPTH_STENCIL_VIEW = 0x07,
66 VK_DBG_OBJECT_SHADER = 0x08,
67 VK_DBG_OBJECT_GRAPHICS_PIPELINE = 0x09,
68 VK_DBG_OBJECT_COMPUTE_PIPELINE = 0x0a,
69 VK_DBG_OBJECT_SAMPLER = 0x0b,
70 VK_DBG_OBJECT_DESCRIPTOR_SET = 0x0c,
71 VK_DBG_OBJECT_VIEWPORT_STATE = 0x0d,
72 VK_DBG_OBJECT_RASTER_STATE = 0x0e,
73 VK_DBG_OBJECT_MSAA_STATE = 0x0f,
74 VK_DBG_OBJECT_COLOR_BLEND_STATE = 0x10,
75 VK_DBG_OBJECT_DEPTH_STENCIL_STATE = 0x11,
76 VK_DBG_OBJECT_CMD_BUFFER = 0x12,
77 VK_DBG_OBJECT_FENCE = 0x13,
78 VK_DBG_OBJECT_SEMAPHORE = 0x14,
79 VK_DBG_OBJECT_EVENT = 0x15,
80 VK_DBG_OBJECT_QUERY_POOL = 0x16,
81 VK_DBG_OBJECT_SHARED_GPU_MEMORY = 0x17,
82 VK_DBG_OBJECT_SHARED_SEMAPHORE = 0x18,
83 VK_DBG_OBJECT_PEER_GPU_MEMORY = 0x19,
84 VK_DBG_OBJECT_PEER_IMAGE = 0x1a,
85 VK_DBG_OBJECT_PINNED_GPU_MEMORY = 0x1b,
86 VK_DBG_OBJECT_INTERNAL_GPU_MEMORY = 0x1c,
87 VK_DBG_OBJECT_FRAMEBUFFER = 0x1d,
88 VK_DBG_OBJECT_RENDER_PASS = 0x1e,
Chia-I Wu450a4232014-08-05 14:50:53 +080089
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060090 VK_DBG_OBJECT_INSTANCE,
91 VK_DBG_OBJECT_BUFFER,
92 VK_DBG_OBJECT_BUFFER_VIEW,
93 VK_DBG_OBJECT_DESCRIPTOR_SET_LAYOUT,
94 VK_DBG_OBJECT_DESCRIPTOR_SET_LAYOUT_CHAIN,
95 VK_DBG_OBJECT_DESCRIPTOR_POOL,
Chia-I Wu1a28fe02015-01-01 07:55:04 +080096
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060097 VK_DBG_OBJECT_TYPE_BEGIN_RANGE = VK_DBG_OBJECT_UNKNOWN,
98 VK_DBG_OBJECT_TYPE_END_RANGE = VK_DBG_OBJECT_DESCRIPTOR_POOL,
99 VK_NUM_DBG_OBJECT_TYPE = (VK_DBG_OBJECT_TYPE_END_RANGE - VK_DBG_OBJECT_TYPE_BEGIN_RANGE + 1),
100} VK_DBG_OBJECT_TYPE;
Chia-I Wu450a4232014-08-05 14:50:53 +0800101
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -0600102typedef void (VKAPI *VK_DBG_MSG_CALLBACK_FUNCTION)(
103 VK_DBG_MSG_TYPE msgType,
104 VK_VALIDATION_LEVEL validationLevel,
105 VK_BASE_OBJECT srcObject,
Mark Lobodzinski17caf572015-01-29 08:55:56 -0600106 size_t location,
107 int32_t msgCode,
108 const char* pMsg,
109 void* pUserData);
Chia-I Wu68a55242014-08-01 11:18:21 +0800110
111// Debug functions
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -0600112typedef VK_RESULT (VKAPI *vkDbgSetValidationLevelType)(VK_DEVICE device, VK_VALIDATION_LEVEL validationLevel);
113typedef VK_RESULT (VKAPI *vkDbgRegisterMsgCallbackType)(VK_INSTANCE instance, VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback, void* pUserData);
114typedef VK_RESULT (VKAPI *vkDbgUnregisterMsgCallbackType)(VK_INSTANCE instance, VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback);
115typedef VK_RESULT (VKAPI *vkDbgSetMessageFilterType)(VK_DEVICE device, int32_t msgCode, VK_DBG_MSG_FILTER filter);
116typedef VK_RESULT (VKAPI *vkDbgSetObjectTagType)(VK_BASE_OBJECT object, size_t tagSize, const void* pTag);
117typedef VK_RESULT (VKAPI *vkDbgSetGlobalOptionType)(VK_INSTANCE instance, VK_DBG_GLOBAL_OPTION dbgOption, size_t dataSize, const void* pData);
118typedef VK_RESULT (VKAPI *vkDbgSetDeviceOptionType)(VK_DEVICE device, VK_DBG_DEVICE_OPTION dbgOption, size_t dataSize, const void* pData);
119typedef void (VKAPI *vkCmdDbgMarkerBeginType)(VK_CMD_BUFFER cmdBuffer, const char* pMarker);
120typedef void (VKAPI *vkCmdDbgMarkerEndType)(VK_CMD_BUFFER cmdBuffer);
Chia-I Wu68a55242014-08-01 11:18:21 +0800121
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -0600122#ifdef VK_PROTOTYPES
123VK_RESULT VKAPI vkDbgSetValidationLevel(
124 VK_DEVICE device,
125 VK_VALIDATION_LEVEL validationLevel);
Chia-I Wu68a55242014-08-01 11:18:21 +0800126
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -0600127VK_RESULT VKAPI vkDbgRegisterMsgCallback(
128 VK_INSTANCE instance,
129 VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback,
Mark Lobodzinski17caf572015-01-29 08:55:56 -0600130 void* pUserData);
Chia-I Wu68a55242014-08-01 11:18:21 +0800131
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -0600132VK_RESULT VKAPI vkDbgUnregisterMsgCallback(
133 VK_INSTANCE instance,
134 VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback);
Chia-I Wu68a55242014-08-01 11:18:21 +0800135
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -0600136VK_RESULT VKAPI vkDbgSetMessageFilter(
137 VK_DEVICE device,
Mark Lobodzinski17caf572015-01-29 08:55:56 -0600138 int32_t msgCode,
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -0600139 VK_DBG_MSG_FILTER filter);
Chia-I Wu68a55242014-08-01 11:18:21 +0800140
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -0600141VK_RESULT VKAPI vkDbgSetObjectTag(
142 VK_BASE_OBJECT object,
Mark Lobodzinski17caf572015-01-29 08:55:56 -0600143 size_t tagSize,
144 const void* pTag);
Chia-I Wu68a55242014-08-01 11:18:21 +0800145
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -0600146VK_RESULT VKAPI vkDbgSetGlobalOption(
147 VK_INSTANCE instance,
148 VK_DBG_GLOBAL_OPTION dbgOption,
Mark Lobodzinski17caf572015-01-29 08:55:56 -0600149 size_t dataSize,
150 const void* pData);
Chia-I Wu68a55242014-08-01 11:18:21 +0800151
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -0600152VK_RESULT VKAPI vkDbgSetDeviceOption(
153 VK_DEVICE device,
154 VK_DBG_DEVICE_OPTION dbgOption,
Mark Lobodzinski17caf572015-01-29 08:55:56 -0600155 size_t dataSize,
156 const void* pData);
Chia-I Wu68a55242014-08-01 11:18:21 +0800157
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -0600158void VKAPI vkCmdDbgMarkerBegin(
159 VK_CMD_BUFFER cmdBuffer,
Mark Lobodzinski17caf572015-01-29 08:55:56 -0600160 const char* pMarker);
Chia-I Wu68a55242014-08-01 11:18:21 +0800161
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -0600162void VKAPI vkCmdDbgMarkerEnd(
163 VK_CMD_BUFFER cmdBuffer);
Chia-I Wu68a55242014-08-01 11:18:21 +0800164
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -0600165#endif // VK_PROTOTYPES
Jon Ashburnbd03c352015-04-06 17:38:17 -0600166
Chia-I Wu68a55242014-08-01 11:18:21 +0800167#ifdef __cplusplus
168}; // extern "C"
169#endif // __cplusplus
170
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -0600171#endif // __VKDBG_H__