vk_layer.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  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. * Permission is hereby granted, free of charge, to any person obtaining a copy
  10. * of this software and/or associated documentation files (the "Materials"), to
  11. * deal in the Materials without restriction, including without limitation the
  12. * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  13. * sell copies of the Materials, and to permit persons to whom the Materials are
  14. * furnished to do so, subject to the following conditions:
  15. *
  16. * The above copyright notice(s) and this permission notice shall be included in
  17. * all copies or substantial portions of the Materials.
  18. *
  19. * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  20. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  21. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  22. *
  23. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  24. * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  25. * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE
  26. * USE OR OTHER DEALINGS IN THE MATERIALS.
  27. *
  28. */
  29. /* Need to define dispatch table
  30. * Core struct can then have ptr to dispatch table at the top
  31. * Along with object ptrs for current and next OBJ
  32. */
  33. #pragma once
  34. #include "vulkan.h"
  35. #if defined(__GNUC__) && __GNUC__ >= 4
  36. #define VK_LAYER_EXPORT __attribute__((visibility("default")))
  37. #elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
  38. #define VK_LAYER_EXPORT __attribute__((visibility("default")))
  39. #else
  40. #define VK_LAYER_EXPORT
  41. #endif
  42. typedef struct VkLayerDispatchTable_ {
  43. PFN_vkGetDeviceProcAddr GetDeviceProcAddr;
  44. PFN_vkDestroyDevice DestroyDevice;
  45. PFN_vkGetDeviceQueue GetDeviceQueue;
  46. PFN_vkQueueSubmit QueueSubmit;
  47. PFN_vkQueueWaitIdle QueueWaitIdle;
  48. PFN_vkDeviceWaitIdle DeviceWaitIdle;
  49. PFN_vkAllocateMemory AllocateMemory;
  50. PFN_vkFreeMemory FreeMemory;
  51. PFN_vkMapMemory MapMemory;
  52. PFN_vkUnmapMemory UnmapMemory;
  53. PFN_vkFlushMappedMemoryRanges FlushMappedMemoryRanges;
  54. PFN_vkInvalidateMappedMemoryRanges InvalidateMappedMemoryRanges;
  55. PFN_vkGetDeviceMemoryCommitment GetDeviceMemoryCommitment;
  56. PFN_vkGetImageSparseMemoryRequirements GetImageSparseMemoryRequirements;
  57. PFN_vkGetImageMemoryRequirements GetImageMemoryRequirements;
  58. PFN_vkGetBufferMemoryRequirements GetBufferMemoryRequirements;
  59. PFN_vkBindImageMemory BindImageMemory;
  60. PFN_vkBindBufferMemory BindBufferMemory;
  61. PFN_vkQueueBindSparse QueueBindSparse;
  62. PFN_vkCreateFence CreateFence;
  63. PFN_vkDestroyFence DestroyFence;
  64. PFN_vkGetFenceStatus GetFenceStatus;
  65. PFN_vkResetFences ResetFences;
  66. PFN_vkWaitForFences WaitForFences;
  67. PFN_vkCreateSemaphore CreateSemaphore;
  68. PFN_vkDestroySemaphore DestroySemaphore;
  69. PFN_vkCreateEvent CreateEvent;
  70. PFN_vkDestroyEvent DestroyEvent;
  71. PFN_vkGetEventStatus GetEventStatus;
  72. PFN_vkSetEvent SetEvent;
  73. PFN_vkResetEvent ResetEvent;
  74. PFN_vkCreateQueryPool CreateQueryPool;
  75. PFN_vkDestroyQueryPool DestroyQueryPool;
  76. PFN_vkGetQueryPoolResults GetQueryPoolResults;
  77. PFN_vkCreateBuffer CreateBuffer;
  78. PFN_vkDestroyBuffer DestroyBuffer;
  79. PFN_vkCreateBufferView CreateBufferView;
  80. PFN_vkDestroyBufferView DestroyBufferView;
  81. PFN_vkCreateImage CreateImage;
  82. PFN_vkDestroyImage DestroyImage;
  83. PFN_vkGetImageSubresourceLayout GetImageSubresourceLayout;
  84. PFN_vkCreateImageView CreateImageView;
  85. PFN_vkDestroyImageView DestroyImageView;
  86. PFN_vkCreateShaderModule CreateShaderModule;
  87. PFN_vkDestroyShaderModule DestroyShaderModule;
  88. PFN_vkCreatePipelineCache CreatePipelineCache;
  89. PFN_vkDestroyPipelineCache DestroyPipelineCache;
  90. PFN_vkGetPipelineCacheData GetPipelineCacheData;
  91. PFN_vkMergePipelineCaches MergePipelineCaches;
  92. PFN_vkCreateGraphicsPipelines CreateGraphicsPipelines;
  93. PFN_vkCreateComputePipelines CreateComputePipelines;
  94. PFN_vkDestroyPipeline DestroyPipeline;
  95. PFN_vkCreatePipelineLayout CreatePipelineLayout;
  96. PFN_vkDestroyPipelineLayout DestroyPipelineLayout;
  97. PFN_vkCreateSampler CreateSampler;
  98. PFN_vkDestroySampler DestroySampler;
  99. PFN_vkCreateDescriptorSetLayout CreateDescriptorSetLayout;
  100. PFN_vkDestroyDescriptorSetLayout DestroyDescriptorSetLayout;
  101. PFN_vkCreateDescriptorPool CreateDescriptorPool;
  102. PFN_vkDestroyDescriptorPool DestroyDescriptorPool;
  103. PFN_vkResetDescriptorPool ResetDescriptorPool;
  104. PFN_vkAllocateDescriptorSets AllocateDescriptorSets;
  105. PFN_vkFreeDescriptorSets FreeDescriptorSets;
  106. PFN_vkUpdateDescriptorSets UpdateDescriptorSets;
  107. PFN_vkCreateFramebuffer CreateFramebuffer;
  108. PFN_vkDestroyFramebuffer DestroyFramebuffer;
  109. PFN_vkCreateRenderPass CreateRenderPass;
  110. PFN_vkDestroyRenderPass DestroyRenderPass;
  111. PFN_vkGetRenderAreaGranularity GetRenderAreaGranularity;
  112. PFN_vkCreateCommandPool CreateCommandPool;
  113. PFN_vkDestroyCommandPool DestroyCommandPool;
  114. PFN_vkResetCommandPool ResetCommandPool;
  115. PFN_vkAllocateCommandBuffers AllocateCommandBuffers;
  116. PFN_vkFreeCommandBuffers FreeCommandBuffers;
  117. PFN_vkBeginCommandBuffer BeginCommandBuffer;
  118. PFN_vkEndCommandBuffer EndCommandBuffer;
  119. PFN_vkResetCommandBuffer ResetCommandBuffer;
  120. PFN_vkCmdBindPipeline CmdBindPipeline;
  121. PFN_vkCmdBindDescriptorSets CmdBindDescriptorSets;
  122. PFN_vkCmdBindVertexBuffers CmdBindVertexBuffers;
  123. PFN_vkCmdBindIndexBuffer CmdBindIndexBuffer;
  124. PFN_vkCmdSetViewport CmdSetViewport;
  125. PFN_vkCmdSetScissor CmdSetScissor;
  126. PFN_vkCmdSetLineWidth CmdSetLineWidth;
  127. PFN_vkCmdSetDepthBias CmdSetDepthBias;
  128. PFN_vkCmdSetBlendConstants CmdSetBlendConstants;
  129. PFN_vkCmdSetDepthBounds CmdSetDepthBounds;
  130. PFN_vkCmdSetStencilCompareMask CmdSetStencilCompareMask;
  131. PFN_vkCmdSetStencilWriteMask CmdSetStencilWriteMask;
  132. PFN_vkCmdSetStencilReference CmdSetStencilReference;
  133. PFN_vkCmdDraw CmdDraw;
  134. PFN_vkCmdDrawIndexed CmdDrawIndexed;
  135. PFN_vkCmdDrawIndirect CmdDrawIndirect;
  136. PFN_vkCmdDrawIndexedIndirect CmdDrawIndexedIndirect;
  137. PFN_vkCmdDispatch CmdDispatch;
  138. PFN_vkCmdDispatchIndirect CmdDispatchIndirect;
  139. PFN_vkCmdCopyBuffer CmdCopyBuffer;
  140. PFN_vkCmdCopyImage CmdCopyImage;
  141. PFN_vkCmdBlitImage CmdBlitImage;
  142. PFN_vkCmdCopyBufferToImage CmdCopyBufferToImage;
  143. PFN_vkCmdCopyImageToBuffer CmdCopyImageToBuffer;
  144. PFN_vkCmdUpdateBuffer CmdUpdateBuffer;
  145. PFN_vkCmdFillBuffer CmdFillBuffer;
  146. PFN_vkCmdClearColorImage CmdClearColorImage;
  147. PFN_vkCmdClearDepthStencilImage CmdClearDepthStencilImage;
  148. PFN_vkCmdClearAttachments CmdClearAttachments;
  149. PFN_vkCmdResolveImage CmdResolveImage;
  150. PFN_vkCmdSetEvent CmdSetEvent;
  151. PFN_vkCmdResetEvent CmdResetEvent;
  152. PFN_vkCmdWaitEvents CmdWaitEvents;
  153. PFN_vkCmdPipelineBarrier CmdPipelineBarrier;
  154. PFN_vkCmdBeginQuery CmdBeginQuery;
  155. PFN_vkCmdEndQuery CmdEndQuery;
  156. PFN_vkCmdResetQueryPool CmdResetQueryPool;
  157. PFN_vkCmdWriteTimestamp CmdWriteTimestamp;
  158. PFN_vkCmdCopyQueryPoolResults CmdCopyQueryPoolResults;
  159. PFN_vkCmdPushConstants CmdPushConstants;
  160. PFN_vkCmdBeginRenderPass CmdBeginRenderPass;
  161. PFN_vkCmdNextSubpass CmdNextSubpass;
  162. PFN_vkCmdEndRenderPass CmdEndRenderPass;
  163. PFN_vkCmdExecuteCommands CmdExecuteCommands;
  164. PFN_vkCreateSwapchainKHR CreateSwapchainKHR;
  165. PFN_vkDestroySwapchainKHR DestroySwapchainKHR;
  166. PFN_vkGetSwapchainImagesKHR GetSwapchainImagesKHR;
  167. PFN_vkAcquireNextImageKHR AcquireNextImageKHR;
  168. PFN_vkQueuePresentKHR QueuePresentKHR;
  169. } VkLayerDispatchTable;
  170. typedef struct VkLayerInstanceDispatchTable_ {
  171. PFN_vkGetInstanceProcAddr GetInstanceProcAddr;
  172. PFN_vkDestroyInstance DestroyInstance;
  173. PFN_vkEnumeratePhysicalDevices EnumeratePhysicalDevices;
  174. PFN_vkGetPhysicalDeviceFeatures GetPhysicalDeviceFeatures;
  175. PFN_vkGetPhysicalDeviceImageFormatProperties
  176. GetPhysicalDeviceImageFormatProperties;
  177. PFN_vkGetPhysicalDeviceFormatProperties GetPhysicalDeviceFormatProperties;
  178. PFN_vkGetPhysicalDeviceSparseImageFormatProperties
  179. GetPhysicalDeviceSparseImageFormatProperties;
  180. PFN_vkGetPhysicalDeviceProperties GetPhysicalDeviceProperties;
  181. PFN_vkGetPhysicalDeviceQueueFamilyProperties
  182. GetPhysicalDeviceQueueFamilyProperties;
  183. PFN_vkGetPhysicalDeviceMemoryProperties GetPhysicalDeviceMemoryProperties;
  184. PFN_vkEnumerateDeviceExtensionProperties EnumerateDeviceExtensionProperties;
  185. PFN_vkEnumerateDeviceLayerProperties EnumerateDeviceLayerProperties;
  186. PFN_vkDestroySurfaceKHR DestroySurfaceKHR;
  187. PFN_vkGetPhysicalDeviceSurfaceSupportKHR GetPhysicalDeviceSurfaceSupportKHR;
  188. PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR
  189. GetPhysicalDeviceSurfaceCapabilitiesKHR;
  190. PFN_vkGetPhysicalDeviceSurfaceFormatsKHR GetPhysicalDeviceSurfaceFormatsKHR;
  191. PFN_vkGetPhysicalDeviceSurfacePresentModesKHR
  192. GetPhysicalDeviceSurfacePresentModesKHR;
  193. PFN_vkCreateDebugReportCallbackEXT CreateDebugReportCallbackEXT;
  194. PFN_vkDestroyDebugReportCallbackEXT DestroyDebugReportCallbackEXT;
  195. PFN_vkDebugReportMessageEXT DebugReportMessageEXT;
  196. #ifdef VK_USE_PLATFORM_MIR_KHR
  197. PFN_vkCreateMirSurfaceKHR CreateMirSurfaceKHR;
  198. PFN_vkGetPhysicalDeviceMirPresentationSupportKHR
  199. GetPhysicalDeviceMirPresentationSupportKHR;
  200. #endif
  201. #ifdef VK_USE_PLATFORM_WAYLAND_KHR
  202. PFN_vkCreateWaylandSurfaceKHR CreateWaylandSurfaceKHR;
  203. PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR
  204. GetPhysicalDeviceWaylandPresentationSupportKHR;
  205. #endif
  206. #ifdef VK_USE_PLATFORM_WIN32_KHR
  207. PFN_vkCreateWin32SurfaceKHR CreateWin32SurfaceKHR;
  208. PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR
  209. GetPhysicalDeviceWin32PresentationSupportKHR;
  210. #endif
  211. #ifdef VK_USE_PLATFORM_XCB_KHR
  212. PFN_vkCreateXcbSurfaceKHR CreateXcbSurfaceKHR;
  213. PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR
  214. GetPhysicalDeviceXcbPresentationSupportKHR;
  215. #endif
  216. #ifdef VK_USE_PLATFORM_XLIB_KHR
  217. PFN_vkCreateXlibSurfaceKHR CreateXlibSurfaceKHR;
  218. PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR
  219. GetPhysicalDeviceXlibPresentationSupportKHR;
  220. #endif
  221. #ifdef VK_USE_PLATFORM_ANDROID_KHR
  222. PFN_vkCreateAndroidSurfaceKHR CreateAndroidSurfaceKHR;
  223. #endif
  224. PFN_vkGetPhysicalDeviceDisplayPropertiesKHR
  225. GetPhysicalDeviceDisplayPropertiesKHR;
  226. PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR
  227. GetPhysicalDeviceDisplayPlanePropertiesKHR;
  228. PFN_vkGetDisplayPlaneSupportedDisplaysKHR
  229. GetDisplayPlaneSupportedDisplaysKHR;
  230. PFN_vkGetDisplayModePropertiesKHR
  231. GetDisplayModePropertiesKHR;
  232. PFN_vkCreateDisplayModeKHR
  233. CreateDisplayModeKHR;
  234. PFN_vkGetDisplayPlaneCapabilitiesKHR
  235. GetDisplayPlaneCapabilitiesKHR;
  236. PFN_vkCreateDisplayPlaneSurfaceKHR
  237. CreateDisplayPlaneSurfaceKHR;
  238. } VkLayerInstanceDispatchTable;
  239. // LL node for tree of dbg callback functions
  240. typedef struct VkLayerDbgFunctionNode_ {
  241. VkDebugReportCallbackEXT msgCallback;
  242. PFN_vkDebugReportCallbackEXT pfnMsgCallback;
  243. VkFlags msgFlags;
  244. void *pUserData;
  245. struct VkLayerDbgFunctionNode_ *pNext;
  246. } VkLayerDbgFunctionNode;
  247. typedef enum VkLayerDbgAction_ {
  248. VK_DBG_LAYER_ACTION_IGNORE = 0x0,
  249. VK_DBG_LAYER_ACTION_CALLBACK = 0x1,
  250. VK_DBG_LAYER_ACTION_LOG_MSG = 0x2,
  251. VK_DBG_LAYER_ACTION_BREAK = 0x4,
  252. VK_DBG_LAYER_ACTION_DEBUG_OUTPUT = 0x8,
  253. } VkLayerDbgAction;
  254. // ------------------------------------------------------------------------------------------------
  255. // CreateInstance and CreateDevice support structures
  256. typedef enum VkLayerFunction_ {
  257. VK_LAYER_LINK_INFO = 0,
  258. VK_LAYER_DEVICE_INFO = 1,
  259. VK_LAYER_INSTANCE_INFO = 2
  260. } VkLayerFunction;
  261. /*
  262. * When creating the device chain the loader needs to pass
  263. * down information about it's device structure needed at
  264. * the end of the chain. Passing the data via the
  265. * VkLayerInstanceInfo avoids issues with finding the
  266. * exact instance being used.
  267. */
  268. typedef struct VkLayerInstanceInfo_ {
  269. void *instance_info;
  270. PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr;
  271. } VkLayerInstanceInfo;
  272. typedef struct VkLayerInstanceLink_ {
  273. struct VkLayerInstanceLink_ *pNext;
  274. PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr;
  275. } VkLayerInstanceLink;
  276. /*
  277. * When creating the device chain the loader needs to pass
  278. * down information about it's device structure needed at
  279. * the end of the chain. Passing the data via the
  280. * VkLayerDeviceInfo avoids issues with finding the
  281. * exact instance being used.
  282. */
  283. typedef struct VkLayerDeviceInfo_ {
  284. void *device_info;
  285. PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr;
  286. } VkLayerDeviceInfo;
  287. typedef struct {
  288. VkStructureType sType; // VK_STRUCTURE_TYPE_LAYER_INSTANCE_CREATE_INFO
  289. const void *pNext;
  290. VkLayerFunction function;
  291. union {
  292. VkLayerInstanceLink *pLayerInfo;
  293. VkLayerInstanceInfo instanceInfo;
  294. } u;
  295. } VkLayerInstanceCreateInfo;
  296. typedef struct VkLayerDeviceLink_ {
  297. struct VkLayerDeviceLink_ *pNext;
  298. PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr;
  299. PFN_vkGetDeviceProcAddr pfnNextGetDeviceProcAddr;
  300. } VkLayerDeviceLink;
  301. typedef struct {
  302. VkStructureType sType; // VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO
  303. const void *pNext;
  304. VkLayerFunction function;
  305. union {
  306. VkLayerDeviceLink *pLayerInfo;
  307. VkLayerDeviceInfo deviceInfo;
  308. } u;
  309. } VkLayerDeviceCreateInfo;
  310. // ------------------------------------------------------------------------------------------------
  311. // API functions