blob: 8fc494f15a8e7bf75d5f1b3ccdebe8818bec2353 [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"
Ian Elliott338dedb2015-08-21 15:09:33 -060010#include "vk_ext_khr_swapchain.h"
11#include "vk_ext_khr_device_swapchain.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
Tony Barbourde4124d2015-07-03 10:33:54 -060020typedef void * (*PFN_vkGPA)(void* obj, const char * pName);
21
Jon Ashburn301c5f02015-04-06 10:58:22 -060022typedef struct VkBaseLayerObject_
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -060023{
Jon Ashburn79b78ac2015-05-05 14:22:52 -060024 PFN_vkGPA pGPA;
Tony Barbourde4124d2015-07-03 10:33:54 -060025 void* nextObject;
26 void* baseObject;
Jon Ashburn301c5f02015-04-06 10:58:22 -060027} VkBaseLayerObject;
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -060028
Jon Ashburn301c5f02015-04-06 10:58:22 -060029typedef struct VkLayerDispatchTable_
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -060030{
Jon Ashburn1245cec2015-05-18 13:20:15 -060031 PFN_vkGetDeviceProcAddr GetDeviceProcAddr;
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -060032 PFN_vkCreateDevice CreateDevice;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060033 PFN_vkDestroyDevice DestroyDevice;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060034 PFN_vkGetDeviceQueue GetDeviceQueue;
35 PFN_vkQueueSubmit QueueSubmit;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060036 PFN_vkQueueWaitIdle QueueWaitIdle;
37 PFN_vkDeviceWaitIdle DeviceWaitIdle;
38 PFN_vkAllocMemory AllocMemory;
39 PFN_vkFreeMemory FreeMemory;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060040 PFN_vkMapMemory MapMemory;
41 PFN_vkUnmapMemory UnmapMemory;
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -060042 PFN_vkFlushMappedMemoryRanges FlushMappedMemoryRanges;
43 PFN_vkInvalidateMappedMemoryRanges InvalidateMappedMemoryRanges;
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -060044 PFN_vkGetDeviceMemoryCommitment GetDeviceMemoryCommitment;
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -060045 PFN_vkGetImageSparseMemoryRequirements GetImageSparseMemoryRequirements;
Tony Barbourde4124d2015-07-03 10:33:54 -060046 PFN_vkGetImageMemoryRequirements GetImageMemoryRequirements;
47 PFN_vkGetBufferMemoryRequirements GetBufferMemoryRequirements;
48 PFN_vkBindImageMemory BindImageMemory;
49 PFN_vkBindBufferMemory BindBufferMemory;
Chia-I Wu06809d52015-10-26 16:55:27 +080050 PFN_vkQueueBindSparse QueueBindSparse;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060051 PFN_vkCreateFence CreateFence;
Tony Barbourde4124d2015-07-03 10:33:54 -060052 PFN_vkDestroyFence DestroyFence;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060053 PFN_vkGetFenceStatus GetFenceStatus;
54 PFN_vkResetFences ResetFences;
55 PFN_vkWaitForFences WaitForFences;
56 PFN_vkCreateSemaphore CreateSemaphore;
Tony Barbourde4124d2015-07-03 10:33:54 -060057 PFN_vkDestroySemaphore DestroySemaphore;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060058 PFN_vkCreateEvent CreateEvent;
Tony Barbourde4124d2015-07-03 10:33:54 -060059 PFN_vkDestroyEvent DestroyEvent;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060060 PFN_vkGetEventStatus GetEventStatus;
61 PFN_vkSetEvent SetEvent;
62 PFN_vkResetEvent ResetEvent;
63 PFN_vkCreateQueryPool CreateQueryPool;
Tony Barbourde4124d2015-07-03 10:33:54 -060064 PFN_vkDestroyQueryPool DestroyQueryPool;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060065 PFN_vkGetQueryPoolResults GetQueryPoolResults;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060066 PFN_vkCreateBuffer CreateBuffer;
Tony Barbourde4124d2015-07-03 10:33:54 -060067 PFN_vkDestroyBuffer DestroyBuffer;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060068 PFN_vkCreateBufferView CreateBufferView;
Tony Barbourde4124d2015-07-03 10:33:54 -060069 PFN_vkDestroyBufferView DestroyBufferView;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060070 PFN_vkCreateImage CreateImage;
Tony Barbourde4124d2015-07-03 10:33:54 -060071 PFN_vkDestroyImage DestroyImage;
Tony Barbour426b9052015-06-24 16:06:58 -060072 PFN_vkGetImageSubresourceLayout GetImageSubresourceLayout;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060073 PFN_vkCreateImageView CreateImageView;
Tony Barbourde4124d2015-07-03 10:33:54 -060074 PFN_vkDestroyImageView DestroyImageView;
Courtney Goeltzenleuchter0b29b0d2015-06-24 18:24:19 -060075 PFN_vkCreateShaderModule CreateShaderModule;
Tony Barbourde4124d2015-07-03 10:33:54 -060076 PFN_vkDestroyShaderModule DestroyShaderModule;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060077 PFN_vkCreateShader CreateShader;
Tony Barbourde4124d2015-07-03 10:33:54 -060078 PFN_vkDestroyShader DestroyShader;
Jon Ashburn0d60d272015-07-09 15:02:25 -060079 PFN_vkCreatePipelineCache CreatePipelineCache;
80 PFN_vkDestroyPipelineCache DestroyPipelineCache;
Jon Ashburn0d60d272015-07-09 15:02:25 -060081 PFN_vkGetPipelineCacheData GetPipelineCacheData;
82 PFN_vkMergePipelineCaches MergePipelineCaches;
83 PFN_vkCreateGraphicsPipelines CreateGraphicsPipelines;
84 PFN_vkCreateComputePipelines CreateComputePipelines;
Tony Barbourde4124d2015-07-03 10:33:54 -060085 PFN_vkDestroyPipeline DestroyPipeline;
Mark Lobodzinski556f7212015-04-17 14:11:39 -050086 PFN_vkCreatePipelineLayout CreatePipelineLayout;
Tony Barbourde4124d2015-07-03 10:33:54 -060087 PFN_vkDestroyPipelineLayout DestroyPipelineLayout;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060088 PFN_vkCreateSampler CreateSampler;
Tony Barbourde4124d2015-07-03 10:33:54 -060089 PFN_vkDestroySampler DestroySampler;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060090 PFN_vkCreateDescriptorSetLayout CreateDescriptorSetLayout;
Tony Barbourde4124d2015-07-03 10:33:54 -060091 PFN_vkDestroyDescriptorSetLayout DestroyDescriptorSetLayout;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060092 PFN_vkCreateDescriptorPool CreateDescriptorPool;
Tony Barbourde4124d2015-07-03 10:33:54 -060093 PFN_vkDestroyDescriptorPool DestroyDescriptorPool;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060094 PFN_vkResetDescriptorPool ResetDescriptorPool;
95 PFN_vkAllocDescriptorSets AllocDescriptorSets;
Tony Barbourb857d312015-07-10 10:50:45 -060096 PFN_vkFreeDescriptorSets FreeDescriptorSets;
Chia-I Wu8cd8ecd2015-05-25 16:27:55 +080097 PFN_vkUpdateDescriptorSets UpdateDescriptorSets;
Jon Ashburna25465c2015-07-23 18:48:20 -060098 PFN_vkCreateFramebuffer CreateFramebuffer;
99 PFN_vkDestroyFramebuffer DestroyFramebuffer;
100 PFN_vkCreateRenderPass CreateRenderPass;
101 PFN_vkDestroyRenderPass DestroyRenderPass;
102 PFN_vkGetRenderAreaGranularity GetRenderAreaGranularity;
Cody Northropf02f9f82015-07-09 18:08:05 -0600103 PFN_vkCreateCommandPool CreateCommandPool;
104 PFN_vkDestroyCommandPool DestroyCommandPool;
105 PFN_vkResetCommandPool ResetCommandPool;
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -0600106 PFN_vkAllocCommandBuffers AllocCommandBuffers;
107 PFN_vkFreeCommandBuffers FreeCommandBuffers;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600108 PFN_vkBeginCommandBuffer BeginCommandBuffer;
109 PFN_vkEndCommandBuffer EndCommandBuffer;
110 PFN_vkResetCommandBuffer ResetCommandBuffer;
111 PFN_vkCmdBindPipeline CmdBindPipeline;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600112 PFN_vkCmdBindDescriptorSets CmdBindDescriptorSets;
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -0600113 PFN_vkCmdBindVertexBuffers CmdBindVertexBuffers;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600114 PFN_vkCmdBindIndexBuffer CmdBindIndexBuffer;
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -0600115 PFN_vkCmdSetViewport CmdSetViewport;
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -0600116 PFN_vkCmdSetScissor CmdSetScissor;
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -0600117 PFN_vkCmdSetLineWidth CmdSetLineWidth;
118 PFN_vkCmdSetDepthBias CmdSetDepthBias;
119 PFN_vkCmdSetBlendConstants CmdSetBlendConstants;
120 PFN_vkCmdSetDepthBounds CmdSetDepthBounds;
121 PFN_vkCmdSetStencilCompareMask CmdSetStencilCompareMask;
122 PFN_vkCmdSetStencilWriteMask CmdSetStencilWriteMask;
123 PFN_vkCmdSetStencilReference CmdSetStencilReference;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600124 PFN_vkCmdDraw CmdDraw;
125 PFN_vkCmdDrawIndexed CmdDrawIndexed;
126 PFN_vkCmdDrawIndirect CmdDrawIndirect;
127 PFN_vkCmdDrawIndexedIndirect CmdDrawIndexedIndirect;
128 PFN_vkCmdDispatch CmdDispatch;
129 PFN_vkCmdDispatchIndirect CmdDispatchIndirect;
130 PFN_vkCmdCopyBuffer CmdCopyBuffer;
131 PFN_vkCmdCopyImage CmdCopyImage;
132 PFN_vkCmdBlitImage CmdBlitImage;
133 PFN_vkCmdCopyBufferToImage CmdCopyBufferToImage;
134 PFN_vkCmdCopyImageToBuffer CmdCopyImageToBuffer;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600135 PFN_vkCmdUpdateBuffer CmdUpdateBuffer;
136 PFN_vkCmdFillBuffer CmdFillBuffer;
137 PFN_vkCmdClearColorImage CmdClearColorImage;
Chris Forbes2951d7d2015-06-22 17:21:59 +1200138 PFN_vkCmdClearDepthStencilImage CmdClearDepthStencilImage;
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -0600139 PFN_vkCmdClearAttachments CmdClearAttachments;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600140 PFN_vkCmdResolveImage CmdResolveImage;
141 PFN_vkCmdSetEvent CmdSetEvent;
142 PFN_vkCmdResetEvent CmdResetEvent;
143 PFN_vkCmdWaitEvents CmdWaitEvents;
144 PFN_vkCmdPipelineBarrier CmdPipelineBarrier;
145 PFN_vkCmdBeginQuery CmdBeginQuery;
146 PFN_vkCmdEndQuery CmdEndQuery;
147 PFN_vkCmdResetQueryPool CmdResetQueryPool;
148 PFN_vkCmdWriteTimestamp CmdWriteTimestamp;
Courtney Goeltzenleuchter98049062015-04-15 18:21:13 -0600149 PFN_vkCmdCopyQueryPoolResults CmdCopyQueryPoolResults;
Jon Ashburna25465c2015-07-23 18:48:20 -0600150 PFN_vkCmdPushConstants CmdPushConstants;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600151 PFN_vkCmdBeginRenderPass CmdBeginRenderPass;
Chia-I Wuc278df82015-07-07 11:50:03 +0800152 PFN_vkCmdNextSubpass CmdNextSubpass;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600153 PFN_vkCmdEndRenderPass CmdEndRenderPass;
Chia-I Wu88eaa3b2015-06-26 15:34:39 +0800154 PFN_vkCmdExecuteCommands CmdExecuteCommands;
Ian Elliott338dedb2015-08-21 15:09:33 -0600155 PFN_vkGetSurfacePropertiesKHR GetSurfacePropertiesKHR;
156 PFN_vkGetSurfaceFormatsKHR GetSurfaceFormatsKHR;
157 PFN_vkGetSurfacePresentModesKHR GetSurfacePresentModesKHR;
158 PFN_vkCreateSwapchainKHR CreateSwapchainKHR;
159 PFN_vkDestroySwapchainKHR DestroySwapchainKHR;
160 PFN_vkGetSwapchainImagesKHR GetSwapchainImagesKHR;
161 PFN_vkAcquireNextImageKHR AcquireNextImageKHR;
162 PFN_vkQueuePresentKHR QueuePresentKHR;
Jon Ashburn301c5f02015-04-06 10:58:22 -0600163} VkLayerDispatchTable;
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -0600164
Jon Ashburn9a9bb642015-05-04 16:27:53 -0600165typedef struct VkLayerInstanceDispatchTable_
166{
167 PFN_vkGetInstanceProcAddr GetInstanceProcAddr;
Jon Ashburn52c1d732015-05-12 17:23:55 -0600168 PFN_vkCreateInstance CreateInstance;
Jon Ashburn9a9bb642015-05-04 16:27:53 -0600169 PFN_vkDestroyInstance DestroyInstance;
170 PFN_vkEnumeratePhysicalDevices EnumeratePhysicalDevices;
Chris Forbesd7576302015-06-21 22:55:02 +1200171 PFN_vkGetPhysicalDeviceFeatures GetPhysicalDeviceFeatures;
Jon Ashburna25465c2015-07-23 18:48:20 -0600172 PFN_vkGetPhysicalDeviceImageFormatProperties GetPhysicalDeviceImageFormatProperties;
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -0600173 PFN_vkGetPhysicalDeviceFormatProperties GetPhysicalDeviceFormatProperties;
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -0600174 PFN_vkGetPhysicalDeviceSparseImageFormatProperties GetPhysicalDeviceSparseImageFormatProperties;
Tony Barbour426b9052015-06-24 16:06:58 -0600175 PFN_vkGetPhysicalDeviceProperties GetPhysicalDeviceProperties;
Cody Northropef72e2a2015-08-03 17:04:53 -0600176 PFN_vkGetPhysicalDeviceQueueFamilyProperties GetPhysicalDeviceQueueFamilyProperties;
Tony Barbour426b9052015-06-24 16:06:58 -0600177 PFN_vkGetPhysicalDeviceMemoryProperties GetPhysicalDeviceMemoryProperties;
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600178 PFN_vkEnumerateDeviceExtensionProperties EnumerateDeviceExtensionProperties;
179 PFN_vkEnumerateDeviceLayerProperties EnumerateDeviceLayerProperties;
Ian Elliott338dedb2015-08-21 15:09:33 -0600180 PFN_vkGetPhysicalDeviceSurfaceSupportKHR GetPhysicalDeviceSurfaceSupportKHR;
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600181 PFN_vkDbgCreateMsgCallback DbgCreateMsgCallback;
182 PFN_vkDbgDestroyMsgCallback DbgDestroyMsgCallback;
Jon Ashburn9a9bb642015-05-04 16:27:53 -0600183} VkLayerInstanceDispatchTable;
184
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -0600185// LL node for tree of dbg callback functions
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600186typedef struct VkLayerDbgFunctionNode_
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -0600187{
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600188 VkDbgMsgCallback msgCallback;
189 PFN_vkDbgMsgCallback pfnMsgCallback;
190 VkFlags msgFlags;
191 const void *pUserData;
192 struct VkLayerDbgFunctionNode_ *pNext;
193} VkLayerDbgFunctionNode;
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -0600194
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600195typedef enum VkLayerDbgAction_
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -0600196{
197 VK_DBG_LAYER_ACTION_IGNORE = 0x0,
198 VK_DBG_LAYER_ACTION_CALLBACK = 0x1,
199 VK_DBG_LAYER_ACTION_LOG_MSG = 0x2,
Courtney Goeltzenleuchterb94f0512015-10-05 14:41:34 -0600200 VK_DBG_LAYER_ACTION_BREAK = 0x4,
201 VK_DBG_LAYER_ACTION_DEBUG_OUTPUT = 0x8,
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600202} VkLayerDbgAction;
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -0600203
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -0600204// ------------------------------------------------------------------------------------------------
205// API functions