blob: f30ef256222f72700ad0d8af2720edcf3ccbe87f [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"
Chia-I Wu5b66aa52015-04-16 22:02:10 +08009#include "vk_wsi_lunarg.h"
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -060010#if defined(__GNUC__) && __GNUC__ >= 4
11# define VK_LAYER_EXPORT __attribute__((visibility("default")))
12#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
13# define VK_LAYER_EXPORT __attribute__((visibility("default")))
14#else
15# define VK_LAYER_EXPORT
16#endif
17
18
Jon Ashburn79b78ac2015-05-05 14:22:52 -060019typedef void * (*PFN_vkGPA)(VkObject obj, const char * pName);
Jon Ashburn301c5f02015-04-06 10:58:22 -060020typedef struct VkBaseLayerObject_
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -060021{
Jon Ashburn79b78ac2015-05-05 14:22:52 -060022 PFN_vkGPA pGPA;
Mike Stroyan230e6252015-04-17 12:36:38 -060023 VkObject nextObject;
24 VkObject baseObject;
Jon Ashburn301c5f02015-04-06 10:58:22 -060025} VkBaseLayerObject;
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -060026
Jon Ashburn301c5f02015-04-06 10:58:22 -060027typedef struct VkLayerDispatchTable_
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -060028{
Jon Ashburn1245cec2015-05-18 13:20:15 -060029 PFN_vkGetDeviceProcAddr GetDeviceProcAddr;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060030 PFN_vkDestroyDevice DestroyDevice;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060031 PFN_vkGetDeviceQueue GetDeviceQueue;
32 PFN_vkQueueSubmit QueueSubmit;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060033 PFN_vkQueueWaitIdle QueueWaitIdle;
34 PFN_vkDeviceWaitIdle DeviceWaitIdle;
35 PFN_vkAllocMemory AllocMemory;
36 PFN_vkFreeMemory FreeMemory;
37 PFN_vkSetMemoryPriority SetMemoryPriority;
38 PFN_vkMapMemory MapMemory;
39 PFN_vkUnmapMemory UnmapMemory;
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -060040 PFN_vkFlushMappedMemoryRanges FlushMappedMemoryRanges;
41 PFN_vkInvalidateMappedMemoryRanges InvalidateMappedMemoryRanges;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060042 PFN_vkPinSystemMemory PinSystemMemory;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060043 PFN_vkOpenSharedMemory OpenSharedMemory;
44 PFN_vkOpenSharedSemaphore OpenSharedSemaphore;
45 PFN_vkOpenPeerMemory OpenPeerMemory;
46 PFN_vkOpenPeerImage OpenPeerImage;
47 PFN_vkDestroyObject DestroyObject;
48 PFN_vkGetObjectInfo GetObjectInfo;
Mark Lobodzinskifb9f5642015-05-11 17:21:15 -050049 PFN_vkBindObjectMemory BindObjectMemory;
50 PFN_vkQueueBindSparseBufferMemory QueueBindSparseBufferMemory;
51 PFN_vkQueueBindSparseImageMemory QueueBindSparseImageMemory;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060052 PFN_vkCreateFence CreateFence;
53 PFN_vkGetFenceStatus GetFenceStatus;
54 PFN_vkResetFences ResetFences;
55 PFN_vkWaitForFences WaitForFences;
56 PFN_vkCreateSemaphore CreateSemaphore;
57 PFN_vkQueueSignalSemaphore QueueSignalSemaphore;
58 PFN_vkQueueWaitSemaphore QueueWaitSemaphore;
59 PFN_vkCreateEvent CreateEvent;
60 PFN_vkGetEventStatus GetEventStatus;
61 PFN_vkSetEvent SetEvent;
62 PFN_vkResetEvent ResetEvent;
63 PFN_vkCreateQueryPool CreateQueryPool;
64 PFN_vkGetQueryPoolResults GetQueryPoolResults;
65 PFN_vkGetFormatInfo GetFormatInfo;
66 PFN_vkCreateBuffer CreateBuffer;
67 PFN_vkCreateBufferView CreateBufferView;
68 PFN_vkCreateImage CreateImage;
69 PFN_vkGetImageSubresourceInfo GetImageSubresourceInfo;
70 PFN_vkCreateImageView CreateImageView;
71 PFN_vkCreateColorAttachmentView CreateColorAttachmentView;
72 PFN_vkCreateDepthStencilView CreateDepthStencilView;
73 PFN_vkCreateShader CreateShader;
74 PFN_vkCreateGraphicsPipeline CreateGraphicsPipeline;
75 PFN_vkCreateGraphicsPipelineDerivative CreateGraphicsPipelineDerivative;
76 PFN_vkCreateComputePipeline CreateComputePipeline;
77 PFN_vkStorePipeline StorePipeline;
78 PFN_vkLoadPipeline LoadPipeline;
79 PFN_vkLoadPipelineDerivative LoadPipelineDerivative;
Mark Lobodzinski556f7212015-04-17 14:11:39 -050080 PFN_vkCreatePipelineLayout CreatePipelineLayout;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060081 PFN_vkCreateSampler CreateSampler;
82 PFN_vkCreateDescriptorSetLayout CreateDescriptorSetLayout;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060083 PFN_vkCreateDescriptorPool CreateDescriptorPool;
84 PFN_vkResetDescriptorPool ResetDescriptorPool;
85 PFN_vkAllocDescriptorSets AllocDescriptorSets;
86 PFN_vkClearDescriptorSets ClearDescriptorSets;
Chia-I Wu8cd8ecd2015-05-25 16:27:55 +080087 PFN_vkUpdateDescriptorSets UpdateDescriptorSets;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060088 PFN_vkCreateDynamicViewportState CreateDynamicViewportState;
89 PFN_vkCreateDynamicRasterState CreateDynamicRasterState;
90 PFN_vkCreateDynamicColorBlendState CreateDynamicColorBlendState;
91 PFN_vkCreateDynamicDepthStencilState CreateDynamicDepthStencilState;
92 PFN_vkCreateCommandBuffer CreateCommandBuffer;
93 PFN_vkBeginCommandBuffer BeginCommandBuffer;
94 PFN_vkEndCommandBuffer EndCommandBuffer;
95 PFN_vkResetCommandBuffer ResetCommandBuffer;
96 PFN_vkCmdBindPipeline CmdBindPipeline;
97 PFN_vkCmdBindDynamicStateObject CmdBindDynamicStateObject;
98 PFN_vkCmdBindDescriptorSets CmdBindDescriptorSets;
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -060099 PFN_vkCmdBindVertexBuffers CmdBindVertexBuffers;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600100 PFN_vkCmdBindIndexBuffer CmdBindIndexBuffer;
101 PFN_vkCmdDraw CmdDraw;
102 PFN_vkCmdDrawIndexed CmdDrawIndexed;
103 PFN_vkCmdDrawIndirect CmdDrawIndirect;
104 PFN_vkCmdDrawIndexedIndirect CmdDrawIndexedIndirect;
105 PFN_vkCmdDispatch CmdDispatch;
106 PFN_vkCmdDispatchIndirect CmdDispatchIndirect;
107 PFN_vkCmdCopyBuffer CmdCopyBuffer;
108 PFN_vkCmdCopyImage CmdCopyImage;
109 PFN_vkCmdBlitImage CmdBlitImage;
110 PFN_vkCmdCopyBufferToImage CmdCopyBufferToImage;
111 PFN_vkCmdCopyImageToBuffer CmdCopyImageToBuffer;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600112 PFN_vkCmdUpdateBuffer CmdUpdateBuffer;
113 PFN_vkCmdFillBuffer CmdFillBuffer;
114 PFN_vkCmdClearColorImage CmdClearColorImage;
115 PFN_vkCmdClearDepthStencil CmdClearDepthStencil;
116 PFN_vkCmdResolveImage CmdResolveImage;
117 PFN_vkCmdSetEvent CmdSetEvent;
118 PFN_vkCmdResetEvent CmdResetEvent;
119 PFN_vkCmdWaitEvents CmdWaitEvents;
120 PFN_vkCmdPipelineBarrier CmdPipelineBarrier;
121 PFN_vkCmdBeginQuery CmdBeginQuery;
122 PFN_vkCmdEndQuery CmdEndQuery;
123 PFN_vkCmdResetQueryPool CmdResetQueryPool;
124 PFN_vkCmdWriteTimestamp CmdWriteTimestamp;
Courtney Goeltzenleuchter98049062015-04-15 18:21:13 -0600125 PFN_vkCmdCopyQueryPoolResults CmdCopyQueryPoolResults;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600126 PFN_vkCmdInitAtomicCounters CmdInitAtomicCounters;
127 PFN_vkCmdLoadAtomicCounters CmdLoadAtomicCounters;
128 PFN_vkCmdSaveAtomicCounters CmdSaveAtomicCounters;
129 PFN_vkCreateFramebuffer CreateFramebuffer;
130 PFN_vkCreateRenderPass CreateRenderPass;
131 PFN_vkCmdBeginRenderPass CmdBeginRenderPass;
132 PFN_vkCmdEndRenderPass CmdEndRenderPass;
133 PFN_vkDbgSetValidationLevel DbgSetValidationLevel;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600134 PFN_vkDbgSetMessageFilter DbgSetMessageFilter;
135 PFN_vkDbgSetObjectTag DbgSetObjectTag;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600136 PFN_vkDbgSetDeviceOption DbgSetDeviceOption;
137 PFN_vkCmdDbgMarkerBegin CmdDbgMarkerBegin;
138 PFN_vkCmdDbgMarkerEnd CmdDbgMarkerEnd;
Chia-I Wu5b66aa52015-04-16 22:02:10 +0800139 PFN_vkCreateSwapChainWSI CreateSwapChainWSI;
140 PFN_vkDestroySwapChainWSI DestroySwapChainWSI;
141 PFN_vkGetSwapChainInfoWSI GetSwapChainInfoWSI;
142 PFN_vkQueuePresentWSI QueuePresentWSI;
Jon Ashburn301c5f02015-04-06 10:58:22 -0600143} VkLayerDispatchTable;
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -0600144
Jon Ashburn9a9bb642015-05-04 16:27:53 -0600145typedef struct VkLayerInstanceDispatchTable_
146{
147 PFN_vkGetInstanceProcAddr GetInstanceProcAddr;
Jon Ashburn52c1d732015-05-12 17:23:55 -0600148 PFN_vkCreateInstance CreateInstance;
Jon Ashburn9a9bb642015-05-04 16:27:53 -0600149 PFN_vkDestroyInstance DestroyInstance;
150 PFN_vkEnumeratePhysicalDevices EnumeratePhysicalDevices;
151 PFN_vkGetPhysicalDeviceInfo GetPhysicalDeviceInfo;
152 PFN_vkCreateDevice CreateDevice;
Jon Ashburn52c1d732015-05-12 17:23:55 -0600153 PFN_vkGetGlobalExtensionInfo GetGlobalExtensionInfo;
Jon Ashburn9a9bb642015-05-04 16:27:53 -0600154 PFN_vkGetPhysicalDeviceExtensionInfo GetPhysicalDeviceExtensionInfo;
155 PFN_vkEnumerateLayers EnumerateLayers;
156 PFN_vkGetMultiDeviceCompatibility GetMultiDeviceCompatibility;
157 PFN_vkDbgRegisterMsgCallback DbgRegisterMsgCallback;
158 PFN_vkDbgUnregisterMsgCallback DbgUnregisterMsgCallback;
159 PFN_vkDbgSetGlobalOption DbgSetGlobalOption;
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600160 PFN_vkGetDisplayInfoWSI GetDisplayInfoWSI;
Jon Ashburn9a9bb642015-05-04 16:27:53 -0600161} VkLayerInstanceDispatchTable;
162
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -0600163// LL node for tree of dbg callback functions
164typedef struct _VK_LAYER_DBG_FUNCTION_NODE
165{
166 VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback;
167 void *pUserData;
168 struct _VK_LAYER_DBG_FUNCTION_NODE *pNext;
169} VK_LAYER_DBG_FUNCTION_NODE;
170
171typedef enum _VK_LAYER_DBG_ACTION
172{
173 VK_DBG_LAYER_ACTION_IGNORE = 0x0,
174 VK_DBG_LAYER_ACTION_CALLBACK = 0x1,
175 VK_DBG_LAYER_ACTION_LOG_MSG = 0x2,
176 VK_DBG_LAYER_ACTION_BREAK = 0x4
177} VK_LAYER_DBG_ACTION;
178
179typedef enum _VK_LAYER_DBG_REPORT_LEVEL
180{
181
182 VK_DBG_LAYER_LEVEL_INFO = 0,
183 VK_DBG_LAYER_LEVEL_WARN,
184 VK_DBG_LAYER_LEVEL_PERF_WARN,
185 VK_DBG_LAYER_LEVEL_ERROR,
186 VK_DBG_LAYER_LEVEL_NONE,
187} VK_LAYER_DBG_REPORT_LEVEL;
188// ------------------------------------------------------------------------------------------------
189// API functions