blob: 70c36a98263f4f523da4500eed42ceaca6fc4306 [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
Jon Ashburn301c5f02015-04-06 10:58:22 -060021typedef struct VkBaseLayerObject_
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -060022{
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060023 PFN_vkGetProcAddr pGPA;
24 VkBaseObject nextObject;
25 VkBaseObject baseObject;
Jon Ashburn301c5f02015-04-06 10:58:22 -060026} VkBaseLayerObject;
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -060027
Jon Ashburn301c5f02015-04-06 10:58:22 -060028typedef struct VkLayerDispatchTable_
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -060029{
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060030 PFN_vkGetProcAddr GetProcAddr;
31 PFN_vkCreateInstance CreateInstance;
32 PFN_vkDestroyInstance DestroyInstance;
Jon Ashburn07b309a2015-04-15 11:31:12 -060033 PFN_vkEnumeratePhysicalDevices EnumeratePhysicalDevices;
Tony Barbour8205d902015-04-16 15:59:00 -060034 PFN_vkGetPhysicalDeviceInfo GetPhysicalDeviceInfo;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060035 PFN_vkCreateDevice CreateDevice;
36 PFN_vkDestroyDevice DestroyDevice;
Jon Ashburneb2728b2015-04-10 14:33:07 -060037 PFN_vkGetGlobalExtensionInfo GetGlobalExtensionInfo;
Tobin Ehlis0ef6ec52015-04-16 12:51:37 -060038 PFN_vkGetPhysicalDeviceExtensionInfo GetPhysicalDeviceExtensionInfo;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060039 PFN_vkEnumerateLayers EnumerateLayers;
40 PFN_vkGetDeviceQueue GetDeviceQueue;
41 PFN_vkQueueSubmit QueueSubmit;
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -060042 PFN_vkQueueAddMemReferences QueueAddMemReferences;
43 PFN_vkQueueRemoveMemReferences QueueRemoveMemReferences;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060044 PFN_vkQueueWaitIdle QueueWaitIdle;
45 PFN_vkDeviceWaitIdle DeviceWaitIdle;
46 PFN_vkAllocMemory AllocMemory;
47 PFN_vkFreeMemory FreeMemory;
48 PFN_vkSetMemoryPriority SetMemoryPriority;
49 PFN_vkMapMemory MapMemory;
50 PFN_vkUnmapMemory UnmapMemory;
Tony Barbour859ceab2015-04-16 19:23:13 -060051 PFN_vkFlushMappedMemory FlushMappedMemory;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060052 PFN_vkPinSystemMemory PinSystemMemory;
Tony Barbour8205d902015-04-16 15:59:00 -060053 PFN_vkGetMultiDeviceCompatibility GetMultiDeviceCompatibility;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060054 PFN_vkOpenSharedMemory OpenSharedMemory;
55 PFN_vkOpenSharedSemaphore OpenSharedSemaphore;
56 PFN_vkOpenPeerMemory OpenPeerMemory;
57 PFN_vkOpenPeerImage OpenPeerImage;
58 PFN_vkDestroyObject DestroyObject;
59 PFN_vkGetObjectInfo GetObjectInfo;
Mark Lobodzinskicf26e072015-04-16 11:44:05 -050060 PFN_vkQueueBindObjectMemory QueueBindObjectMemory;
61 PFN_vkQueueBindObjectMemoryRange QueueBindObjectMemoryRange;
62 PFN_vkQueueBindImageMemoryRange QueueBindImageMemoryRange;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060063 PFN_vkCreateFence CreateFence;
64 PFN_vkGetFenceStatus GetFenceStatus;
65 PFN_vkResetFences ResetFences;
66 PFN_vkWaitForFences WaitForFences;
67 PFN_vkCreateSemaphore CreateSemaphore;
68 PFN_vkQueueSignalSemaphore QueueSignalSemaphore;
69 PFN_vkQueueWaitSemaphore QueueWaitSemaphore;
70 PFN_vkCreateEvent CreateEvent;
71 PFN_vkGetEventStatus GetEventStatus;
72 PFN_vkSetEvent SetEvent;
73 PFN_vkResetEvent ResetEvent;
74 PFN_vkCreateQueryPool CreateQueryPool;
75 PFN_vkGetQueryPoolResults GetQueryPoolResults;
76 PFN_vkGetFormatInfo GetFormatInfo;
77 PFN_vkCreateBuffer CreateBuffer;
78 PFN_vkCreateBufferView CreateBufferView;
79 PFN_vkCreateImage CreateImage;
80 PFN_vkGetImageSubresourceInfo GetImageSubresourceInfo;
81 PFN_vkCreateImageView CreateImageView;
82 PFN_vkCreateColorAttachmentView CreateColorAttachmentView;
83 PFN_vkCreateDepthStencilView CreateDepthStencilView;
84 PFN_vkCreateShader CreateShader;
85 PFN_vkCreateGraphicsPipeline CreateGraphicsPipeline;
86 PFN_vkCreateGraphicsPipelineDerivative CreateGraphicsPipelineDerivative;
87 PFN_vkCreateComputePipeline CreateComputePipeline;
88 PFN_vkStorePipeline StorePipeline;
89 PFN_vkLoadPipeline LoadPipeline;
90 PFN_vkLoadPipelineDerivative LoadPipelineDerivative;
Mark Lobodzinski556f7212015-04-17 14:11:39 -050091 PFN_vkCreatePipelineLayout CreatePipelineLayout;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060092 PFN_vkCreateSampler CreateSampler;
93 PFN_vkCreateDescriptorSetLayout CreateDescriptorSetLayout;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060094 PFN_vkBeginDescriptorPoolUpdate BeginDescriptorPoolUpdate;
95 PFN_vkEndDescriptorPoolUpdate EndDescriptorPoolUpdate;
96 PFN_vkCreateDescriptorPool CreateDescriptorPool;
97 PFN_vkResetDescriptorPool ResetDescriptorPool;
98 PFN_vkAllocDescriptorSets AllocDescriptorSets;
99 PFN_vkClearDescriptorSets ClearDescriptorSets;
100 PFN_vkUpdateDescriptors UpdateDescriptors;
101 PFN_vkCreateDynamicViewportState CreateDynamicViewportState;
102 PFN_vkCreateDynamicRasterState CreateDynamicRasterState;
103 PFN_vkCreateDynamicColorBlendState CreateDynamicColorBlendState;
104 PFN_vkCreateDynamicDepthStencilState CreateDynamicDepthStencilState;
105 PFN_vkCreateCommandBuffer CreateCommandBuffer;
106 PFN_vkBeginCommandBuffer BeginCommandBuffer;
107 PFN_vkEndCommandBuffer EndCommandBuffer;
108 PFN_vkResetCommandBuffer ResetCommandBuffer;
109 PFN_vkCmdBindPipeline CmdBindPipeline;
110 PFN_vkCmdBindDynamicStateObject CmdBindDynamicStateObject;
111 PFN_vkCmdBindDescriptorSets CmdBindDescriptorSets;
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -0600112 PFN_vkCmdBindVertexBuffers CmdBindVertexBuffers;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600113 PFN_vkCmdBindIndexBuffer CmdBindIndexBuffer;
114 PFN_vkCmdDraw CmdDraw;
115 PFN_vkCmdDrawIndexed CmdDrawIndexed;
116 PFN_vkCmdDrawIndirect CmdDrawIndirect;
117 PFN_vkCmdDrawIndexedIndirect CmdDrawIndexedIndirect;
118 PFN_vkCmdDispatch CmdDispatch;
119 PFN_vkCmdDispatchIndirect CmdDispatchIndirect;
120 PFN_vkCmdCopyBuffer CmdCopyBuffer;
121 PFN_vkCmdCopyImage CmdCopyImage;
122 PFN_vkCmdBlitImage CmdBlitImage;
123 PFN_vkCmdCopyBufferToImage CmdCopyBufferToImage;
124 PFN_vkCmdCopyImageToBuffer CmdCopyImageToBuffer;
125 PFN_vkCmdCloneImageData CmdCloneImageData;
126 PFN_vkCmdUpdateBuffer CmdUpdateBuffer;
127 PFN_vkCmdFillBuffer CmdFillBuffer;
128 PFN_vkCmdClearColorImage CmdClearColorImage;
129 PFN_vkCmdClearDepthStencil CmdClearDepthStencil;
130 PFN_vkCmdResolveImage CmdResolveImage;
131 PFN_vkCmdSetEvent CmdSetEvent;
132 PFN_vkCmdResetEvent CmdResetEvent;
133 PFN_vkCmdWaitEvents CmdWaitEvents;
134 PFN_vkCmdPipelineBarrier CmdPipelineBarrier;
135 PFN_vkCmdBeginQuery CmdBeginQuery;
136 PFN_vkCmdEndQuery CmdEndQuery;
137 PFN_vkCmdResetQueryPool CmdResetQueryPool;
138 PFN_vkCmdWriteTimestamp CmdWriteTimestamp;
Courtney Goeltzenleuchter98049062015-04-15 18:21:13 -0600139 PFN_vkCmdCopyQueryPoolResults CmdCopyQueryPoolResults;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600140 PFN_vkCmdInitAtomicCounters CmdInitAtomicCounters;
141 PFN_vkCmdLoadAtomicCounters CmdLoadAtomicCounters;
142 PFN_vkCmdSaveAtomicCounters CmdSaveAtomicCounters;
143 PFN_vkCreateFramebuffer CreateFramebuffer;
144 PFN_vkCreateRenderPass CreateRenderPass;
145 PFN_vkCmdBeginRenderPass CmdBeginRenderPass;
146 PFN_vkCmdEndRenderPass CmdEndRenderPass;
147 PFN_vkDbgSetValidationLevel DbgSetValidationLevel;
148 PFN_vkDbgRegisterMsgCallback DbgRegisterMsgCallback;
149 PFN_vkDbgUnregisterMsgCallback DbgUnregisterMsgCallback;
150 PFN_vkDbgSetMessageFilter DbgSetMessageFilter;
151 PFN_vkDbgSetObjectTag DbgSetObjectTag;
152 PFN_vkDbgSetGlobalOption DbgSetGlobalOption;
153 PFN_vkDbgSetDeviceOption DbgSetDeviceOption;
154 PFN_vkCmdDbgMarkerBegin CmdDbgMarkerBegin;
155 PFN_vkCmdDbgMarkerEnd CmdDbgMarkerEnd;
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -0600156#if defined(__linux__) || defined(XCB_NVIDIA)
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600157 PFN_vkWsiX11AssociateConnection WsiX11AssociateConnection;
158 PFN_vkWsiX11GetMSC WsiX11GetMSC;
159 PFN_vkWsiX11CreatePresentableImage WsiX11CreatePresentableImage;
160 PFN_vkWsiX11QueuePresent WsiX11QueuePresent;
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -0600161#endif // WIN32
Jon Ashburn301c5f02015-04-06 10:58:22 -0600162} VkLayerDispatchTable;
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -0600163
164// LL node for tree of dbg callback functions
165typedef struct _VK_LAYER_DBG_FUNCTION_NODE
166{
167 VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback;
168 void *pUserData;
169 struct _VK_LAYER_DBG_FUNCTION_NODE *pNext;
170} VK_LAYER_DBG_FUNCTION_NODE;
171
172typedef enum _VK_LAYER_DBG_ACTION
173{
174 VK_DBG_LAYER_ACTION_IGNORE = 0x0,
175 VK_DBG_LAYER_ACTION_CALLBACK = 0x1,
176 VK_DBG_LAYER_ACTION_LOG_MSG = 0x2,
177 VK_DBG_LAYER_ACTION_BREAK = 0x4
178} VK_LAYER_DBG_ACTION;
179
180typedef enum _VK_LAYER_DBG_REPORT_LEVEL
181{
182
183 VK_DBG_LAYER_LEVEL_INFO = 0,
184 VK_DBG_LAYER_LEVEL_WARN,
185 VK_DBG_LAYER_LEVEL_PERF_WARN,
186 VK_DBG_LAYER_LEVEL_ERROR,
187 VK_DBG_LAYER_LEVEL_NONE,
188} VK_LAYER_DBG_REPORT_LEVEL;
189// ------------------------------------------------------------------------------------------------
190// API functions