vulkan_function_pointers.h 53 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225
  1. // Copyright 2018 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. //
  5. // This file is auto-generated from
  6. // gpu/vulkan/generate_bindings.py
  7. // It's formatted by clang-format using chromium coding style:
  8. // clang-format -i -style=chromium filename
  9. // DO NOT EDIT!
  10. #ifndef GPU_VULKAN_VULKAN_FUNCTION_POINTERS_H_
  11. #define GPU_VULKAN_VULKAN_FUNCTION_POINTERS_H_
  12. #include <vulkan/vulkan.h>
  13. #include <memory>
  14. #include "base/compiler_specific.h"
  15. #include "base/component_export.h"
  16. #include "base/containers/flat_map.h"
  17. #include "base/native_library.h"
  18. #include "base/synchronization/lock.h"
  19. #include "build/build_config.h"
  20. #include "ui/gfx/extension_set.h"
  21. #if BUILDFLAG(IS_ANDROID)
  22. #include <vulkan/vulkan_android.h>
  23. #endif
  24. #if BUILDFLAG(IS_FUCHSIA)
  25. #include <zircon/types.h>
  26. // <vulkan/vulkan_fuchsia.h> must be included after <zircon/types.h>
  27. #include <vulkan/vulkan_fuchsia.h>
  28. #include "gpu/vulkan/fuchsia/vulkan_fuchsia_ext.h"
  29. #endif
  30. #if defined(USE_VULKAN_XCB)
  31. #include <xcb/xcb.h>
  32. // <vulkan/vulkan_xcb.h> must be included after <xcb/xcb.h>
  33. #include <vulkan/vulkan_xcb.h>
  34. #endif
  35. #if BUILDFLAG(IS_WIN)
  36. #include <vulkan/vulkan_win32.h>
  37. #endif
  38. namespace gpu {
  39. struct VulkanFunctionPointers;
  40. constexpr uint32_t kVulkanRequiredApiVersion = VK_API_VERSION_1_1;
  41. COMPONENT_EXPORT(VULKAN) VulkanFunctionPointers* GetVulkanFunctionPointers();
  42. struct COMPONENT_EXPORT(VULKAN) VulkanFunctionPointers {
  43. VulkanFunctionPointers();
  44. ~VulkanFunctionPointers();
  45. bool BindUnassociatedFunctionPointersFromLoaderLib(base::NativeLibrary lib);
  46. bool BindUnassociatedFunctionPointersFromGetProcAddr(
  47. PFN_vkGetInstanceProcAddr proc);
  48. // These functions assume that vkGetInstanceProcAddr has been populated.
  49. bool BindInstanceFunctionPointers(
  50. VkInstance vk_instance,
  51. uint32_t api_version,
  52. const gfx::ExtensionSet& enabled_extensions);
  53. // These functions assume that vkGetDeviceProcAddr has been populated.
  54. bool BindDeviceFunctionPointers(VkDevice vk_device,
  55. uint32_t api_version,
  56. const gfx::ExtensionSet& enabled_extensions);
  57. // This is used to allow thread safe access to a given vulkan queue when
  58. // multiple gpu threads are accessing it. Note that this map will be only
  59. // accessed by multiple gpu threads concurrently to read the data, so it
  60. // should be thread safe to use this map by multiple threads.
  61. base::flat_map<VkQueue, std::unique_ptr<base::Lock>> per_queue_lock_map;
  62. template <typename T>
  63. class VulkanFunction;
  64. template <typename R, typename... Args>
  65. class VulkanFunction<R(VKAPI_PTR*)(Args...)> {
  66. public:
  67. using Fn = R(VKAPI_PTR*)(Args...);
  68. explicit operator bool() const { return !!fn_; }
  69. NO_SANITIZE("cfi-icall")
  70. R operator()(Args... args) const { return fn_(args...); }
  71. Fn get() const { return fn_; }
  72. private:
  73. friend VulkanFunctionPointers;
  74. Fn operator=(Fn fn) {
  75. fn_ = fn;
  76. return fn_;
  77. }
  78. Fn fn_ = nullptr;
  79. };
  80. // Unassociated functions
  81. VulkanFunction<PFN_vkGetInstanceProcAddr> vkGetInstanceProcAddr;
  82. VulkanFunction<PFN_vkEnumerateInstanceVersion> vkEnumerateInstanceVersion;
  83. VulkanFunction<PFN_vkCreateInstance> vkCreateInstance;
  84. VulkanFunction<PFN_vkEnumerateInstanceExtensionProperties>
  85. vkEnumerateInstanceExtensionProperties;
  86. VulkanFunction<PFN_vkEnumerateInstanceLayerProperties>
  87. vkEnumerateInstanceLayerProperties;
  88. // Instance functions
  89. VulkanFunction<PFN_vkCreateDevice> vkCreateDevice;
  90. VulkanFunction<PFN_vkDestroyInstance> vkDestroyInstance;
  91. VulkanFunction<PFN_vkEnumerateDeviceExtensionProperties>
  92. vkEnumerateDeviceExtensionProperties;
  93. VulkanFunction<PFN_vkEnumerateDeviceLayerProperties>
  94. vkEnumerateDeviceLayerProperties;
  95. VulkanFunction<PFN_vkEnumeratePhysicalDevices> vkEnumeratePhysicalDevices;
  96. VulkanFunction<PFN_vkGetDeviceProcAddr> vkGetDeviceProcAddr;
  97. VulkanFunction<PFN_vkGetPhysicalDeviceFeatures2> vkGetPhysicalDeviceFeatures2;
  98. VulkanFunction<PFN_vkGetPhysicalDeviceFormatProperties>
  99. vkGetPhysicalDeviceFormatProperties;
  100. VulkanFunction<PFN_vkGetPhysicalDeviceFormatProperties2>
  101. vkGetPhysicalDeviceFormatProperties2;
  102. VulkanFunction<PFN_vkGetPhysicalDeviceImageFormatProperties2>
  103. vkGetPhysicalDeviceImageFormatProperties2;
  104. VulkanFunction<PFN_vkGetPhysicalDeviceMemoryProperties>
  105. vkGetPhysicalDeviceMemoryProperties;
  106. VulkanFunction<PFN_vkGetPhysicalDeviceMemoryProperties2>
  107. vkGetPhysicalDeviceMemoryProperties2;
  108. VulkanFunction<PFN_vkGetPhysicalDeviceProperties>
  109. vkGetPhysicalDeviceProperties;
  110. VulkanFunction<PFN_vkGetPhysicalDeviceProperties2>
  111. vkGetPhysicalDeviceProperties2;
  112. VulkanFunction<PFN_vkGetPhysicalDeviceQueueFamilyProperties>
  113. vkGetPhysicalDeviceQueueFamilyProperties;
  114. #if DCHECK_IS_ON()
  115. VulkanFunction<PFN_vkCreateDebugReportCallbackEXT>
  116. vkCreateDebugReportCallbackEXT;
  117. VulkanFunction<PFN_vkDestroyDebugReportCallbackEXT>
  118. vkDestroyDebugReportCallbackEXT;
  119. #endif // DCHECK_IS_ON()
  120. VulkanFunction<PFN_vkDestroySurfaceKHR> vkDestroySurfaceKHR;
  121. VulkanFunction<PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR>
  122. vkGetPhysicalDeviceSurfaceCapabilitiesKHR;
  123. VulkanFunction<PFN_vkGetPhysicalDeviceSurfaceFormatsKHR>
  124. vkGetPhysicalDeviceSurfaceFormatsKHR;
  125. VulkanFunction<PFN_vkGetPhysicalDeviceSurfaceSupportKHR>
  126. vkGetPhysicalDeviceSurfaceSupportKHR;
  127. VulkanFunction<PFN_vkCreateHeadlessSurfaceEXT> vkCreateHeadlessSurfaceEXT;
  128. #if defined(USE_VULKAN_XCB)
  129. VulkanFunction<PFN_vkCreateXcbSurfaceKHR> vkCreateXcbSurfaceKHR;
  130. VulkanFunction<PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR>
  131. vkGetPhysicalDeviceXcbPresentationSupportKHR;
  132. #endif // defined(USE_VULKAN_XCB)
  133. #if BUILDFLAG(IS_WIN)
  134. VulkanFunction<PFN_vkCreateWin32SurfaceKHR> vkCreateWin32SurfaceKHR;
  135. VulkanFunction<PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR>
  136. vkGetPhysicalDeviceWin32PresentationSupportKHR;
  137. #endif // BUILDFLAG(IS_WIN)
  138. #if BUILDFLAG(IS_ANDROID)
  139. VulkanFunction<PFN_vkCreateAndroidSurfaceKHR> vkCreateAndroidSurfaceKHR;
  140. #endif // BUILDFLAG(IS_ANDROID)
  141. #if BUILDFLAG(IS_FUCHSIA)
  142. VulkanFunction<PFN_vkCreateImagePipeSurfaceFUCHSIA>
  143. vkCreateImagePipeSurfaceFUCHSIA;
  144. #endif // BUILDFLAG(IS_FUCHSIA)
  145. // Device functions
  146. VulkanFunction<PFN_vkAllocateCommandBuffers> vkAllocateCommandBuffers;
  147. VulkanFunction<PFN_vkAllocateDescriptorSets> vkAllocateDescriptorSets;
  148. VulkanFunction<PFN_vkAllocateMemory> vkAllocateMemory;
  149. VulkanFunction<PFN_vkBeginCommandBuffer> vkBeginCommandBuffer;
  150. VulkanFunction<PFN_vkBindBufferMemory> vkBindBufferMemory;
  151. VulkanFunction<PFN_vkBindBufferMemory2> vkBindBufferMemory2;
  152. VulkanFunction<PFN_vkBindImageMemory> vkBindImageMemory;
  153. VulkanFunction<PFN_vkBindImageMemory2> vkBindImageMemory2;
  154. VulkanFunction<PFN_vkCmdBeginRenderPass> vkCmdBeginRenderPass;
  155. VulkanFunction<PFN_vkCmdCopyBuffer> vkCmdCopyBuffer;
  156. VulkanFunction<PFN_vkCmdCopyBufferToImage> vkCmdCopyBufferToImage;
  157. VulkanFunction<PFN_vkCmdCopyImageToBuffer> vkCmdCopyImageToBuffer;
  158. VulkanFunction<PFN_vkCmdEndRenderPass> vkCmdEndRenderPass;
  159. VulkanFunction<PFN_vkCmdExecuteCommands> vkCmdExecuteCommands;
  160. VulkanFunction<PFN_vkCmdNextSubpass> vkCmdNextSubpass;
  161. VulkanFunction<PFN_vkCmdPipelineBarrier> vkCmdPipelineBarrier;
  162. VulkanFunction<PFN_vkCreateBuffer> vkCreateBuffer;
  163. VulkanFunction<PFN_vkCreateCommandPool> vkCreateCommandPool;
  164. VulkanFunction<PFN_vkCreateDescriptorPool> vkCreateDescriptorPool;
  165. VulkanFunction<PFN_vkCreateDescriptorSetLayout> vkCreateDescriptorSetLayout;
  166. VulkanFunction<PFN_vkCreateFence> vkCreateFence;
  167. VulkanFunction<PFN_vkCreateFramebuffer> vkCreateFramebuffer;
  168. VulkanFunction<PFN_vkCreateGraphicsPipelines> vkCreateGraphicsPipelines;
  169. VulkanFunction<PFN_vkCreateImage> vkCreateImage;
  170. VulkanFunction<PFN_vkCreateImageView> vkCreateImageView;
  171. VulkanFunction<PFN_vkCreateRenderPass> vkCreateRenderPass;
  172. VulkanFunction<PFN_vkCreateSampler> vkCreateSampler;
  173. VulkanFunction<PFN_vkCreateSemaphore> vkCreateSemaphore;
  174. VulkanFunction<PFN_vkCreateShaderModule> vkCreateShaderModule;
  175. VulkanFunction<PFN_vkDestroyBuffer> vkDestroyBuffer;
  176. VulkanFunction<PFN_vkDestroyCommandPool> vkDestroyCommandPool;
  177. VulkanFunction<PFN_vkDestroyDescriptorPool> vkDestroyDescriptorPool;
  178. VulkanFunction<PFN_vkDestroyDescriptorSetLayout> vkDestroyDescriptorSetLayout;
  179. VulkanFunction<PFN_vkDestroyDevice> vkDestroyDevice;
  180. VulkanFunction<PFN_vkDestroyFence> vkDestroyFence;
  181. VulkanFunction<PFN_vkDestroyFramebuffer> vkDestroyFramebuffer;
  182. VulkanFunction<PFN_vkDestroyImage> vkDestroyImage;
  183. VulkanFunction<PFN_vkDestroyImageView> vkDestroyImageView;
  184. VulkanFunction<PFN_vkDestroyRenderPass> vkDestroyRenderPass;
  185. VulkanFunction<PFN_vkDestroySampler> vkDestroySampler;
  186. VulkanFunction<PFN_vkDestroySemaphore> vkDestroySemaphore;
  187. VulkanFunction<PFN_vkDestroyShaderModule> vkDestroyShaderModule;
  188. VulkanFunction<PFN_vkDeviceWaitIdle> vkDeviceWaitIdle;
  189. VulkanFunction<PFN_vkFlushMappedMemoryRanges> vkFlushMappedMemoryRanges;
  190. VulkanFunction<PFN_vkEndCommandBuffer> vkEndCommandBuffer;
  191. VulkanFunction<PFN_vkFreeCommandBuffers> vkFreeCommandBuffers;
  192. VulkanFunction<PFN_vkFreeDescriptorSets> vkFreeDescriptorSets;
  193. VulkanFunction<PFN_vkFreeMemory> vkFreeMemory;
  194. VulkanFunction<PFN_vkInvalidateMappedMemoryRanges>
  195. vkInvalidateMappedMemoryRanges;
  196. VulkanFunction<PFN_vkGetBufferMemoryRequirements>
  197. vkGetBufferMemoryRequirements;
  198. VulkanFunction<PFN_vkGetBufferMemoryRequirements2>
  199. vkGetBufferMemoryRequirements2;
  200. VulkanFunction<PFN_vkGetDeviceQueue> vkGetDeviceQueue;
  201. VulkanFunction<PFN_vkGetDeviceQueue2> vkGetDeviceQueue2;
  202. VulkanFunction<PFN_vkGetFenceStatus> vkGetFenceStatus;
  203. VulkanFunction<PFN_vkGetImageMemoryRequirements> vkGetImageMemoryRequirements;
  204. VulkanFunction<PFN_vkGetImageMemoryRequirements2>
  205. vkGetImageMemoryRequirements2;
  206. VulkanFunction<PFN_vkGetImageSubresourceLayout> vkGetImageSubresourceLayout;
  207. VulkanFunction<PFN_vkMapMemory> vkMapMemory;
  208. VulkanFunction<PFN_vkQueueSubmit> vkQueueSubmit;
  209. VulkanFunction<PFN_vkQueueWaitIdle> vkQueueWaitIdle;
  210. VulkanFunction<PFN_vkResetCommandBuffer> vkResetCommandBuffer;
  211. VulkanFunction<PFN_vkResetFences> vkResetFences;
  212. VulkanFunction<PFN_vkUnmapMemory> vkUnmapMemory;
  213. VulkanFunction<PFN_vkUpdateDescriptorSets> vkUpdateDescriptorSets;
  214. VulkanFunction<PFN_vkWaitForFences> vkWaitForFences;
  215. #if BUILDFLAG(IS_ANDROID)
  216. VulkanFunction<PFN_vkGetAndroidHardwareBufferPropertiesANDROID>
  217. vkGetAndroidHardwareBufferPropertiesANDROID;
  218. #endif // BUILDFLAG(IS_ANDROID)
  219. #if BUILDFLAG(IS_POSIX)
  220. VulkanFunction<PFN_vkGetSemaphoreFdKHR> vkGetSemaphoreFdKHR;
  221. VulkanFunction<PFN_vkImportSemaphoreFdKHR> vkImportSemaphoreFdKHR;
  222. #endif // BUILDFLAG(IS_POSIX)
  223. #if BUILDFLAG(IS_WIN)
  224. VulkanFunction<PFN_vkGetSemaphoreWin32HandleKHR> vkGetSemaphoreWin32HandleKHR;
  225. VulkanFunction<PFN_vkImportSemaphoreWin32HandleKHR>
  226. vkImportSemaphoreWin32HandleKHR;
  227. #endif // BUILDFLAG(IS_WIN)
  228. #if BUILDFLAG(IS_POSIX)
  229. VulkanFunction<PFN_vkGetMemoryFdKHR> vkGetMemoryFdKHR;
  230. VulkanFunction<PFN_vkGetMemoryFdPropertiesKHR> vkGetMemoryFdPropertiesKHR;
  231. #endif // BUILDFLAG(IS_POSIX)
  232. #if BUILDFLAG(IS_WIN)
  233. VulkanFunction<PFN_vkGetMemoryWin32HandleKHR> vkGetMemoryWin32HandleKHR;
  234. VulkanFunction<PFN_vkGetMemoryWin32HandlePropertiesKHR>
  235. vkGetMemoryWin32HandlePropertiesKHR;
  236. #endif // BUILDFLAG(IS_WIN)
  237. #if BUILDFLAG(IS_FUCHSIA)
  238. VulkanFunction<PFN_vkImportSemaphoreZirconHandleFUCHSIA>
  239. vkImportSemaphoreZirconHandleFUCHSIA;
  240. VulkanFunction<PFN_vkGetSemaphoreZirconHandleFUCHSIA>
  241. vkGetSemaphoreZirconHandleFUCHSIA;
  242. #endif // BUILDFLAG(IS_FUCHSIA)
  243. #if BUILDFLAG(IS_FUCHSIA)
  244. VulkanFunction<PFN_vkGetMemoryZirconHandleFUCHSIA>
  245. vkGetMemoryZirconHandleFUCHSIA;
  246. #endif // BUILDFLAG(IS_FUCHSIA)
  247. #if BUILDFLAG(IS_FUCHSIA)
  248. VulkanFunction<PFN_vkCreateBufferCollectionFUCHSIA>
  249. vkCreateBufferCollectionFUCHSIA;
  250. VulkanFunction<PFN_vkSetBufferCollectionImageConstraintsFUCHSIA>
  251. vkSetBufferCollectionImageConstraintsFUCHSIA;
  252. VulkanFunction<PFN_vkGetBufferCollectionPropertiesFUCHSIA>
  253. vkGetBufferCollectionPropertiesFUCHSIA;
  254. VulkanFunction<PFN_vkDestroyBufferCollectionFUCHSIA>
  255. vkDestroyBufferCollectionFUCHSIA;
  256. #endif // BUILDFLAG(IS_FUCHSIA)
  257. VulkanFunction<PFN_vkAcquireNextImageKHR> vkAcquireNextImageKHR;
  258. VulkanFunction<PFN_vkCreateSwapchainKHR> vkCreateSwapchainKHR;
  259. VulkanFunction<PFN_vkDestroySwapchainKHR> vkDestroySwapchainKHR;
  260. VulkanFunction<PFN_vkGetSwapchainImagesKHR> vkGetSwapchainImagesKHR;
  261. VulkanFunction<PFN_vkQueuePresentKHR> vkQueuePresentKHR;
  262. #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
  263. VulkanFunction<PFN_vkGetImageDrmFormatModifierPropertiesEXT>
  264. vkGetImageDrmFormatModifierPropertiesEXT;
  265. #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
  266. private:
  267. bool BindUnassociatedFunctionPointersCommon();
  268. // The `Bind*` functions will acquires lock, so should not be called with
  269. // with this lock held. Code that writes to members directly should take this
  270. // lock as well.
  271. base::Lock write_lock_;
  272. base::NativeLibrary loader_library_ = nullptr;
  273. };
  274. } // namespace gpu
  275. // Unassociated functions
  276. ALWAYS_INLINE PFN_vkVoidFunction vkGetInstanceProcAddr(VkInstance instance,
  277. const char* pName) {
  278. return gpu::GetVulkanFunctionPointers()->vkGetInstanceProcAddr(instance,
  279. pName);
  280. }
  281. ALWAYS_INLINE VkResult vkEnumerateInstanceVersion(uint32_t* pApiVersion) {
  282. return gpu::GetVulkanFunctionPointers()->vkEnumerateInstanceVersion(
  283. pApiVersion);
  284. }
  285. ALWAYS_INLINE VkResult vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo,
  286. const VkAllocationCallbacks* pAllocator,
  287. VkInstance* pInstance) {
  288. return gpu::GetVulkanFunctionPointers()->vkCreateInstance(
  289. pCreateInfo, pAllocator, pInstance);
  290. }
  291. ALWAYS_INLINE VkResult
  292. vkEnumerateInstanceExtensionProperties(const char* pLayerName,
  293. uint32_t* pPropertyCount,
  294. VkExtensionProperties* pProperties) {
  295. return gpu::GetVulkanFunctionPointers()
  296. ->vkEnumerateInstanceExtensionProperties(pLayerName, pPropertyCount,
  297. pProperties);
  298. }
  299. ALWAYS_INLINE VkResult
  300. vkEnumerateInstanceLayerProperties(uint32_t* pPropertyCount,
  301. VkLayerProperties* pProperties) {
  302. return gpu::GetVulkanFunctionPointers()->vkEnumerateInstanceLayerProperties(
  303. pPropertyCount, pProperties);
  304. }
  305. // Instance functions
  306. ALWAYS_INLINE VkResult vkCreateDevice(VkPhysicalDevice physicalDevice,
  307. const VkDeviceCreateInfo* pCreateInfo,
  308. const VkAllocationCallbacks* pAllocator,
  309. VkDevice* pDevice) {
  310. return gpu::GetVulkanFunctionPointers()->vkCreateDevice(
  311. physicalDevice, pCreateInfo, pAllocator, pDevice);
  312. }
  313. ALWAYS_INLINE void vkDestroyInstance(VkInstance instance,
  314. const VkAllocationCallbacks* pAllocator) {
  315. return gpu::GetVulkanFunctionPointers()->vkDestroyInstance(instance,
  316. pAllocator);
  317. }
  318. ALWAYS_INLINE VkResult
  319. vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice,
  320. const char* pLayerName,
  321. uint32_t* pPropertyCount,
  322. VkExtensionProperties* pProperties) {
  323. return gpu::GetVulkanFunctionPointers()->vkEnumerateDeviceExtensionProperties(
  324. physicalDevice, pLayerName, pPropertyCount, pProperties);
  325. }
  326. ALWAYS_INLINE VkResult
  327. vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice,
  328. uint32_t* pPropertyCount,
  329. VkLayerProperties* pProperties) {
  330. return gpu::GetVulkanFunctionPointers()->vkEnumerateDeviceLayerProperties(
  331. physicalDevice, pPropertyCount, pProperties);
  332. }
  333. ALWAYS_INLINE VkResult
  334. vkEnumeratePhysicalDevices(VkInstance instance,
  335. uint32_t* pPhysicalDeviceCount,
  336. VkPhysicalDevice* pPhysicalDevices) {
  337. return gpu::GetVulkanFunctionPointers()->vkEnumeratePhysicalDevices(
  338. instance, pPhysicalDeviceCount, pPhysicalDevices);
  339. }
  340. ALWAYS_INLINE PFN_vkVoidFunction vkGetDeviceProcAddr(VkDevice device,
  341. const char* pName) {
  342. return gpu::GetVulkanFunctionPointers()->vkGetDeviceProcAddr(device, pName);
  343. }
  344. ALWAYS_INLINE void vkGetPhysicalDeviceFeatures2(
  345. VkPhysicalDevice physicalDevice,
  346. VkPhysicalDeviceFeatures2* pFeatures) {
  347. return gpu::GetVulkanFunctionPointers()->vkGetPhysicalDeviceFeatures2(
  348. physicalDevice, pFeatures);
  349. }
  350. ALWAYS_INLINE void vkGetPhysicalDeviceFormatProperties(
  351. VkPhysicalDevice physicalDevice,
  352. VkFormat format,
  353. VkFormatProperties* pFormatProperties) {
  354. return gpu::GetVulkanFunctionPointers()->vkGetPhysicalDeviceFormatProperties(
  355. physicalDevice, format, pFormatProperties);
  356. }
  357. ALWAYS_INLINE void vkGetPhysicalDeviceFormatProperties2(
  358. VkPhysicalDevice physicalDevice,
  359. VkFormat format,
  360. VkFormatProperties2* pFormatProperties) {
  361. return gpu::GetVulkanFunctionPointers()->vkGetPhysicalDeviceFormatProperties2(
  362. physicalDevice, format, pFormatProperties);
  363. }
  364. ALWAYS_INLINE VkResult vkGetPhysicalDeviceImageFormatProperties2(
  365. VkPhysicalDevice physicalDevice,
  366. const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
  367. VkImageFormatProperties2* pImageFormatProperties) {
  368. return gpu::GetVulkanFunctionPointers()
  369. ->vkGetPhysicalDeviceImageFormatProperties2(
  370. physicalDevice, pImageFormatInfo, pImageFormatProperties);
  371. }
  372. ALWAYS_INLINE void vkGetPhysicalDeviceMemoryProperties(
  373. VkPhysicalDevice physicalDevice,
  374. VkPhysicalDeviceMemoryProperties* pMemoryProperties) {
  375. return gpu::GetVulkanFunctionPointers()->vkGetPhysicalDeviceMemoryProperties(
  376. physicalDevice, pMemoryProperties);
  377. }
  378. ALWAYS_INLINE void vkGetPhysicalDeviceMemoryProperties2(
  379. VkPhysicalDevice physicalDevice,
  380. VkPhysicalDeviceMemoryProperties2* pMemoryProperties) {
  381. return gpu::GetVulkanFunctionPointers()->vkGetPhysicalDeviceMemoryProperties2(
  382. physicalDevice, pMemoryProperties);
  383. }
  384. ALWAYS_INLINE void vkGetPhysicalDeviceProperties(
  385. VkPhysicalDevice physicalDevice,
  386. VkPhysicalDeviceProperties* pProperties) {
  387. return gpu::GetVulkanFunctionPointers()->vkGetPhysicalDeviceProperties(
  388. physicalDevice, pProperties);
  389. }
  390. ALWAYS_INLINE void vkGetPhysicalDeviceProperties2(
  391. VkPhysicalDevice physicalDevice,
  392. VkPhysicalDeviceProperties2* pProperties) {
  393. return gpu::GetVulkanFunctionPointers()->vkGetPhysicalDeviceProperties2(
  394. physicalDevice, pProperties);
  395. }
  396. ALWAYS_INLINE void vkGetPhysicalDeviceQueueFamilyProperties(
  397. VkPhysicalDevice physicalDevice,
  398. uint32_t* pQueueFamilyPropertyCount,
  399. VkQueueFamilyProperties* pQueueFamilyProperties) {
  400. return gpu::GetVulkanFunctionPointers()
  401. ->vkGetPhysicalDeviceQueueFamilyProperties(
  402. physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
  403. }
  404. #if DCHECK_IS_ON()
  405. ALWAYS_INLINE VkResult vkCreateDebugReportCallbackEXT(
  406. VkInstance instance,
  407. const VkDebugReportCallbackCreateInfoEXT* pCreateInfo,
  408. const VkAllocationCallbacks* pAllocator,
  409. VkDebugReportCallbackEXT* pCallback) {
  410. return gpu::GetVulkanFunctionPointers()->vkCreateDebugReportCallbackEXT(
  411. instance, pCreateInfo, pAllocator, pCallback);
  412. }
  413. ALWAYS_INLINE void vkDestroyDebugReportCallbackEXT(
  414. VkInstance instance,
  415. VkDebugReportCallbackEXT callback,
  416. const VkAllocationCallbacks* pAllocator) {
  417. return gpu::GetVulkanFunctionPointers()->vkDestroyDebugReportCallbackEXT(
  418. instance, callback, pAllocator);
  419. }
  420. #endif // DCHECK_IS_ON()
  421. ALWAYS_INLINE void vkDestroySurfaceKHR(
  422. VkInstance instance,
  423. VkSurfaceKHR surface,
  424. const VkAllocationCallbacks* pAllocator) {
  425. return gpu::GetVulkanFunctionPointers()->vkDestroySurfaceKHR(
  426. instance, surface, pAllocator);
  427. }
  428. ALWAYS_INLINE VkResult vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
  429. VkPhysicalDevice physicalDevice,
  430. VkSurfaceKHR surface,
  431. VkSurfaceCapabilitiesKHR* pSurfaceCapabilities) {
  432. return gpu::GetVulkanFunctionPointers()
  433. ->vkGetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface,
  434. pSurfaceCapabilities);
  435. }
  436. ALWAYS_INLINE VkResult
  437. vkGetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice,
  438. VkSurfaceKHR surface,
  439. uint32_t* pSurfaceFormatCount,
  440. VkSurfaceFormatKHR* pSurfaceFormats) {
  441. return gpu::GetVulkanFunctionPointers()->vkGetPhysicalDeviceSurfaceFormatsKHR(
  442. physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats);
  443. }
  444. ALWAYS_INLINE VkResult
  445. vkGetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice,
  446. uint32_t queueFamilyIndex,
  447. VkSurfaceKHR surface,
  448. VkBool32* pSupported) {
  449. return gpu::GetVulkanFunctionPointers()->vkGetPhysicalDeviceSurfaceSupportKHR(
  450. physicalDevice, queueFamilyIndex, surface, pSupported);
  451. }
  452. ALWAYS_INLINE VkResult
  453. vkCreateHeadlessSurfaceEXT(VkInstance instance,
  454. const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo,
  455. const VkAllocationCallbacks* pAllocator,
  456. VkSurfaceKHR* pSurface) {
  457. return gpu::GetVulkanFunctionPointers()->vkCreateHeadlessSurfaceEXT(
  458. instance, pCreateInfo, pAllocator, pSurface);
  459. }
  460. #if defined(USE_VULKAN_XCB)
  461. ALWAYS_INLINE VkResult
  462. vkCreateXcbSurfaceKHR(VkInstance instance,
  463. const VkXcbSurfaceCreateInfoKHR* pCreateInfo,
  464. const VkAllocationCallbacks* pAllocator,
  465. VkSurfaceKHR* pSurface) {
  466. return gpu::GetVulkanFunctionPointers()->vkCreateXcbSurfaceKHR(
  467. instance, pCreateInfo, pAllocator, pSurface);
  468. }
  469. ALWAYS_INLINE VkBool32
  470. vkGetPhysicalDeviceXcbPresentationSupportKHR(VkPhysicalDevice physicalDevice,
  471. uint32_t queueFamilyIndex,
  472. xcb_connection_t* connection,
  473. xcb_visualid_t visual_id) {
  474. return gpu::GetVulkanFunctionPointers()
  475. ->vkGetPhysicalDeviceXcbPresentationSupportKHR(
  476. physicalDevice, queueFamilyIndex, connection, visual_id);
  477. }
  478. #endif // defined(USE_VULKAN_XCB)
  479. #if BUILDFLAG(IS_WIN)
  480. ALWAYS_INLINE VkResult
  481. vkCreateWin32SurfaceKHR(VkInstance instance,
  482. const VkWin32SurfaceCreateInfoKHR* pCreateInfo,
  483. const VkAllocationCallbacks* pAllocator,
  484. VkSurfaceKHR* pSurface) {
  485. return gpu::GetVulkanFunctionPointers()->vkCreateWin32SurfaceKHR(
  486. instance, pCreateInfo, pAllocator, pSurface);
  487. }
  488. ALWAYS_INLINE VkBool32
  489. vkGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice physicalDevice,
  490. uint32_t queueFamilyIndex) {
  491. return gpu::GetVulkanFunctionPointers()
  492. ->vkGetPhysicalDeviceWin32PresentationSupportKHR(physicalDevice,
  493. queueFamilyIndex);
  494. }
  495. #endif // BUILDFLAG(IS_WIN)
  496. #if BUILDFLAG(IS_ANDROID)
  497. ALWAYS_INLINE VkResult
  498. vkCreateAndroidSurfaceKHR(VkInstance instance,
  499. const VkAndroidSurfaceCreateInfoKHR* pCreateInfo,
  500. const VkAllocationCallbacks* pAllocator,
  501. VkSurfaceKHR* pSurface) {
  502. return gpu::GetVulkanFunctionPointers()->vkCreateAndroidSurfaceKHR(
  503. instance, pCreateInfo, pAllocator, pSurface);
  504. }
  505. #endif // BUILDFLAG(IS_ANDROID)
  506. #if BUILDFLAG(IS_FUCHSIA)
  507. ALWAYS_INLINE VkResult vkCreateImagePipeSurfaceFUCHSIA(
  508. VkInstance instance,
  509. const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo,
  510. const VkAllocationCallbacks* pAllocator,
  511. VkSurfaceKHR* pSurface) {
  512. return gpu::GetVulkanFunctionPointers()->vkCreateImagePipeSurfaceFUCHSIA(
  513. instance, pCreateInfo, pAllocator, pSurface);
  514. }
  515. #endif // BUILDFLAG(IS_FUCHSIA)
  516. // Device functions
  517. ALWAYS_INLINE VkResult
  518. vkAllocateCommandBuffers(VkDevice device,
  519. const VkCommandBufferAllocateInfo* pAllocateInfo,
  520. VkCommandBuffer* pCommandBuffers) {
  521. return gpu::GetVulkanFunctionPointers()->vkAllocateCommandBuffers(
  522. device, pAllocateInfo, pCommandBuffers);
  523. }
  524. ALWAYS_INLINE VkResult
  525. vkAllocateDescriptorSets(VkDevice device,
  526. const VkDescriptorSetAllocateInfo* pAllocateInfo,
  527. VkDescriptorSet* pDescriptorSets) {
  528. return gpu::GetVulkanFunctionPointers()->vkAllocateDescriptorSets(
  529. device, pAllocateInfo, pDescriptorSets);
  530. }
  531. ALWAYS_INLINE VkResult
  532. vkAllocateMemory(VkDevice device,
  533. const VkMemoryAllocateInfo* pAllocateInfo,
  534. const VkAllocationCallbacks* pAllocator,
  535. VkDeviceMemory* pMemory) {
  536. return gpu::GetVulkanFunctionPointers()->vkAllocateMemory(
  537. device, pAllocateInfo, pAllocator, pMemory);
  538. }
  539. ALWAYS_INLINE VkResult
  540. vkBeginCommandBuffer(VkCommandBuffer commandBuffer,
  541. const VkCommandBufferBeginInfo* pBeginInfo) {
  542. return gpu::GetVulkanFunctionPointers()->vkBeginCommandBuffer(commandBuffer,
  543. pBeginInfo);
  544. }
  545. ALWAYS_INLINE VkResult vkBindBufferMemory(VkDevice device,
  546. VkBuffer buffer,
  547. VkDeviceMemory memory,
  548. VkDeviceSize memoryOffset) {
  549. return gpu::GetVulkanFunctionPointers()->vkBindBufferMemory(
  550. device, buffer, memory, memoryOffset);
  551. }
  552. ALWAYS_INLINE VkResult
  553. vkBindBufferMemory2(VkDevice device,
  554. uint32_t bindInfoCount,
  555. const VkBindBufferMemoryInfo* pBindInfos) {
  556. return gpu::GetVulkanFunctionPointers()->vkBindBufferMemory2(
  557. device, bindInfoCount, pBindInfos);
  558. }
  559. ALWAYS_INLINE VkResult vkBindImageMemory(VkDevice device,
  560. VkImage image,
  561. VkDeviceMemory memory,
  562. VkDeviceSize memoryOffset) {
  563. return gpu::GetVulkanFunctionPointers()->vkBindImageMemory(
  564. device, image, memory, memoryOffset);
  565. }
  566. ALWAYS_INLINE VkResult
  567. vkBindImageMemory2(VkDevice device,
  568. uint32_t bindInfoCount,
  569. const VkBindImageMemoryInfo* pBindInfos) {
  570. return gpu::GetVulkanFunctionPointers()->vkBindImageMemory2(
  571. device, bindInfoCount, pBindInfos);
  572. }
  573. ALWAYS_INLINE void vkCmdBeginRenderPass(
  574. VkCommandBuffer commandBuffer,
  575. const VkRenderPassBeginInfo* pRenderPassBegin,
  576. VkSubpassContents contents) {
  577. return gpu::GetVulkanFunctionPointers()->vkCmdBeginRenderPass(
  578. commandBuffer, pRenderPassBegin, contents);
  579. }
  580. ALWAYS_INLINE void vkCmdCopyBuffer(VkCommandBuffer commandBuffer,
  581. VkBuffer srcBuffer,
  582. VkBuffer dstBuffer,
  583. uint32_t regionCount,
  584. const VkBufferCopy* pRegions) {
  585. return gpu::GetVulkanFunctionPointers()->vkCmdCopyBuffer(
  586. commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
  587. }
  588. ALWAYS_INLINE void vkCmdCopyBufferToImage(VkCommandBuffer commandBuffer,
  589. VkBuffer srcBuffer,
  590. VkImage dstImage,
  591. VkImageLayout dstImageLayout,
  592. uint32_t regionCount,
  593. const VkBufferImageCopy* pRegions) {
  594. return gpu::GetVulkanFunctionPointers()->vkCmdCopyBufferToImage(
  595. commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount,
  596. pRegions);
  597. }
  598. ALWAYS_INLINE void vkCmdCopyImageToBuffer(VkCommandBuffer commandBuffer,
  599. VkImage srcImage,
  600. VkImageLayout srcImageLayout,
  601. VkBuffer dstBuffer,
  602. uint32_t regionCount,
  603. const VkBufferImageCopy* pRegions) {
  604. return gpu::GetVulkanFunctionPointers()->vkCmdCopyImageToBuffer(
  605. commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount,
  606. pRegions);
  607. }
  608. ALWAYS_INLINE void vkCmdEndRenderPass(VkCommandBuffer commandBuffer) {
  609. return gpu::GetVulkanFunctionPointers()->vkCmdEndRenderPass(commandBuffer);
  610. }
  611. ALWAYS_INLINE void vkCmdExecuteCommands(
  612. VkCommandBuffer commandBuffer,
  613. uint32_t commandBufferCount,
  614. const VkCommandBuffer* pCommandBuffers) {
  615. return gpu::GetVulkanFunctionPointers()->vkCmdExecuteCommands(
  616. commandBuffer, commandBufferCount, pCommandBuffers);
  617. }
  618. ALWAYS_INLINE void vkCmdNextSubpass(VkCommandBuffer commandBuffer,
  619. VkSubpassContents contents) {
  620. return gpu::GetVulkanFunctionPointers()->vkCmdNextSubpass(commandBuffer,
  621. contents);
  622. }
  623. ALWAYS_INLINE void vkCmdPipelineBarrier(
  624. VkCommandBuffer commandBuffer,
  625. VkPipelineStageFlags srcStageMask,
  626. VkPipelineStageFlags dstStageMask,
  627. VkDependencyFlags dependencyFlags,
  628. uint32_t memoryBarrierCount,
  629. const VkMemoryBarrier* pMemoryBarriers,
  630. uint32_t bufferMemoryBarrierCount,
  631. const VkBufferMemoryBarrier* pBufferMemoryBarriers,
  632. uint32_t imageMemoryBarrierCount,
  633. const VkImageMemoryBarrier* pImageMemoryBarriers) {
  634. return gpu::GetVulkanFunctionPointers()->vkCmdPipelineBarrier(
  635. commandBuffer, srcStageMask, dstStageMask, dependencyFlags,
  636. memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount,
  637. pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
  638. }
  639. ALWAYS_INLINE VkResult vkCreateBuffer(VkDevice device,
  640. const VkBufferCreateInfo* pCreateInfo,
  641. const VkAllocationCallbacks* pAllocator,
  642. VkBuffer* pBuffer) {
  643. return gpu::GetVulkanFunctionPointers()->vkCreateBuffer(device, pCreateInfo,
  644. pAllocator, pBuffer);
  645. }
  646. ALWAYS_INLINE VkResult
  647. vkCreateCommandPool(VkDevice device,
  648. const VkCommandPoolCreateInfo* pCreateInfo,
  649. const VkAllocationCallbacks* pAllocator,
  650. VkCommandPool* pCommandPool) {
  651. return gpu::GetVulkanFunctionPointers()->vkCreateCommandPool(
  652. device, pCreateInfo, pAllocator, pCommandPool);
  653. }
  654. ALWAYS_INLINE VkResult
  655. vkCreateDescriptorPool(VkDevice device,
  656. const VkDescriptorPoolCreateInfo* pCreateInfo,
  657. const VkAllocationCallbacks* pAllocator,
  658. VkDescriptorPool* pDescriptorPool) {
  659. return gpu::GetVulkanFunctionPointers()->vkCreateDescriptorPool(
  660. device, pCreateInfo, pAllocator, pDescriptorPool);
  661. }
  662. ALWAYS_INLINE VkResult
  663. vkCreateDescriptorSetLayout(VkDevice device,
  664. const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
  665. const VkAllocationCallbacks* pAllocator,
  666. VkDescriptorSetLayout* pSetLayout) {
  667. return gpu::GetVulkanFunctionPointers()->vkCreateDescriptorSetLayout(
  668. device, pCreateInfo, pAllocator, pSetLayout);
  669. }
  670. ALWAYS_INLINE VkResult vkCreateFence(VkDevice device,
  671. const VkFenceCreateInfo* pCreateInfo,
  672. const VkAllocationCallbacks* pAllocator,
  673. VkFence* pFence) {
  674. return gpu::GetVulkanFunctionPointers()->vkCreateFence(device, pCreateInfo,
  675. pAllocator, pFence);
  676. }
  677. ALWAYS_INLINE VkResult
  678. vkCreateFramebuffer(VkDevice device,
  679. const VkFramebufferCreateInfo* pCreateInfo,
  680. const VkAllocationCallbacks* pAllocator,
  681. VkFramebuffer* pFramebuffer) {
  682. return gpu::GetVulkanFunctionPointers()->vkCreateFramebuffer(
  683. device, pCreateInfo, pAllocator, pFramebuffer);
  684. }
  685. ALWAYS_INLINE VkResult
  686. vkCreateGraphicsPipelines(VkDevice device,
  687. VkPipelineCache pipelineCache,
  688. uint32_t createInfoCount,
  689. const VkGraphicsPipelineCreateInfo* pCreateInfos,
  690. const VkAllocationCallbacks* pAllocator,
  691. VkPipeline* pPipelines) {
  692. return gpu::GetVulkanFunctionPointers()->vkCreateGraphicsPipelines(
  693. device, pipelineCache, createInfoCount, pCreateInfos, pAllocator,
  694. pPipelines);
  695. }
  696. ALWAYS_INLINE VkResult vkCreateImage(VkDevice device,
  697. const VkImageCreateInfo* pCreateInfo,
  698. const VkAllocationCallbacks* pAllocator,
  699. VkImage* pImage) {
  700. return gpu::GetVulkanFunctionPointers()->vkCreateImage(device, pCreateInfo,
  701. pAllocator, pImage);
  702. }
  703. ALWAYS_INLINE VkResult
  704. vkCreateImageView(VkDevice device,
  705. const VkImageViewCreateInfo* pCreateInfo,
  706. const VkAllocationCallbacks* pAllocator,
  707. VkImageView* pView) {
  708. return gpu::GetVulkanFunctionPointers()->vkCreateImageView(
  709. device, pCreateInfo, pAllocator, pView);
  710. }
  711. ALWAYS_INLINE VkResult
  712. vkCreateRenderPass(VkDevice device,
  713. const VkRenderPassCreateInfo* pCreateInfo,
  714. const VkAllocationCallbacks* pAllocator,
  715. VkRenderPass* pRenderPass) {
  716. return gpu::GetVulkanFunctionPointers()->vkCreateRenderPass(
  717. device, pCreateInfo, pAllocator, pRenderPass);
  718. }
  719. ALWAYS_INLINE VkResult vkCreateSampler(VkDevice device,
  720. const VkSamplerCreateInfo* pCreateInfo,
  721. const VkAllocationCallbacks* pAllocator,
  722. VkSampler* pSampler) {
  723. return gpu::GetVulkanFunctionPointers()->vkCreateSampler(
  724. device, pCreateInfo, pAllocator, pSampler);
  725. }
  726. ALWAYS_INLINE VkResult
  727. vkCreateSemaphore(VkDevice device,
  728. const VkSemaphoreCreateInfo* pCreateInfo,
  729. const VkAllocationCallbacks* pAllocator,
  730. VkSemaphore* pSemaphore) {
  731. return gpu::GetVulkanFunctionPointers()->vkCreateSemaphore(
  732. device, pCreateInfo, pAllocator, pSemaphore);
  733. }
  734. ALWAYS_INLINE VkResult
  735. vkCreateShaderModule(VkDevice device,
  736. const VkShaderModuleCreateInfo* pCreateInfo,
  737. const VkAllocationCallbacks* pAllocator,
  738. VkShaderModule* pShaderModule) {
  739. return gpu::GetVulkanFunctionPointers()->vkCreateShaderModule(
  740. device, pCreateInfo, pAllocator, pShaderModule);
  741. }
  742. ALWAYS_INLINE void vkDestroyBuffer(VkDevice device,
  743. VkBuffer buffer,
  744. const VkAllocationCallbacks* pAllocator) {
  745. return gpu::GetVulkanFunctionPointers()->vkDestroyBuffer(device, buffer,
  746. pAllocator);
  747. }
  748. ALWAYS_INLINE void vkDestroyCommandPool(
  749. VkDevice device,
  750. VkCommandPool commandPool,
  751. const VkAllocationCallbacks* pAllocator) {
  752. return gpu::GetVulkanFunctionPointers()->vkDestroyCommandPool(
  753. device, commandPool, pAllocator);
  754. }
  755. ALWAYS_INLINE void vkDestroyDescriptorPool(
  756. VkDevice device,
  757. VkDescriptorPool descriptorPool,
  758. const VkAllocationCallbacks* pAllocator) {
  759. return gpu::GetVulkanFunctionPointers()->vkDestroyDescriptorPool(
  760. device, descriptorPool, pAllocator);
  761. }
  762. ALWAYS_INLINE void vkDestroyDescriptorSetLayout(
  763. VkDevice device,
  764. VkDescriptorSetLayout descriptorSetLayout,
  765. const VkAllocationCallbacks* pAllocator) {
  766. return gpu::GetVulkanFunctionPointers()->vkDestroyDescriptorSetLayout(
  767. device, descriptorSetLayout, pAllocator);
  768. }
  769. ALWAYS_INLINE void vkDestroyDevice(VkDevice device,
  770. const VkAllocationCallbacks* pAllocator) {
  771. return gpu::GetVulkanFunctionPointers()->vkDestroyDevice(device, pAllocator);
  772. }
  773. ALWAYS_INLINE void vkDestroyFence(VkDevice device,
  774. VkFence fence,
  775. const VkAllocationCallbacks* pAllocator) {
  776. return gpu::GetVulkanFunctionPointers()->vkDestroyFence(device, fence,
  777. pAllocator);
  778. }
  779. ALWAYS_INLINE void vkDestroyFramebuffer(
  780. VkDevice device,
  781. VkFramebuffer framebuffer,
  782. const VkAllocationCallbacks* pAllocator) {
  783. return gpu::GetVulkanFunctionPointers()->vkDestroyFramebuffer(
  784. device, framebuffer, pAllocator);
  785. }
  786. ALWAYS_INLINE void vkDestroyImage(VkDevice device,
  787. VkImage image,
  788. const VkAllocationCallbacks* pAllocator) {
  789. return gpu::GetVulkanFunctionPointers()->vkDestroyImage(device, image,
  790. pAllocator);
  791. }
  792. ALWAYS_INLINE void vkDestroyImageView(VkDevice device,
  793. VkImageView imageView,
  794. const VkAllocationCallbacks* pAllocator) {
  795. return gpu::GetVulkanFunctionPointers()->vkDestroyImageView(device, imageView,
  796. pAllocator);
  797. }
  798. ALWAYS_INLINE void vkDestroyRenderPass(
  799. VkDevice device,
  800. VkRenderPass renderPass,
  801. const VkAllocationCallbacks* pAllocator) {
  802. return gpu::GetVulkanFunctionPointers()->vkDestroyRenderPass(
  803. device, renderPass, pAllocator);
  804. }
  805. ALWAYS_INLINE void vkDestroySampler(VkDevice device,
  806. VkSampler sampler,
  807. const VkAllocationCallbacks* pAllocator) {
  808. return gpu::GetVulkanFunctionPointers()->vkDestroySampler(device, sampler,
  809. pAllocator);
  810. }
  811. ALWAYS_INLINE void vkDestroySemaphore(VkDevice device,
  812. VkSemaphore semaphore,
  813. const VkAllocationCallbacks* pAllocator) {
  814. return gpu::GetVulkanFunctionPointers()->vkDestroySemaphore(device, semaphore,
  815. pAllocator);
  816. }
  817. ALWAYS_INLINE void vkDestroyShaderModule(
  818. VkDevice device,
  819. VkShaderModule shaderModule,
  820. const VkAllocationCallbacks* pAllocator) {
  821. return gpu::GetVulkanFunctionPointers()->vkDestroyShaderModule(
  822. device, shaderModule, pAllocator);
  823. }
  824. ALWAYS_INLINE VkResult vkDeviceWaitIdle(VkDevice device) {
  825. return gpu::GetVulkanFunctionPointers()->vkDeviceWaitIdle(device);
  826. }
  827. ALWAYS_INLINE VkResult
  828. vkFlushMappedMemoryRanges(VkDevice device,
  829. uint32_t memoryRangeCount,
  830. const VkMappedMemoryRange* pMemoryRanges) {
  831. return gpu::GetVulkanFunctionPointers()->vkFlushMappedMemoryRanges(
  832. device, memoryRangeCount, pMemoryRanges);
  833. }
  834. ALWAYS_INLINE VkResult vkEndCommandBuffer(VkCommandBuffer commandBuffer) {
  835. return gpu::GetVulkanFunctionPointers()->vkEndCommandBuffer(commandBuffer);
  836. }
  837. ALWAYS_INLINE void vkFreeCommandBuffers(
  838. VkDevice device,
  839. VkCommandPool commandPool,
  840. uint32_t commandBufferCount,
  841. const VkCommandBuffer* pCommandBuffers) {
  842. return gpu::GetVulkanFunctionPointers()->vkFreeCommandBuffers(
  843. device, commandPool, commandBufferCount, pCommandBuffers);
  844. }
  845. ALWAYS_INLINE VkResult
  846. vkFreeDescriptorSets(VkDevice device,
  847. VkDescriptorPool descriptorPool,
  848. uint32_t descriptorSetCount,
  849. const VkDescriptorSet* pDescriptorSets) {
  850. return gpu::GetVulkanFunctionPointers()->vkFreeDescriptorSets(
  851. device, descriptorPool, descriptorSetCount, pDescriptorSets);
  852. }
  853. ALWAYS_INLINE void vkFreeMemory(VkDevice device,
  854. VkDeviceMemory memory,
  855. const VkAllocationCallbacks* pAllocator) {
  856. return gpu::GetVulkanFunctionPointers()->vkFreeMemory(device, memory,
  857. pAllocator);
  858. }
  859. ALWAYS_INLINE VkResult
  860. vkInvalidateMappedMemoryRanges(VkDevice device,
  861. uint32_t memoryRangeCount,
  862. const VkMappedMemoryRange* pMemoryRanges) {
  863. return gpu::GetVulkanFunctionPointers()->vkInvalidateMappedMemoryRanges(
  864. device, memoryRangeCount, pMemoryRanges);
  865. }
  866. ALWAYS_INLINE void vkGetBufferMemoryRequirements(
  867. VkDevice device,
  868. VkBuffer buffer,
  869. VkMemoryRequirements* pMemoryRequirements) {
  870. return gpu::GetVulkanFunctionPointers()->vkGetBufferMemoryRequirements(
  871. device, buffer, pMemoryRequirements);
  872. }
  873. ALWAYS_INLINE void vkGetBufferMemoryRequirements2(
  874. VkDevice device,
  875. const VkBufferMemoryRequirementsInfo2* pInfo,
  876. VkMemoryRequirements2* pMemoryRequirements) {
  877. return gpu::GetVulkanFunctionPointers()->vkGetBufferMemoryRequirements2(
  878. device, pInfo, pMemoryRequirements);
  879. }
  880. ALWAYS_INLINE void vkGetDeviceQueue(VkDevice device,
  881. uint32_t queueFamilyIndex,
  882. uint32_t queueIndex,
  883. VkQueue* pQueue) {
  884. return gpu::GetVulkanFunctionPointers()->vkGetDeviceQueue(
  885. device, queueFamilyIndex, queueIndex, pQueue);
  886. }
  887. ALWAYS_INLINE void vkGetDeviceQueue2(VkDevice device,
  888. const VkDeviceQueueInfo2* pQueueInfo,
  889. VkQueue* pQueue) {
  890. return gpu::GetVulkanFunctionPointers()->vkGetDeviceQueue2(device, pQueueInfo,
  891. pQueue);
  892. }
  893. ALWAYS_INLINE VkResult vkGetFenceStatus(VkDevice device, VkFence fence) {
  894. return gpu::GetVulkanFunctionPointers()->vkGetFenceStatus(device, fence);
  895. }
  896. ALWAYS_INLINE void vkGetImageMemoryRequirements(
  897. VkDevice device,
  898. VkImage image,
  899. VkMemoryRequirements* pMemoryRequirements) {
  900. return gpu::GetVulkanFunctionPointers()->vkGetImageMemoryRequirements(
  901. device, image, pMemoryRequirements);
  902. }
  903. ALWAYS_INLINE void vkGetImageMemoryRequirements2(
  904. VkDevice device,
  905. const VkImageMemoryRequirementsInfo2* pInfo,
  906. VkMemoryRequirements2* pMemoryRequirements) {
  907. return gpu::GetVulkanFunctionPointers()->vkGetImageMemoryRequirements2(
  908. device, pInfo, pMemoryRequirements);
  909. }
  910. ALWAYS_INLINE void vkGetImageSubresourceLayout(
  911. VkDevice device,
  912. VkImage image,
  913. const VkImageSubresource* pSubresource,
  914. VkSubresourceLayout* pLayout) {
  915. return gpu::GetVulkanFunctionPointers()->vkGetImageSubresourceLayout(
  916. device, image, pSubresource, pLayout);
  917. }
  918. ALWAYS_INLINE VkResult vkMapMemory(VkDevice device,
  919. VkDeviceMemory memory,
  920. VkDeviceSize offset,
  921. VkDeviceSize size,
  922. VkMemoryMapFlags flags,
  923. void** ppData) {
  924. return gpu::GetVulkanFunctionPointers()->vkMapMemory(device, memory, offset,
  925. size, flags, ppData);
  926. }
  927. ALWAYS_INLINE VkResult vkQueueSubmit(VkQueue queue,
  928. uint32_t submitCount,
  929. const VkSubmitInfo* pSubmits,
  930. VkFence fence) {
  931. base::AutoLockMaybe auto_lock(
  932. gpu::GetVulkanFunctionPointers()->per_queue_lock_map[queue].get());
  933. return gpu::GetVulkanFunctionPointers()->vkQueueSubmit(queue, submitCount,
  934. pSubmits, fence);
  935. }
  936. ALWAYS_INLINE VkResult vkQueueWaitIdle(VkQueue queue) {
  937. base::AutoLockMaybe auto_lock(
  938. gpu::GetVulkanFunctionPointers()->per_queue_lock_map[queue].get());
  939. return gpu::GetVulkanFunctionPointers()->vkQueueWaitIdle(queue);
  940. }
  941. ALWAYS_INLINE VkResult vkResetCommandBuffer(VkCommandBuffer commandBuffer,
  942. VkCommandBufferResetFlags flags) {
  943. return gpu::GetVulkanFunctionPointers()->vkResetCommandBuffer(commandBuffer,
  944. flags);
  945. }
  946. ALWAYS_INLINE VkResult vkResetFences(VkDevice device,
  947. uint32_t fenceCount,
  948. const VkFence* pFences) {
  949. return gpu::GetVulkanFunctionPointers()->vkResetFences(device, fenceCount,
  950. pFences);
  951. }
  952. ALWAYS_INLINE void vkUnmapMemory(VkDevice device, VkDeviceMemory memory) {
  953. return gpu::GetVulkanFunctionPointers()->vkUnmapMemory(device, memory);
  954. }
  955. ALWAYS_INLINE void vkUpdateDescriptorSets(
  956. VkDevice device,
  957. uint32_t descriptorWriteCount,
  958. const VkWriteDescriptorSet* pDescriptorWrites,
  959. uint32_t descriptorCopyCount,
  960. const VkCopyDescriptorSet* pDescriptorCopies) {
  961. return gpu::GetVulkanFunctionPointers()->vkUpdateDescriptorSets(
  962. device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount,
  963. pDescriptorCopies);
  964. }
  965. ALWAYS_INLINE VkResult vkWaitForFences(VkDevice device,
  966. uint32_t fenceCount,
  967. const VkFence* pFences,
  968. VkBool32 waitAll,
  969. uint64_t timeout) {
  970. return gpu::GetVulkanFunctionPointers()->vkWaitForFences(
  971. device, fenceCount, pFences, waitAll, timeout);
  972. }
  973. #if BUILDFLAG(IS_ANDROID)
  974. ALWAYS_INLINE VkResult vkGetAndroidHardwareBufferPropertiesANDROID(
  975. VkDevice device,
  976. const struct AHardwareBuffer* buffer,
  977. VkAndroidHardwareBufferPropertiesANDROID* pProperties) {
  978. return gpu::GetVulkanFunctionPointers()
  979. ->vkGetAndroidHardwareBufferPropertiesANDROID(device, buffer,
  980. pProperties);
  981. }
  982. #endif // BUILDFLAG(IS_ANDROID)
  983. #if BUILDFLAG(IS_POSIX)
  984. ALWAYS_INLINE VkResult
  985. vkGetSemaphoreFdKHR(VkDevice device,
  986. const VkSemaphoreGetFdInfoKHR* pGetFdInfo,
  987. int* pFd) {
  988. return gpu::GetVulkanFunctionPointers()->vkGetSemaphoreFdKHR(device,
  989. pGetFdInfo, pFd);
  990. }
  991. ALWAYS_INLINE VkResult vkImportSemaphoreFdKHR(
  992. VkDevice device,
  993. const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo) {
  994. return gpu::GetVulkanFunctionPointers()->vkImportSemaphoreFdKHR(
  995. device, pImportSemaphoreFdInfo);
  996. }
  997. #endif // BUILDFLAG(IS_POSIX)
  998. #if BUILDFLAG(IS_WIN)
  999. ALWAYS_INLINE VkResult vkGetSemaphoreWin32HandleKHR(
  1000. VkDevice device,
  1001. const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo,
  1002. HANDLE* pHandle) {
  1003. return gpu::GetVulkanFunctionPointers()->vkGetSemaphoreWin32HandleKHR(
  1004. device, pGetWin32HandleInfo, pHandle);
  1005. }
  1006. ALWAYS_INLINE VkResult
  1007. vkImportSemaphoreWin32HandleKHR(VkDevice device,
  1008. const VkImportSemaphoreWin32HandleInfoKHR*
  1009. pImportSemaphoreWin32HandleInfo) {
  1010. return gpu::GetVulkanFunctionPointers()->vkImportSemaphoreWin32HandleKHR(
  1011. device, pImportSemaphoreWin32HandleInfo);
  1012. }
  1013. #endif // BUILDFLAG(IS_WIN)
  1014. #if BUILDFLAG(IS_POSIX)
  1015. ALWAYS_INLINE VkResult vkGetMemoryFdKHR(VkDevice device,
  1016. const VkMemoryGetFdInfoKHR* pGetFdInfo,
  1017. int* pFd) {
  1018. return gpu::GetVulkanFunctionPointers()->vkGetMemoryFdKHR(device, pGetFdInfo,
  1019. pFd);
  1020. }
  1021. ALWAYS_INLINE VkResult
  1022. vkGetMemoryFdPropertiesKHR(VkDevice device,
  1023. VkExternalMemoryHandleTypeFlagBits handleType,
  1024. int fd,
  1025. VkMemoryFdPropertiesKHR* pMemoryFdProperties) {
  1026. return gpu::GetVulkanFunctionPointers()->vkGetMemoryFdPropertiesKHR(
  1027. device, handleType, fd, pMemoryFdProperties);
  1028. }
  1029. #endif // BUILDFLAG(IS_POSIX)
  1030. #if BUILDFLAG(IS_WIN)
  1031. ALWAYS_INLINE VkResult vkGetMemoryWin32HandleKHR(
  1032. VkDevice device,
  1033. const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo,
  1034. HANDLE* pHandle) {
  1035. return gpu::GetVulkanFunctionPointers()->vkGetMemoryWin32HandleKHR(
  1036. device, pGetWin32HandleInfo, pHandle);
  1037. }
  1038. ALWAYS_INLINE VkResult vkGetMemoryWin32HandlePropertiesKHR(
  1039. VkDevice device,
  1040. VkExternalMemoryHandleTypeFlagBits handleType,
  1041. HANDLE handle,
  1042. VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties) {
  1043. return gpu::GetVulkanFunctionPointers()->vkGetMemoryWin32HandlePropertiesKHR(
  1044. device, handleType, handle, pMemoryWin32HandleProperties);
  1045. }
  1046. #endif // BUILDFLAG(IS_WIN)
  1047. #if BUILDFLAG(IS_FUCHSIA)
  1048. ALWAYS_INLINE VkResult vkImportSemaphoreZirconHandleFUCHSIA(
  1049. VkDevice device,
  1050. const VkImportSemaphoreZirconHandleInfoFUCHSIA*
  1051. pImportSemaphoreZirconHandleInfo) {
  1052. return gpu::GetVulkanFunctionPointers()->vkImportSemaphoreZirconHandleFUCHSIA(
  1053. device, pImportSemaphoreZirconHandleInfo);
  1054. }
  1055. ALWAYS_INLINE VkResult vkGetSemaphoreZirconHandleFUCHSIA(
  1056. VkDevice device,
  1057. const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo,
  1058. zx_handle_t* pZirconHandle) {
  1059. return gpu::GetVulkanFunctionPointers()->vkGetSemaphoreZirconHandleFUCHSIA(
  1060. device, pGetZirconHandleInfo, pZirconHandle);
  1061. }
  1062. #endif // BUILDFLAG(IS_FUCHSIA)
  1063. #if BUILDFLAG(IS_FUCHSIA)
  1064. ALWAYS_INLINE VkResult vkGetMemoryZirconHandleFUCHSIA(
  1065. VkDevice device,
  1066. const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo,
  1067. zx_handle_t* pZirconHandle) {
  1068. return gpu::GetVulkanFunctionPointers()->vkGetMemoryZirconHandleFUCHSIA(
  1069. device, pGetZirconHandleInfo, pZirconHandle);
  1070. }
  1071. #endif // BUILDFLAG(IS_FUCHSIA)
  1072. #if BUILDFLAG(IS_FUCHSIA)
  1073. ALWAYS_INLINE VkResult vkCreateBufferCollectionFUCHSIA(
  1074. VkDevice device,
  1075. const VkBufferCollectionCreateInfoFUCHSIA* pCreateInfo,
  1076. const VkAllocationCallbacks* pAllocator,
  1077. VkBufferCollectionFUCHSIA* pCollection) {
  1078. return gpu::GetVulkanFunctionPointers()->vkCreateBufferCollectionFUCHSIA(
  1079. device, pCreateInfo, pAllocator, pCollection);
  1080. }
  1081. ALWAYS_INLINE VkResult vkSetBufferCollectionImageConstraintsFUCHSIA(
  1082. VkDevice device,
  1083. VkBufferCollectionFUCHSIA collection,
  1084. const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo) {
  1085. return gpu::GetVulkanFunctionPointers()
  1086. ->vkSetBufferCollectionImageConstraintsFUCHSIA(device, collection,
  1087. pImageConstraintsInfo);
  1088. }
  1089. ALWAYS_INLINE VkResult vkGetBufferCollectionPropertiesFUCHSIA(
  1090. VkDevice device,
  1091. VkBufferCollectionFUCHSIA collection,
  1092. VkBufferCollectionPropertiesFUCHSIA* pProperties) {
  1093. return gpu::GetVulkanFunctionPointers()
  1094. ->vkGetBufferCollectionPropertiesFUCHSIA(device, collection, pProperties);
  1095. }
  1096. ALWAYS_INLINE void vkDestroyBufferCollectionFUCHSIA(
  1097. VkDevice device,
  1098. VkBufferCollectionFUCHSIA collection,
  1099. const VkAllocationCallbacks* pAllocator) {
  1100. return gpu::GetVulkanFunctionPointers()->vkDestroyBufferCollectionFUCHSIA(
  1101. device, collection, pAllocator);
  1102. }
  1103. #endif // BUILDFLAG(IS_FUCHSIA)
  1104. ALWAYS_INLINE VkResult vkAcquireNextImageKHR(VkDevice device,
  1105. VkSwapchainKHR swapchain,
  1106. uint64_t timeout,
  1107. VkSemaphore semaphore,
  1108. VkFence fence,
  1109. uint32_t* pImageIndex) {
  1110. return gpu::GetVulkanFunctionPointers()->vkAcquireNextImageKHR(
  1111. device, swapchain, timeout, semaphore, fence, pImageIndex);
  1112. }
  1113. ALWAYS_INLINE VkResult
  1114. vkCreateSwapchainKHR(VkDevice device,
  1115. const VkSwapchainCreateInfoKHR* pCreateInfo,
  1116. const VkAllocationCallbacks* pAllocator,
  1117. VkSwapchainKHR* pSwapchain) {
  1118. return gpu::GetVulkanFunctionPointers()->vkCreateSwapchainKHR(
  1119. device, pCreateInfo, pAllocator, pSwapchain);
  1120. }
  1121. ALWAYS_INLINE void vkDestroySwapchainKHR(
  1122. VkDevice device,
  1123. VkSwapchainKHR swapchain,
  1124. const VkAllocationCallbacks* pAllocator) {
  1125. return gpu::GetVulkanFunctionPointers()->vkDestroySwapchainKHR(
  1126. device, swapchain, pAllocator);
  1127. }
  1128. ALWAYS_INLINE VkResult vkGetSwapchainImagesKHR(VkDevice device,
  1129. VkSwapchainKHR swapchain,
  1130. uint32_t* pSwapchainImageCount,
  1131. VkImage* pSwapchainImages) {
  1132. return gpu::GetVulkanFunctionPointers()->vkGetSwapchainImagesKHR(
  1133. device, swapchain, pSwapchainImageCount, pSwapchainImages);
  1134. }
  1135. ALWAYS_INLINE VkResult vkQueuePresentKHR(VkQueue queue,
  1136. const VkPresentInfoKHR* pPresentInfo) {
  1137. base::AutoLockMaybe auto_lock(
  1138. gpu::GetVulkanFunctionPointers()->per_queue_lock_map[queue].get());
  1139. return gpu::GetVulkanFunctionPointers()->vkQueuePresentKHR(queue,
  1140. pPresentInfo);
  1141. }
  1142. #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
  1143. ALWAYS_INLINE VkResult vkGetImageDrmFormatModifierPropertiesEXT(
  1144. VkDevice device,
  1145. VkImage image,
  1146. VkImageDrmFormatModifierPropertiesEXT* pProperties) {
  1147. return gpu::GetVulkanFunctionPointers()
  1148. ->vkGetImageDrmFormatModifierPropertiesEXT(device, image, pProperties);
  1149. }
  1150. #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
  1151. #endif // GPU_VULKAN_VULKAN_FUNCTION_POINTERS_H_