blob: f5b6fac359059649584adff8bdf29f61e383ba8f [file] [log] [blame]
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -06001/* Need to define dispatch table
2 * Core struct can then have ptr to dispatch table at the top
3 * Along with object ptrs for current and next OBJ
4 */
5#pragma once
6
7#include "vulkan.h"
8#include "vkDbg.h"
9#if defined(__linux__) || defined(XCB_NVIDIA)
10#include "vkWsiX11Ext.h"
11#endif
12#if defined(__GNUC__) && __GNUC__ >= 4
13# define VK_LAYER_EXPORT __attribute__((visibility("default")))
14#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
15# define VK_LAYER_EXPORT __attribute__((visibility("default")))
16#else
17# define VK_LAYER_EXPORT
18#endif
19
20
21typedef struct _VK_BASE_LAYER_OBJECT
22{
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060023 PFN_vkGetProcAddr pGPA;
24 VkBaseObject nextObject;
25 VkBaseObject baseObject;
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -060026} VK_BASE_LAYER_OBJECT;
27
28typedef struct _VK_LAYER_DISPATCH_TABLE
29{
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060030 PFN_vkGetProcAddr GetProcAddr;
31 PFN_vkCreateInstance CreateInstance;
32 PFN_vkDestroyInstance DestroyInstance;
33 PFN_vkEnumerateGpus EnumerateGpus;
34 PFN_vkGetGpuInfo GetGpuInfo;
35 PFN_vkCreateDevice CreateDevice;
36 PFN_vkDestroyDevice DestroyDevice;
37 PFN_vkGetExtensionSupport GetExtensionSupport;
38 PFN_vkEnumerateLayers EnumerateLayers;
39 PFN_vkGetDeviceQueue GetDeviceQueue;
40 PFN_vkQueueSubmit QueueSubmit;
41 PFN_vkQueueAddMemReference QueueAddMemReference;
42 PFN_vkQueueRemoveMemReference QueueRemoveMemReference;
43 PFN_vkQueueWaitIdle QueueWaitIdle;
44 PFN_vkDeviceWaitIdle DeviceWaitIdle;
45 PFN_vkAllocMemory AllocMemory;
46 PFN_vkFreeMemory FreeMemory;
47 PFN_vkSetMemoryPriority SetMemoryPriority;
48 PFN_vkMapMemory MapMemory;
49 PFN_vkUnmapMemory UnmapMemory;
50 PFN_vkPinSystemMemory PinSystemMemory;
51 PFN_vkGetMultiGpuCompatibility GetMultiGpuCompatibility;
52 PFN_vkOpenSharedMemory OpenSharedMemory;
53 PFN_vkOpenSharedSemaphore OpenSharedSemaphore;
54 PFN_vkOpenPeerMemory OpenPeerMemory;
55 PFN_vkOpenPeerImage OpenPeerImage;
56 PFN_vkDestroyObject DestroyObject;
57 PFN_vkGetObjectInfo GetObjectInfo;
58 PFN_vkBindObjectMemory BindObjectMemory;
59 PFN_vkBindObjectMemoryRange BindObjectMemoryRange;
60 PFN_vkBindImageMemoryRange BindImageMemoryRange;
61 PFN_vkCreateFence CreateFence;
62 PFN_vkGetFenceStatus GetFenceStatus;
63 PFN_vkResetFences ResetFences;
64 PFN_vkWaitForFences WaitForFences;
65 PFN_vkCreateSemaphore CreateSemaphore;
66 PFN_vkQueueSignalSemaphore QueueSignalSemaphore;
67 PFN_vkQueueWaitSemaphore QueueWaitSemaphore;
68 PFN_vkCreateEvent CreateEvent;
69 PFN_vkGetEventStatus GetEventStatus;
70 PFN_vkSetEvent SetEvent;
71 PFN_vkResetEvent ResetEvent;
72 PFN_vkCreateQueryPool CreateQueryPool;
73 PFN_vkGetQueryPoolResults GetQueryPoolResults;
74 PFN_vkGetFormatInfo GetFormatInfo;
75 PFN_vkCreateBuffer CreateBuffer;
76 PFN_vkCreateBufferView CreateBufferView;
77 PFN_vkCreateImage CreateImage;
78 PFN_vkGetImageSubresourceInfo GetImageSubresourceInfo;
79 PFN_vkCreateImageView CreateImageView;
80 PFN_vkCreateColorAttachmentView CreateColorAttachmentView;
81 PFN_vkCreateDepthStencilView CreateDepthStencilView;
82 PFN_vkCreateShader CreateShader;
83 PFN_vkCreateGraphicsPipeline CreateGraphicsPipeline;
84 PFN_vkCreateGraphicsPipelineDerivative CreateGraphicsPipelineDerivative;
85 PFN_vkCreateComputePipeline CreateComputePipeline;
86 PFN_vkStorePipeline StorePipeline;
87 PFN_vkLoadPipeline LoadPipeline;
88 PFN_vkLoadPipelineDerivative LoadPipelineDerivative;
89 PFN_vkCreateSampler CreateSampler;
90 PFN_vkCreateDescriptorSetLayout CreateDescriptorSetLayout;
91 PFN_vkCreateDescriptorSetLayoutChain CreateDescriptorSetLayoutChain;
92 PFN_vkBeginDescriptorPoolUpdate BeginDescriptorPoolUpdate;
93 PFN_vkEndDescriptorPoolUpdate EndDescriptorPoolUpdate;
94 PFN_vkCreateDescriptorPool CreateDescriptorPool;
95 PFN_vkResetDescriptorPool ResetDescriptorPool;
96 PFN_vkAllocDescriptorSets AllocDescriptorSets;
97 PFN_vkClearDescriptorSets ClearDescriptorSets;
98 PFN_vkUpdateDescriptors UpdateDescriptors;
99 PFN_vkCreateDynamicViewportState CreateDynamicViewportState;
100 PFN_vkCreateDynamicRasterState CreateDynamicRasterState;
101 PFN_vkCreateDynamicColorBlendState CreateDynamicColorBlendState;
102 PFN_vkCreateDynamicDepthStencilState CreateDynamicDepthStencilState;
103 PFN_vkCreateCommandBuffer CreateCommandBuffer;
104 PFN_vkBeginCommandBuffer BeginCommandBuffer;
105 PFN_vkEndCommandBuffer EndCommandBuffer;
106 PFN_vkResetCommandBuffer ResetCommandBuffer;
107 PFN_vkCmdBindPipeline CmdBindPipeline;
108 PFN_vkCmdBindDynamicStateObject CmdBindDynamicStateObject;
109 PFN_vkCmdBindDescriptorSets CmdBindDescriptorSets;
110 PFN_vkCmdBindVertexBuffer CmdBindVertexBuffer;
111 PFN_vkCmdBindIndexBuffer CmdBindIndexBuffer;
112 PFN_vkCmdDraw CmdDraw;
113 PFN_vkCmdDrawIndexed CmdDrawIndexed;
114 PFN_vkCmdDrawIndirect CmdDrawIndirect;
115 PFN_vkCmdDrawIndexedIndirect CmdDrawIndexedIndirect;
116 PFN_vkCmdDispatch CmdDispatch;
117 PFN_vkCmdDispatchIndirect CmdDispatchIndirect;
118 PFN_vkCmdCopyBuffer CmdCopyBuffer;
119 PFN_vkCmdCopyImage CmdCopyImage;
120 PFN_vkCmdBlitImage CmdBlitImage;
121 PFN_vkCmdCopyBufferToImage CmdCopyBufferToImage;
122 PFN_vkCmdCopyImageToBuffer CmdCopyImageToBuffer;
123 PFN_vkCmdCloneImageData CmdCloneImageData;
124 PFN_vkCmdUpdateBuffer CmdUpdateBuffer;
125 PFN_vkCmdFillBuffer CmdFillBuffer;
126 PFN_vkCmdClearColorImage CmdClearColorImage;
127 PFN_vkCmdClearDepthStencil CmdClearDepthStencil;
128 PFN_vkCmdResolveImage CmdResolveImage;
129 PFN_vkCmdSetEvent CmdSetEvent;
130 PFN_vkCmdResetEvent CmdResetEvent;
131 PFN_vkCmdWaitEvents CmdWaitEvents;
132 PFN_vkCmdPipelineBarrier CmdPipelineBarrier;
133 PFN_vkCmdBeginQuery CmdBeginQuery;
134 PFN_vkCmdEndQuery CmdEndQuery;
135 PFN_vkCmdResetQueryPool CmdResetQueryPool;
136 PFN_vkCmdWriteTimestamp CmdWriteTimestamp;
137 PFN_vkCmdInitAtomicCounters CmdInitAtomicCounters;
138 PFN_vkCmdLoadAtomicCounters CmdLoadAtomicCounters;
139 PFN_vkCmdSaveAtomicCounters CmdSaveAtomicCounters;
140 PFN_vkCreateFramebuffer CreateFramebuffer;
141 PFN_vkCreateRenderPass CreateRenderPass;
142 PFN_vkCmdBeginRenderPass CmdBeginRenderPass;
143 PFN_vkCmdEndRenderPass CmdEndRenderPass;
144 PFN_vkDbgSetValidationLevel DbgSetValidationLevel;
145 PFN_vkDbgRegisterMsgCallback DbgRegisterMsgCallback;
146 PFN_vkDbgUnregisterMsgCallback DbgUnregisterMsgCallback;
147 PFN_vkDbgSetMessageFilter DbgSetMessageFilter;
148 PFN_vkDbgSetObjectTag DbgSetObjectTag;
149 PFN_vkDbgSetGlobalOption DbgSetGlobalOption;
150 PFN_vkDbgSetDeviceOption DbgSetDeviceOption;
151 PFN_vkCmdDbgMarkerBegin CmdDbgMarkerBegin;
152 PFN_vkCmdDbgMarkerEnd CmdDbgMarkerEnd;
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -0600153#if defined(__linux__) || defined(XCB_NVIDIA)
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600154 PFN_vkWsiX11AssociateConnection WsiX11AssociateConnection;
155 PFN_vkWsiX11GetMSC WsiX11GetMSC;
156 PFN_vkWsiX11CreatePresentableImage WsiX11CreatePresentableImage;
157 PFN_vkWsiX11QueuePresent WsiX11QueuePresent;
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -0600158#endif // WIN32
159} VK_LAYER_DISPATCH_TABLE;
160
161// LL node for tree of dbg callback functions
162typedef struct _VK_LAYER_DBG_FUNCTION_NODE
163{
164 VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback;
165 void *pUserData;
166 struct _VK_LAYER_DBG_FUNCTION_NODE *pNext;
167} VK_LAYER_DBG_FUNCTION_NODE;
168
169typedef enum _VK_LAYER_DBG_ACTION
170{
171 VK_DBG_LAYER_ACTION_IGNORE = 0x0,
172 VK_DBG_LAYER_ACTION_CALLBACK = 0x1,
173 VK_DBG_LAYER_ACTION_LOG_MSG = 0x2,
174 VK_DBG_LAYER_ACTION_BREAK = 0x4
175} VK_LAYER_DBG_ACTION;
176
177typedef enum _VK_LAYER_DBG_REPORT_LEVEL
178{
179
180 VK_DBG_LAYER_LEVEL_INFO = 0,
181 VK_DBG_LAYER_LEVEL_WARN,
182 VK_DBG_LAYER_LEVEL_PERF_WARN,
183 VK_DBG_LAYER_LEVEL_ERROR,
184 VK_DBG_LAYER_LEVEL_NONE,
185} VK_LAYER_DBG_REPORT_LEVEL;
186// ------------------------------------------------------------------------------------------------
187// API functions