1 // 2 // File: vk_layer.h 3 // 4 /* 5 * Copyright (c) 2015-2016 The Khronos Group Inc. 6 * Copyright (c) 2015-2016 Valve Corporation 7 * Copyright (c) 2015-2016 LunarG, Inc. 8 * 9 * Licensed under the Apache License, Version 2.0 (the "License"); 10 * you may not use this file except in compliance with the License. 11 * You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 * 21 */ 22 23 /* Need to define dispatch table 24 * Core struct can then have ptr to dispatch table at the top 25 * Along with object ptrs for current and next OBJ 26 */ 27 #pragma once 28 29 #include "vulkan.h" 30 #if defined(__GNUC__) && __GNUC__ >= 4 31 #define VK_LAYER_EXPORT __attribute__((visibility("default"))) 32 #elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590) 33 #define VK_LAYER_EXPORT __attribute__((visibility("default"))) 34 #else 35 #define VK_LAYER_EXPORT 36 #endif 37 38 typedef struct VkLayerDispatchTable_ { 39 PFN_vkGetDeviceProcAddr GetDeviceProcAddr; 40 PFN_vkDestroyDevice DestroyDevice; 41 PFN_vkGetDeviceQueue GetDeviceQueue; 42 PFN_vkQueueSubmit QueueSubmit; 43 PFN_vkQueueWaitIdle QueueWaitIdle; 44 PFN_vkDeviceWaitIdle DeviceWaitIdle; 45 PFN_vkAllocateMemory AllocateMemory; 46 PFN_vkFreeMemory FreeMemory; 47 PFN_vkMapMemory MapMemory; 48 PFN_vkUnmapMemory UnmapMemory; 49 PFN_vkFlushMappedMemoryRanges FlushMappedMemoryRanges; 50 PFN_vkInvalidateMappedMemoryRanges InvalidateMappedMemoryRanges; 51 PFN_vkGetDeviceMemoryCommitment GetDeviceMemoryCommitment; 52 PFN_vkGetImageSparseMemoryRequirements GetImageSparseMemoryRequirements; 53 PFN_vkGetImageMemoryRequirements GetImageMemoryRequirements; 54 PFN_vkGetBufferMemoryRequirements GetBufferMemoryRequirements; 55 PFN_vkBindImageMemory BindImageMemory; 56 PFN_vkBindBufferMemory BindBufferMemory; 57 PFN_vkQueueBindSparse QueueBindSparse; 58 PFN_vkCreateFence CreateFence; 59 PFN_vkDestroyFence DestroyFence; 60 PFN_vkGetFenceStatus GetFenceStatus; 61 PFN_vkResetFences ResetFences; 62 PFN_vkWaitForFences WaitForFences; 63 PFN_vkCreateSemaphore CreateSemaphore; 64 PFN_vkDestroySemaphore DestroySemaphore; 65 PFN_vkCreateEvent CreateEvent; 66 PFN_vkDestroyEvent DestroyEvent; 67 PFN_vkGetEventStatus GetEventStatus; 68 PFN_vkSetEvent SetEvent; 69 PFN_vkResetEvent ResetEvent; 70 PFN_vkCreateQueryPool CreateQueryPool; 71 PFN_vkDestroyQueryPool DestroyQueryPool; 72 PFN_vkGetQueryPoolResults GetQueryPoolResults; 73 PFN_vkCreateBuffer CreateBuffer; 74 PFN_vkDestroyBuffer DestroyBuffer; 75 PFN_vkCreateBufferView CreateBufferView; 76 PFN_vkDestroyBufferView DestroyBufferView; 77 PFN_vkCreateImage CreateImage; 78 PFN_vkDestroyImage DestroyImage; 79 PFN_vkGetImageSubresourceLayout GetImageSubresourceLayout; 80 PFN_vkCreateImageView CreateImageView; 81 PFN_vkDestroyImageView DestroyImageView; 82 PFN_vkCreateShaderModule CreateShaderModule; 83 PFN_vkDestroyShaderModule DestroyShaderModule; 84 PFN_vkCreatePipelineCache CreatePipelineCache; 85 PFN_vkDestroyPipelineCache DestroyPipelineCache; 86 PFN_vkGetPipelineCacheData GetPipelineCacheData; 87 PFN_vkMergePipelineCaches MergePipelineCaches; 88 PFN_vkCreateGraphicsPipelines CreateGraphicsPipelines; 89 PFN_vkCreateComputePipelines CreateComputePipelines; 90 PFN_vkDestroyPipeline DestroyPipeline; 91 PFN_vkCreatePipelineLayout CreatePipelineLayout; 92 PFN_vkDestroyPipelineLayout DestroyPipelineLayout; 93 PFN_vkCreateSampler CreateSampler; 94 PFN_vkDestroySampler DestroySampler; 95 PFN_vkCreateDescriptorSetLayout CreateDescriptorSetLayout; 96 PFN_vkDestroyDescriptorSetLayout DestroyDescriptorSetLayout; 97 PFN_vkCreateDescriptorPool CreateDescriptorPool; 98 PFN_vkDestroyDescriptorPool DestroyDescriptorPool; 99 PFN_vkResetDescriptorPool ResetDescriptorPool; 100 PFN_vkAllocateDescriptorSets AllocateDescriptorSets; 101 PFN_vkFreeDescriptorSets FreeDescriptorSets; 102 PFN_vkUpdateDescriptorSets UpdateDescriptorSets; 103 PFN_vkCreateFramebuffer CreateFramebuffer; 104 PFN_vkDestroyFramebuffer DestroyFramebuffer; 105 PFN_vkCreateRenderPass CreateRenderPass; 106 PFN_vkDestroyRenderPass DestroyRenderPass; 107 PFN_vkGetRenderAreaGranularity GetRenderAreaGranularity; 108 PFN_vkCreateCommandPool CreateCommandPool; 109 PFN_vkDestroyCommandPool DestroyCommandPool; 110 PFN_vkResetCommandPool ResetCommandPool; 111 PFN_vkAllocateCommandBuffers AllocateCommandBuffers; 112 PFN_vkFreeCommandBuffers FreeCommandBuffers; 113 PFN_vkBeginCommandBuffer BeginCommandBuffer; 114 PFN_vkEndCommandBuffer EndCommandBuffer; 115 PFN_vkResetCommandBuffer ResetCommandBuffer; 116 PFN_vkCmdBindPipeline CmdBindPipeline; 117 PFN_vkCmdBindDescriptorSets CmdBindDescriptorSets; 118 PFN_vkCmdBindVertexBuffers CmdBindVertexBuffers; 119 PFN_vkCmdBindIndexBuffer CmdBindIndexBuffer; 120 PFN_vkCmdSetViewport CmdSetViewport; 121 PFN_vkCmdSetScissor CmdSetScissor; 122 PFN_vkCmdSetLineWidth CmdSetLineWidth; 123 PFN_vkCmdSetDepthBias CmdSetDepthBias; 124 PFN_vkCmdSetBlendConstants CmdSetBlendConstants; 125 PFN_vkCmdSetDepthBounds CmdSetDepthBounds; 126 PFN_vkCmdSetStencilCompareMask CmdSetStencilCompareMask; 127 PFN_vkCmdSetStencilWriteMask CmdSetStencilWriteMask; 128 PFN_vkCmdSetStencilReference CmdSetStencilReference; 129 PFN_vkCmdDraw CmdDraw; 130 PFN_vkCmdDrawIndexed CmdDrawIndexed; 131 PFN_vkCmdDrawIndirect CmdDrawIndirect; 132 PFN_vkCmdDrawIndexedIndirect CmdDrawIndexedIndirect; 133 PFN_vkCmdDispatch CmdDispatch; 134 PFN_vkCmdDispatchIndirect CmdDispatchIndirect; 135 PFN_vkCmdCopyBuffer CmdCopyBuffer; 136 PFN_vkCmdCopyImage CmdCopyImage; 137 PFN_vkCmdBlitImage CmdBlitImage; 138 PFN_vkCmdCopyBufferToImage CmdCopyBufferToImage; 139 PFN_vkCmdCopyImageToBuffer CmdCopyImageToBuffer; 140 PFN_vkCmdUpdateBuffer CmdUpdateBuffer; 141 PFN_vkCmdFillBuffer CmdFillBuffer; 142 PFN_vkCmdClearColorImage CmdClearColorImage; 143 PFN_vkCmdClearDepthStencilImage CmdClearDepthStencilImage; 144 PFN_vkCmdClearAttachments CmdClearAttachments; 145 PFN_vkCmdResolveImage CmdResolveImage; 146 PFN_vkCmdSetEvent CmdSetEvent; 147 PFN_vkCmdResetEvent CmdResetEvent; 148 PFN_vkCmdWaitEvents CmdWaitEvents; 149 PFN_vkCmdPipelineBarrier CmdPipelineBarrier; 150 PFN_vkCmdBeginQuery CmdBeginQuery; 151 PFN_vkCmdEndQuery CmdEndQuery; 152 PFN_vkCmdResetQueryPool CmdResetQueryPool; 153 PFN_vkCmdWriteTimestamp CmdWriteTimestamp; 154 PFN_vkCmdCopyQueryPoolResults CmdCopyQueryPoolResults; 155 PFN_vkCmdPushConstants CmdPushConstants; 156 PFN_vkCmdBeginRenderPass CmdBeginRenderPass; 157 PFN_vkCmdNextSubpass CmdNextSubpass; 158 PFN_vkCmdEndRenderPass CmdEndRenderPass; 159 PFN_vkCmdExecuteCommands CmdExecuteCommands; 160 PFN_vkCreateSwapchainKHR CreateSwapchainKHR; 161 PFN_vkDestroySwapchainKHR DestroySwapchainKHR; 162 PFN_vkGetSwapchainImagesKHR GetSwapchainImagesKHR; 163 PFN_vkAcquireNextImageKHR AcquireNextImageKHR; 164 PFN_vkQueuePresentKHR QueuePresentKHR; 165 PFN_vkCmdDrawIndirectCountAMD CmdDrawIndirectCountAMD; 166 PFN_vkCmdDrawIndexedIndirectCountAMD CmdDrawIndexedIndirectCountAMD; 167 #ifdef VK_USE_PLATFORM_WIN32_KHR 168 PFN_vkGetMemoryWin32HandleNV GetMemoryWin32HandleNV; 169 #endif 170 PFN_vkCreateSharedSwapchainsKHR CreateSharedSwapchainsKHR; 171 PFN_vkDebugMarkerSetObjectTagEXT DebugMarkerSetObjectTagEXT; 172 PFN_vkDebugMarkerSetObjectNameEXT DebugMarkerSetObjectNameEXT; 173 PFN_vkCmdDebugMarkerBeginEXT CmdDebugMarkerBeginEXT; 174 PFN_vkCmdDebugMarkerEndEXT CmdDebugMarkerEndEXT; 175 PFN_vkCmdDebugMarkerInsertEXT CmdDebugMarkerInsertEXT; 176 } VkLayerDispatchTable; 177 178 typedef struct VkLayerInstanceDispatchTable_ { 179 PFN_vkGetInstanceProcAddr GetInstanceProcAddr; 180 PFN_vkDestroyInstance DestroyInstance; 181 PFN_vkEnumeratePhysicalDevices EnumeratePhysicalDevices; 182 PFN_vkGetPhysicalDeviceFeatures GetPhysicalDeviceFeatures; 183 PFN_vkGetPhysicalDeviceImageFormatProperties 184 GetPhysicalDeviceImageFormatProperties; 185 PFN_vkGetPhysicalDeviceFormatProperties GetPhysicalDeviceFormatProperties; 186 PFN_vkGetPhysicalDeviceSparseImageFormatProperties 187 GetPhysicalDeviceSparseImageFormatProperties; 188 PFN_vkGetPhysicalDeviceProperties GetPhysicalDeviceProperties; 189 PFN_vkGetPhysicalDeviceQueueFamilyProperties 190 GetPhysicalDeviceQueueFamilyProperties; 191 PFN_vkGetPhysicalDeviceMemoryProperties GetPhysicalDeviceMemoryProperties; 192 PFN_vkEnumerateDeviceExtensionProperties EnumerateDeviceExtensionProperties; 193 PFN_vkEnumerateDeviceLayerProperties EnumerateDeviceLayerProperties; 194 PFN_vkDestroySurfaceKHR DestroySurfaceKHR; 195 PFN_vkGetPhysicalDeviceSurfaceSupportKHR GetPhysicalDeviceSurfaceSupportKHR; 196 PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR 197 GetPhysicalDeviceSurfaceCapabilitiesKHR; 198 PFN_vkGetPhysicalDeviceSurfaceFormatsKHR GetPhysicalDeviceSurfaceFormatsKHR; 199 PFN_vkGetPhysicalDeviceSurfacePresentModesKHR 200 GetPhysicalDeviceSurfacePresentModesKHR; 201 PFN_vkCreateDebugReportCallbackEXT CreateDebugReportCallbackEXT; 202 PFN_vkDestroyDebugReportCallbackEXT DestroyDebugReportCallbackEXT; 203 PFN_vkDebugReportMessageEXT DebugReportMessageEXT; 204 #ifdef VK_USE_PLATFORM_MIR_KHR 205 PFN_vkCreateMirSurfaceKHR CreateMirSurfaceKHR; 206 PFN_vkGetPhysicalDeviceMirPresentationSupportKHR 207 GetPhysicalDeviceMirPresentationSupportKHR; 208 #endif 209 #ifdef VK_USE_PLATFORM_WAYLAND_KHR 210 PFN_vkCreateWaylandSurfaceKHR CreateWaylandSurfaceKHR; 211 PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR 212 GetPhysicalDeviceWaylandPresentationSupportKHR; 213 #endif 214 #ifdef VK_USE_PLATFORM_WIN32_KHR 215 PFN_vkCreateWin32SurfaceKHR CreateWin32SurfaceKHR; 216 PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR 217 GetPhysicalDeviceWin32PresentationSupportKHR; 218 #endif 219 #ifdef VK_USE_PLATFORM_XCB_KHR 220 PFN_vkCreateXcbSurfaceKHR CreateXcbSurfaceKHR; 221 PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR 222 GetPhysicalDeviceXcbPresentationSupportKHR; 223 #endif 224 #ifdef VK_USE_PLATFORM_XLIB_KHR 225 PFN_vkCreateXlibSurfaceKHR CreateXlibSurfaceKHR; 226 PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR 227 GetPhysicalDeviceXlibPresentationSupportKHR; 228 #endif 229 #ifdef VK_USE_PLATFORM_ANDROID_KHR 230 PFN_vkCreateAndroidSurfaceKHR CreateAndroidSurfaceKHR; 231 #endif 232 PFN_vkGetPhysicalDeviceDisplayPropertiesKHR 233 GetPhysicalDeviceDisplayPropertiesKHR; 234 PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR 235 GetPhysicalDeviceDisplayPlanePropertiesKHR; 236 PFN_vkGetDisplayPlaneSupportedDisplaysKHR 237 GetDisplayPlaneSupportedDisplaysKHR; 238 PFN_vkGetDisplayModePropertiesKHR 239 GetDisplayModePropertiesKHR; 240 PFN_vkCreateDisplayModeKHR 241 CreateDisplayModeKHR; 242 PFN_vkGetDisplayPlaneCapabilitiesKHR 243 GetDisplayPlaneCapabilitiesKHR; 244 PFN_vkCreateDisplayPlaneSurfaceKHR 245 CreateDisplayPlaneSurfaceKHR; 246 PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV 247 GetPhysicalDeviceExternalImageFormatPropertiesNV; 248 } VkLayerInstanceDispatchTable; 249 250 // ------------------------------------------------------------------------------------------------ 251 // CreateInstance and CreateDevice support structures 252 253 /* Sub type of structure for instance and device loader ext of CreateInfo. 254 * When sType == VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO 255 * or sType == VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO 256 * then VkLayerFunction indicates struct type pointed to by pNext 257 */ 258 typedef enum VkLayerFunction_ { 259 VK_LAYER_LINK_INFO = 0, 260 VK_LOADER_DATA_CALLBACK = 1 261 } VkLayerFunction; 262 263 typedef struct VkLayerInstanceLink_ { 264 struct VkLayerInstanceLink_ *pNext; 265 PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr; 266 } VkLayerInstanceLink; 267 268 /* 269 * When creating the device chain the loader needs to pass 270 * down information about it's device structure needed at 271 * the end of the chain. Passing the data via the 272 * VkLayerDeviceInfo avoids issues with finding the 273 * exact instance being used. 274 */ 275 typedef struct VkLayerDeviceInfo_ { 276 void *device_info; 277 PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr; 278 } VkLayerDeviceInfo; 279 280 typedef VkResult (VKAPI_PTR *PFN_vkSetInstanceLoaderData)(VkInstance instance, 281 void *object); 282 typedef VkResult (VKAPI_PTR *PFN_vkSetDeviceLoaderData)(VkDevice device, 283 void *object); 284 285 typedef struct { 286 VkStructureType sType; // VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO 287 const void *pNext; 288 VkLayerFunction function; 289 union { 290 VkLayerInstanceLink *pLayerInfo; 291 PFN_vkSetInstanceLoaderData pfnSetInstanceLoaderData; 292 } u; 293 } VkLayerInstanceCreateInfo; 294 295 typedef struct VkLayerDeviceLink_ { 296 struct VkLayerDeviceLink_ *pNext; 297 PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr; 298 PFN_vkGetDeviceProcAddr pfnNextGetDeviceProcAddr; 299 } VkLayerDeviceLink; 300 301 typedef struct { 302 VkStructureType sType; // VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO 303 const void *pNext; 304 VkLayerFunction function; 305 union { 306 VkLayerDeviceLink *pLayerInfo; 307 PFN_vkSetDeviceLoaderData pfnSetDeviceLoaderData; 308 } u; 309 } VkLayerDeviceCreateInfo; 310 311