blob: 3e915b1b3db79a36db2dec821611dfba7c643804 [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"
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -06008#include "vk_debug_report_lunarg.h"
9#include "vk_debug_marker_lunarg.h"
10#include "vk_wsi_lunarg.h"
Chia-I Wu5b66aa52015-04-16 22:02:10 +080011#include "vk_wsi_lunarg.h"
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -060012#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
Jon Ashburn79b78ac2015-05-05 14:22:52 -060020typedef void * (*PFN_vkGPA)(VkObject obj, const char * pName);
Jon Ashburn301c5f02015-04-06 10:58:22 -060021typedef struct VkBaseLayerObject_
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -060022{
Jon Ashburn79b78ac2015-05-05 14:22:52 -060023 PFN_vkGPA pGPA;
Mike Stroyan230e6252015-04-17 12:36:38 -060024 VkObject nextObject;
25 VkObject 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{
Jon Ashburn1245cec2015-05-18 13:20:15 -060030 PFN_vkGetDeviceProcAddr GetDeviceProcAddr;
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -060031 PFN_vkCreateDevice CreateDevice;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060032 PFN_vkDestroyDevice DestroyDevice;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060033 PFN_vkGetDeviceQueue GetDeviceQueue;
34 PFN_vkQueueSubmit QueueSubmit;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060035 PFN_vkQueueWaitIdle QueueWaitIdle;
36 PFN_vkDeviceWaitIdle DeviceWaitIdle;
37 PFN_vkAllocMemory AllocMemory;
38 PFN_vkFreeMemory FreeMemory;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060039 PFN_vkMapMemory MapMemory;
40 PFN_vkUnmapMemory UnmapMemory;
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -060041 PFN_vkFlushMappedMemoryRanges FlushMappedMemoryRanges;
42 PFN_vkInvalidateMappedMemoryRanges InvalidateMappedMemoryRanges;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060043 PFN_vkDestroyObject DestroyObject;
Tony Barbour426b9052015-06-24 16:06:58 -060044 PFN_vkGetObjectMemoryRequirements GetObjectMemoryRequirements;
Mark Lobodzinskifb9f5642015-05-11 17:21:15 -050045 PFN_vkBindObjectMemory BindObjectMemory;
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -060046 PFN_vkGetImageSparseMemoryRequirements GetImageSparseMemoryRequirements;
Mark Lobodzinskifb9f5642015-05-11 17:21:15 -050047 PFN_vkQueueBindSparseBufferMemory QueueBindSparseBufferMemory;
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -060048 PFN_vkQueueBindSparseImageOpaqueMemory QueueBindSparseImageOpaqueMemory;
Mark Lobodzinskifb9f5642015-05-11 17:21:15 -050049 PFN_vkQueueBindSparseImageMemory QueueBindSparseImageMemory;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060050 PFN_vkCreateFence CreateFence;
51 PFN_vkGetFenceStatus GetFenceStatus;
52 PFN_vkResetFences ResetFences;
53 PFN_vkWaitForFences WaitForFences;
54 PFN_vkCreateSemaphore CreateSemaphore;
55 PFN_vkQueueSignalSemaphore QueueSignalSemaphore;
56 PFN_vkQueueWaitSemaphore QueueWaitSemaphore;
57 PFN_vkCreateEvent CreateEvent;
58 PFN_vkGetEventStatus GetEventStatus;
59 PFN_vkSetEvent SetEvent;
60 PFN_vkResetEvent ResetEvent;
61 PFN_vkCreateQueryPool CreateQueryPool;
62 PFN_vkGetQueryPoolResults GetQueryPoolResults;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060063 PFN_vkCreateBuffer CreateBuffer;
64 PFN_vkCreateBufferView CreateBufferView;
65 PFN_vkCreateImage CreateImage;
Tony Barbour426b9052015-06-24 16:06:58 -060066 PFN_vkGetImageSubresourceLayout GetImageSubresourceLayout;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060067 PFN_vkCreateImageView CreateImageView;
68 PFN_vkCreateColorAttachmentView CreateColorAttachmentView;
69 PFN_vkCreateDepthStencilView CreateDepthStencilView;
Courtney Goeltzenleuchter0b29b0d2015-06-24 18:24:19 -060070 PFN_vkCreateShaderModule CreateShaderModule;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060071 PFN_vkCreateShader CreateShader;
Jon Ashburn0d60d272015-07-09 15:02:25 -060072 PFN_vkCreatePipelineCache CreatePipelineCache;
73 PFN_vkDestroyPipelineCache DestroyPipelineCache;
74 PFN_vkGetPipelineCacheSize GetPipelineCacheSize;
75 PFN_vkGetPipelineCacheData GetPipelineCacheData;
76 PFN_vkMergePipelineCaches MergePipelineCaches;
77 PFN_vkCreateGraphicsPipelines CreateGraphicsPipelines;
78 PFN_vkCreateComputePipelines CreateComputePipelines;
Mark Lobodzinski556f7212015-04-17 14:11:39 -050079 PFN_vkCreatePipelineLayout CreatePipelineLayout;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060080 PFN_vkCreateSampler CreateSampler;
81 PFN_vkCreateDescriptorSetLayout CreateDescriptorSetLayout;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060082 PFN_vkCreateDescriptorPool CreateDescriptorPool;
83 PFN_vkResetDescriptorPool ResetDescriptorPool;
84 PFN_vkAllocDescriptorSets AllocDescriptorSets;
Chia-I Wu8cd8ecd2015-05-25 16:27:55 +080085 PFN_vkUpdateDescriptorSets UpdateDescriptorSets;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060086 PFN_vkCreateDynamicViewportState CreateDynamicViewportState;
87 PFN_vkCreateDynamicRasterState CreateDynamicRasterState;
88 PFN_vkCreateDynamicColorBlendState CreateDynamicColorBlendState;
89 PFN_vkCreateDynamicDepthStencilState CreateDynamicDepthStencilState;
90 PFN_vkCreateCommandBuffer CreateCommandBuffer;
91 PFN_vkBeginCommandBuffer BeginCommandBuffer;
92 PFN_vkEndCommandBuffer EndCommandBuffer;
93 PFN_vkResetCommandBuffer ResetCommandBuffer;
94 PFN_vkCmdBindPipeline CmdBindPipeline;
95 PFN_vkCmdBindDynamicStateObject CmdBindDynamicStateObject;
96 PFN_vkCmdBindDescriptorSets CmdBindDescriptorSets;
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -060097 PFN_vkCmdBindVertexBuffers CmdBindVertexBuffers;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060098 PFN_vkCmdBindIndexBuffer CmdBindIndexBuffer;
99 PFN_vkCmdDraw CmdDraw;
100 PFN_vkCmdDrawIndexed CmdDrawIndexed;
101 PFN_vkCmdDrawIndirect CmdDrawIndirect;
102 PFN_vkCmdDrawIndexedIndirect CmdDrawIndexedIndirect;
103 PFN_vkCmdDispatch CmdDispatch;
104 PFN_vkCmdDispatchIndirect CmdDispatchIndirect;
105 PFN_vkCmdCopyBuffer CmdCopyBuffer;
106 PFN_vkCmdCopyImage CmdCopyImage;
107 PFN_vkCmdBlitImage CmdBlitImage;
108 PFN_vkCmdCopyBufferToImage CmdCopyBufferToImage;
109 PFN_vkCmdCopyImageToBuffer CmdCopyImageToBuffer;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600110 PFN_vkCmdUpdateBuffer CmdUpdateBuffer;
111 PFN_vkCmdFillBuffer CmdFillBuffer;
112 PFN_vkCmdClearColorImage CmdClearColorImage;
Chris Forbes2951d7d2015-06-22 17:21:59 +1200113 PFN_vkCmdClearDepthStencilImage CmdClearDepthStencilImage;
114 PFN_vkCmdClearColorAttachment CmdClearColorAttachment;
115 PFN_vkCmdClearDepthStencilAttachment CmdClearDepthStencilAttachment;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600116 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_vkCreateFramebuffer CreateFramebuffer;
127 PFN_vkCreateRenderPass CreateRenderPass;
128 PFN_vkCmdBeginRenderPass CmdBeginRenderPass;
129 PFN_vkCmdEndRenderPass CmdEndRenderPass;
Chia-I Wu88eaa3b2015-06-26 15:34:39 +0800130 PFN_vkCmdExecuteCommands CmdExecuteCommands;
Chia-I Wu5b66aa52015-04-16 22:02:10 +0800131 PFN_vkCreateSwapChainWSI CreateSwapChainWSI;
132 PFN_vkDestroySwapChainWSI DestroySwapChainWSI;
133 PFN_vkGetSwapChainInfoWSI GetSwapChainInfoWSI;
134 PFN_vkQueuePresentWSI QueuePresentWSI;
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600135 PFN_vkDbgCreateMsgCallback DbgCreateMsgCallback;
136 PFN_vkDbgDestroyMsgCallback DbgDestroyMsgCallback;
137 PFN_vkDbgStringCallback DbgStringCallback;
138 PFN_vkDbgStdioCallback DbgStdioCallback;
139 PFN_vkDbgBreakCallback DbgBreakCallback;
Jon Ashburn301c5f02015-04-06 10:58:22 -0600140} VkLayerDispatchTable;
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -0600141
Jon Ashburn9a9bb642015-05-04 16:27:53 -0600142typedef struct VkLayerInstanceDispatchTable_
143{
144 PFN_vkGetInstanceProcAddr GetInstanceProcAddr;
Jon Ashburn52c1d732015-05-12 17:23:55 -0600145 PFN_vkCreateInstance CreateInstance;
Jon Ashburn9a9bb642015-05-04 16:27:53 -0600146 PFN_vkDestroyInstance DestroyInstance;
147 PFN_vkEnumeratePhysicalDevices EnumeratePhysicalDevices;
Chris Forbesd7576302015-06-21 22:55:02 +1200148 PFN_vkGetPhysicalDeviceFeatures GetPhysicalDeviceFeatures;
149 PFN_vkGetPhysicalDeviceFormatInfo GetPhysicalDeviceFormatInfo;
150 PFN_vkGetPhysicalDeviceLimits GetPhysicalDeviceLimits;
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -0600151 PFN_vkGetPhysicalDeviceSparseImageFormatProperties GetPhysicalDeviceSparseImageFormatProperties;
Tony Barbour426b9052015-06-24 16:06:58 -0600152 PFN_vkGetPhysicalDeviceProperties GetPhysicalDeviceProperties;
153 PFN_vkGetPhysicalDevicePerformance GetPhysicalDevicePerformance;
154 PFN_vkGetPhysicalDeviceQueueCount GetPhysicalDeviceQueueCount;
155 PFN_vkGetPhysicalDeviceQueueProperties GetPhysicalDeviceQueueProperties;
156 PFN_vkGetPhysicalDeviceMemoryProperties GetPhysicalDeviceMemoryProperties;
Tony Barbour426b9052015-06-24 16:06:58 -0600157 PFN_vkGetPhysicalDeviceExtensionProperties GetPhysicalDeviceExtensionProperties;
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600158 PFN_vkGetPhysicalDeviceLayerProperties GetPhysicalDeviceLayerProperties;
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600159 PFN_vkDbgCreateMsgCallback DbgCreateMsgCallback;
160 PFN_vkDbgDestroyMsgCallback DbgDestroyMsgCallback;
161 PFN_vkDbgStringCallback DbgStringCallback;
162 PFN_vkDbgStdioCallback DbgStdioCallback;
163 PFN_vkDbgBreakCallback DbgBreakCallback;
Jon Ashburn9a9bb642015-05-04 16:27:53 -0600164} VkLayerInstanceDispatchTable;
165
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -0600166// LL node for tree of dbg callback functions
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600167typedef struct VkLayerDbgFunctionNode_
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -0600168{
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600169 VkDbgMsgCallback msgCallback;
170 PFN_vkDbgMsgCallback pfnMsgCallback;
171 VkFlags msgFlags;
172 const void *pUserData;
173 struct VkLayerDbgFunctionNode_ *pNext;
174} VkLayerDbgFunctionNode;
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -0600175
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600176typedef enum VkLayerDbgAction_
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -0600177{
178 VK_DBG_LAYER_ACTION_IGNORE = 0x0,
179 VK_DBG_LAYER_ACTION_CALLBACK = 0x1,
180 VK_DBG_LAYER_ACTION_LOG_MSG = 0x2,
181 VK_DBG_LAYER_ACTION_BREAK = 0x4
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600182} VkLayerDbgAction;
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -0600183
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -0600184// ------------------------------------------------------------------------------------------------
185// API functions