blob: afc103ea824c989e1dab4eb3f5b03e78d2324cc3 [file] [log] [blame]
Courtney Goeltzenleuchter64d1a712015-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 Goeltzenleuchterf579fa62015-06-10 17:39:03 -06008#include "vk_debug_report_lunarg.h"
9#include "vk_debug_marker_lunarg.h"
Ian Elliott1064fe32015-07-06 14:31:32 -060010#include "vk_wsi_swapchain.h"
11#include "vk_wsi_device_swapchain.h"
Courtney Goeltzenleuchter64d1a712015-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
Tony Barbour1d2cd3f2015-07-03 10:33:54 -060020typedef void * (*PFN_vkGPA)(void* obj, const char * pName);
21
Jon Ashburnbacb0f52015-04-06 10:58:22 -060022typedef struct VkBaseLayerObject_
Courtney Goeltzenleuchter64d1a712015-04-08 18:04:29 -060023{
Jon Ashburnf6b33db2015-05-05 14:22:52 -060024 PFN_vkGPA pGPA;
Tony Barbour1d2cd3f2015-07-03 10:33:54 -060025 void* nextObject;
26 void* baseObject;
Jon Ashburnbacb0f52015-04-06 10:58:22 -060027} VkBaseLayerObject;
Courtney Goeltzenleuchter64d1a712015-04-08 18:04:29 -060028
Jon Ashburnbacb0f52015-04-06 10:58:22 -060029typedef struct VkLayerDispatchTable_
Courtney Goeltzenleuchter64d1a712015-04-08 18:04:29 -060030{
Jon Ashburn8d1b0b52015-05-18 13:20:15 -060031 PFN_vkGetDeviceProcAddr GetDeviceProcAddr;
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -060032 PFN_vkCreateDevice CreateDevice;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -060033 PFN_vkDestroyDevice DestroyDevice;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -060034 PFN_vkGetDeviceQueue GetDeviceQueue;
35 PFN_vkQueueSubmit QueueSubmit;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -060036 PFN_vkQueueWaitIdle QueueWaitIdle;
37 PFN_vkDeviceWaitIdle DeviceWaitIdle;
38 PFN_vkAllocMemory AllocMemory;
39 PFN_vkFreeMemory FreeMemory;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -060040 PFN_vkMapMemory MapMemory;
41 PFN_vkUnmapMemory UnmapMemory;
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -060042 PFN_vkFlushMappedMemoryRanges FlushMappedMemoryRanges;
43 PFN_vkInvalidateMappedMemoryRanges InvalidateMappedMemoryRanges;
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -060044 PFN_vkGetDeviceMemoryCommitment GetDeviceMemoryCommitment;
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -060045 PFN_vkGetImageSparseMemoryRequirements GetImageSparseMemoryRequirements;
Tony Barbour1d2cd3f2015-07-03 10:33:54 -060046 PFN_vkGetImageMemoryRequirements GetImageMemoryRequirements;
47 PFN_vkGetBufferMemoryRequirements GetBufferMemoryRequirements;
48 PFN_vkBindImageMemory BindImageMemory;
49 PFN_vkBindBufferMemory BindBufferMemory;
Mark Lobodzinski942b1722015-05-11 17:21:15 -050050 PFN_vkQueueBindSparseBufferMemory QueueBindSparseBufferMemory;
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -060051 PFN_vkQueueBindSparseImageOpaqueMemory QueueBindSparseImageOpaqueMemory;
Mark Lobodzinski942b1722015-05-11 17:21:15 -050052 PFN_vkQueueBindSparseImageMemory QueueBindSparseImageMemory;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -060053 PFN_vkCreateFence CreateFence;
Tony Barbour1d2cd3f2015-07-03 10:33:54 -060054 PFN_vkDestroyFence DestroyFence;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -060055 PFN_vkGetFenceStatus GetFenceStatus;
56 PFN_vkResetFences ResetFences;
57 PFN_vkWaitForFences WaitForFences;
58 PFN_vkCreateSemaphore CreateSemaphore;
Tony Barbour1d2cd3f2015-07-03 10:33:54 -060059 PFN_vkDestroySemaphore DestroySemaphore;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -060060 PFN_vkQueueSignalSemaphore QueueSignalSemaphore;
61 PFN_vkQueueWaitSemaphore QueueWaitSemaphore;
62 PFN_vkCreateEvent CreateEvent;
Tony Barbour1d2cd3f2015-07-03 10:33:54 -060063 PFN_vkDestroyEvent DestroyEvent;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -060064 PFN_vkGetEventStatus GetEventStatus;
65 PFN_vkSetEvent SetEvent;
66 PFN_vkResetEvent ResetEvent;
67 PFN_vkCreateQueryPool CreateQueryPool;
Tony Barbour1d2cd3f2015-07-03 10:33:54 -060068 PFN_vkDestroyQueryPool DestroyQueryPool;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -060069 PFN_vkGetQueryPoolResults GetQueryPoolResults;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -060070 PFN_vkCreateBuffer CreateBuffer;
Tony Barbour1d2cd3f2015-07-03 10:33:54 -060071 PFN_vkDestroyBuffer DestroyBuffer;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -060072 PFN_vkCreateBufferView CreateBufferView;
Tony Barbour1d2cd3f2015-07-03 10:33:54 -060073 PFN_vkDestroyBufferView DestroyBufferView;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -060074 PFN_vkCreateImage CreateImage;
Tony Barbour1d2cd3f2015-07-03 10:33:54 -060075 PFN_vkDestroyImage DestroyImage;
Tony Barbour59a47322015-06-24 16:06:58 -060076 PFN_vkGetImageSubresourceLayout GetImageSubresourceLayout;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -060077 PFN_vkCreateImageView CreateImageView;
Tony Barbour1d2cd3f2015-07-03 10:33:54 -060078 PFN_vkDestroyImageView DestroyImageView;
Chia-I Wu08accc62015-07-07 11:50:03 +080079 PFN_vkCreateAttachmentView CreateAttachmentView;
Tony Barbour1d2cd3f2015-07-03 10:33:54 -060080 PFN_vkDestroyAttachmentView DestroyAttachmentView;
Courtney Goeltzenleuchter2d2cb682015-06-24 18:24:19 -060081 PFN_vkCreateShaderModule CreateShaderModule;
Tony Barbour1d2cd3f2015-07-03 10:33:54 -060082 PFN_vkDestroyShaderModule DestroyShaderModule;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -060083 PFN_vkCreateShader CreateShader;
Tony Barbour1d2cd3f2015-07-03 10:33:54 -060084 PFN_vkDestroyShader DestroyShader;
Jon Ashburnc669cc62015-07-09 15:02:25 -060085 PFN_vkCreatePipelineCache CreatePipelineCache;
86 PFN_vkDestroyPipelineCache DestroyPipelineCache;
87 PFN_vkGetPipelineCacheSize GetPipelineCacheSize;
88 PFN_vkGetPipelineCacheData GetPipelineCacheData;
89 PFN_vkMergePipelineCaches MergePipelineCaches;
90 PFN_vkCreateGraphicsPipelines CreateGraphicsPipelines;
91 PFN_vkCreateComputePipelines CreateComputePipelines;
Tony Barbour1d2cd3f2015-07-03 10:33:54 -060092 PFN_vkDestroyPipeline DestroyPipeline;
Mark Lobodzinski0fadf5f2015-04-17 14:11:39 -050093 PFN_vkCreatePipelineLayout CreatePipelineLayout;
Tony Barbour1d2cd3f2015-07-03 10:33:54 -060094 PFN_vkDestroyPipelineLayout DestroyPipelineLayout;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -060095 PFN_vkCreateSampler CreateSampler;
Tony Barbour1d2cd3f2015-07-03 10:33:54 -060096 PFN_vkDestroySampler DestroySampler;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -060097 PFN_vkCreateDescriptorSetLayout CreateDescriptorSetLayout;
Tony Barbour1d2cd3f2015-07-03 10:33:54 -060098 PFN_vkDestroyDescriptorSetLayout DestroyDescriptorSetLayout;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -060099 PFN_vkCreateDescriptorPool CreateDescriptorPool;
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600100 PFN_vkDestroyDescriptorPool DestroyDescriptorPool;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -0600101 PFN_vkResetDescriptorPool ResetDescriptorPool;
102 PFN_vkAllocDescriptorSets AllocDescriptorSets;
Tony Barbour34ec6922015-07-10 10:50:45 -0600103 PFN_vkFreeDescriptorSets FreeDescriptorSets;
Chia-I Wu9d00ed72015-05-25 16:27:55 +0800104 PFN_vkUpdateDescriptorSets UpdateDescriptorSets;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -0600105 PFN_vkCreateDynamicViewportState CreateDynamicViewportState;
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600106 PFN_vkDestroyDynamicViewportState DestroyDynamicViewportState;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -0600107 PFN_vkCreateDynamicRasterState CreateDynamicRasterState;
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600108 PFN_vkDestroyDynamicRasterState DestroyDynamicRasterState;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -0600109 PFN_vkCreateDynamicColorBlendState CreateDynamicColorBlendState;
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600110 PFN_vkDestroyDynamicColorBlendState DestroyDynamicColorBlendState;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -0600111 PFN_vkCreateDynamicDepthStencilState CreateDynamicDepthStencilState;
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600112 PFN_vkDestroyDynamicDepthStencilState DestroyDynamicDepthStencilState;
Jon Ashburn42540ef2015-07-23 18:48:20 -0600113 PFN_vkCreateFramebuffer CreateFramebuffer;
114 PFN_vkDestroyFramebuffer DestroyFramebuffer;
115 PFN_vkCreateRenderPass CreateRenderPass;
116 PFN_vkDestroyRenderPass DestroyRenderPass;
117 PFN_vkGetRenderAreaGranularity GetRenderAreaGranularity;
Cody Northrope62183e2015-07-09 18:08:05 -0600118 PFN_vkCreateCommandPool CreateCommandPool;
119 PFN_vkDestroyCommandPool DestroyCommandPool;
120 PFN_vkResetCommandPool ResetCommandPool;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -0600121 PFN_vkCreateCommandBuffer CreateCommandBuffer;
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600122 PFN_vkDestroyCommandBuffer DestroyCommandBuffer;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -0600123 PFN_vkBeginCommandBuffer BeginCommandBuffer;
124 PFN_vkEndCommandBuffer EndCommandBuffer;
125 PFN_vkResetCommandBuffer ResetCommandBuffer;
126 PFN_vkCmdBindPipeline CmdBindPipeline;
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600127 PFN_vkCmdBindDynamicViewportState CmdBindDynamicViewportState;
128 PFN_vkCmdBindDynamicRasterState CmdBindDynamicRasterState;
129 PFN_vkCmdBindDynamicColorBlendState CmdBindDynamicColorBlendState;
130 PFN_vkCmdBindDynamicDepthStencilState CmdBindDynamicDepthStencilState;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -0600131 PFN_vkCmdBindDescriptorSets CmdBindDescriptorSets;
Courtney Goeltzenleuchterf68ad722015-04-16 13:38:46 -0600132 PFN_vkCmdBindVertexBuffers CmdBindVertexBuffers;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -0600133 PFN_vkCmdBindIndexBuffer CmdBindIndexBuffer;
134 PFN_vkCmdDraw CmdDraw;
135 PFN_vkCmdDrawIndexed CmdDrawIndexed;
136 PFN_vkCmdDrawIndirect CmdDrawIndirect;
137 PFN_vkCmdDrawIndexedIndirect CmdDrawIndexedIndirect;
138 PFN_vkCmdDispatch CmdDispatch;
139 PFN_vkCmdDispatchIndirect CmdDispatchIndirect;
140 PFN_vkCmdCopyBuffer CmdCopyBuffer;
141 PFN_vkCmdCopyImage CmdCopyImage;
142 PFN_vkCmdBlitImage CmdBlitImage;
143 PFN_vkCmdCopyBufferToImage CmdCopyBufferToImage;
144 PFN_vkCmdCopyImageToBuffer CmdCopyImageToBuffer;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -0600145 PFN_vkCmdUpdateBuffer CmdUpdateBuffer;
146 PFN_vkCmdFillBuffer CmdFillBuffer;
147 PFN_vkCmdClearColorImage CmdClearColorImage;
Chris Forbesd9be82b2015-06-22 17:21:59 +1200148 PFN_vkCmdClearDepthStencilImage CmdClearDepthStencilImage;
149 PFN_vkCmdClearColorAttachment CmdClearColorAttachment;
150 PFN_vkCmdClearDepthStencilAttachment CmdClearDepthStencilAttachment;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -0600151 PFN_vkCmdResolveImage CmdResolveImage;
152 PFN_vkCmdSetEvent CmdSetEvent;
153 PFN_vkCmdResetEvent CmdResetEvent;
154 PFN_vkCmdWaitEvents CmdWaitEvents;
155 PFN_vkCmdPipelineBarrier CmdPipelineBarrier;
156 PFN_vkCmdBeginQuery CmdBeginQuery;
157 PFN_vkCmdEndQuery CmdEndQuery;
158 PFN_vkCmdResetQueryPool CmdResetQueryPool;
159 PFN_vkCmdWriteTimestamp CmdWriteTimestamp;
Courtney Goeltzenleuchter1dbc8e22015-04-15 18:21:13 -0600160 PFN_vkCmdCopyQueryPoolResults CmdCopyQueryPoolResults;
Jon Ashburn42540ef2015-07-23 18:48:20 -0600161 PFN_vkCmdPushConstants CmdPushConstants;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -0600162 PFN_vkCmdBeginRenderPass CmdBeginRenderPass;
Chia-I Wu08accc62015-07-07 11:50:03 +0800163 PFN_vkCmdNextSubpass CmdNextSubpass;
Courtney Goeltzenleuchterfb4efc62015-04-10 08:34:15 -0600164 PFN_vkCmdEndRenderPass CmdEndRenderPass;
Chia-I Wu0b50a1c2015-06-26 15:34:39 +0800165 PFN_vkCmdExecuteCommands CmdExecuteCommands;
Ian Elliottd1bbb892015-08-06 16:55:36 -0600166 PFN_vkGetSurfacePropertiesWSI GetSurfacePropertiesWSI;
167 PFN_vkGetSurfaceFormatsWSI GetSurfaceFormatsWSI;
168 PFN_vkGetSurfacePresentModesWSI GetSurfacePresentModesWSI;
Chia-I Wuf8693382015-04-16 22:02:10 +0800169 PFN_vkCreateSwapChainWSI CreateSwapChainWSI;
170 PFN_vkDestroySwapChainWSI DestroySwapChainWSI;
Ian Elliottd1bbb892015-08-06 16:55:36 -0600171 PFN_vkGetSwapChainImagesWSI GetSwapChainImagesWSI;
Ian Elliott1064fe32015-07-06 14:31:32 -0600172 PFN_vkAcquireNextImageWSI AcquireNextImageWSI;
Chia-I Wuf8693382015-04-16 22:02:10 +0800173 PFN_vkQueuePresentWSI QueuePresentWSI;
Courtney Goeltzenleuchterf579fa62015-06-10 17:39:03 -0600174 PFN_vkDbgCreateMsgCallback DbgCreateMsgCallback;
175 PFN_vkDbgDestroyMsgCallback DbgDestroyMsgCallback;
Jon Ashburnbacb0f52015-04-06 10:58:22 -0600176} VkLayerDispatchTable;
Courtney Goeltzenleuchter64d1a712015-04-08 18:04:29 -0600177
Jon Ashburnfbb4e252015-05-04 16:27:53 -0600178typedef struct VkLayerInstanceDispatchTable_
179{
180 PFN_vkGetInstanceProcAddr GetInstanceProcAddr;
Jon Ashburn71836d92015-05-12 17:23:55 -0600181 PFN_vkCreateInstance CreateInstance;
Jon Ashburnfbb4e252015-05-04 16:27:53 -0600182 PFN_vkDestroyInstance DestroyInstance;
183 PFN_vkEnumeratePhysicalDevices EnumeratePhysicalDevices;
Chris Forbesbc0bb772015-06-21 22:55:02 +1200184 PFN_vkGetPhysicalDeviceFeatures GetPhysicalDeviceFeatures;
Jon Ashburn42540ef2015-07-23 18:48:20 -0600185 PFN_vkGetPhysicalDeviceImageFormatProperties GetPhysicalDeviceImageFormatProperties;
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -0600186 PFN_vkGetPhysicalDeviceFormatProperties GetPhysicalDeviceFormatProperties;
Chris Forbesbc0bb772015-06-21 22:55:02 +1200187 PFN_vkGetPhysicalDeviceLimits GetPhysicalDeviceLimits;
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -0600188 PFN_vkGetPhysicalDeviceSparseImageFormatProperties GetPhysicalDeviceSparseImageFormatProperties;
Tony Barbour59a47322015-06-24 16:06:58 -0600189 PFN_vkGetPhysicalDeviceProperties GetPhysicalDeviceProperties;
Cody Northropd0802882015-08-03 17:04:53 -0600190 PFN_vkGetPhysicalDeviceQueueFamilyProperties GetPhysicalDeviceQueueFamilyProperties;
Tony Barbour59a47322015-06-24 16:06:58 -0600191 PFN_vkGetPhysicalDeviceMemoryProperties GetPhysicalDeviceMemoryProperties;
Tony Barbour59a47322015-06-24 16:06:58 -0600192 PFN_vkGetPhysicalDeviceExtensionProperties GetPhysicalDeviceExtensionProperties;
Courtney Goeltzenleuchter110fdf92015-06-29 15:39:26 -0600193 PFN_vkGetPhysicalDeviceLayerProperties GetPhysicalDeviceLayerProperties;
Ian Elliott1064fe32015-07-06 14:31:32 -0600194 PFN_vkGetPhysicalDeviceSurfaceSupportWSI GetPhysicalDeviceSurfaceSupportWSI;
Courtney Goeltzenleuchterf579fa62015-06-10 17:39:03 -0600195 PFN_vkDbgCreateMsgCallback DbgCreateMsgCallback;
196 PFN_vkDbgDestroyMsgCallback DbgDestroyMsgCallback;
Jon Ashburnfbb4e252015-05-04 16:27:53 -0600197} VkLayerInstanceDispatchTable;
198
Courtney Goeltzenleuchter64d1a712015-04-08 18:04:29 -0600199// LL node for tree of dbg callback functions
Courtney Goeltzenleuchterf579fa62015-06-10 17:39:03 -0600200typedef struct VkLayerDbgFunctionNode_
Courtney Goeltzenleuchter64d1a712015-04-08 18:04:29 -0600201{
Courtney Goeltzenleuchterf579fa62015-06-10 17:39:03 -0600202 VkDbgMsgCallback msgCallback;
203 PFN_vkDbgMsgCallback pfnMsgCallback;
204 VkFlags msgFlags;
205 const void *pUserData;
206 struct VkLayerDbgFunctionNode_ *pNext;
207} VkLayerDbgFunctionNode;
Courtney Goeltzenleuchter64d1a712015-04-08 18:04:29 -0600208
Courtney Goeltzenleuchterf579fa62015-06-10 17:39:03 -0600209typedef enum VkLayerDbgAction_
Courtney Goeltzenleuchter64d1a712015-04-08 18:04:29 -0600210{
211 VK_DBG_LAYER_ACTION_IGNORE = 0x0,
212 VK_DBG_LAYER_ACTION_CALLBACK = 0x1,
213 VK_DBG_LAYER_ACTION_LOG_MSG = 0x2,
214 VK_DBG_LAYER_ACTION_BREAK = 0x4
Courtney Goeltzenleuchterf579fa62015-06-10 17:39:03 -0600215} VkLayerDbgAction;
Courtney Goeltzenleuchter64d1a712015-04-08 18:04:29 -0600216
Courtney Goeltzenleuchter64d1a712015-04-08 18:04:29 -0600217// ------------------------------------------------------------------------------------------------
218// API functions