vulkan_function_pointers.cc 43 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172
  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. #include "gpu/vulkan/vulkan_function_pointers.h"
  11. #include "base/logging.h"
  12. #include "base/no_destructor.h"
  13. namespace gpu {
  14. VulkanFunctionPointers* GetVulkanFunctionPointers() {
  15. static base::NoDestructor<VulkanFunctionPointers> vulkan_function_pointers;
  16. return vulkan_function_pointers.get();
  17. }
  18. VulkanFunctionPointers::VulkanFunctionPointers() = default;
  19. VulkanFunctionPointers::~VulkanFunctionPointers() = default;
  20. bool VulkanFunctionPointers::BindUnassociatedFunctionPointersFromLoaderLib(
  21. base::NativeLibrary lib) {
  22. base::AutoLock lock(write_lock_);
  23. loader_library_ = lib;
  24. // vkGetInstanceProcAddr must be handled specially since it gets its
  25. // function pointer through base::GetFunctionPOinterFromNativeLibrary().
  26. // Other Vulkan functions don't do this.
  27. vkGetInstanceProcAddr = reinterpret_cast<PFN_vkGetInstanceProcAddr>(
  28. base::GetFunctionPointerFromNativeLibrary(loader_library_,
  29. "vkGetInstanceProcAddr"));
  30. if (!vkGetInstanceProcAddr)
  31. return false;
  32. return BindUnassociatedFunctionPointersCommon();
  33. }
  34. bool VulkanFunctionPointers::BindUnassociatedFunctionPointersFromGetProcAddr(
  35. PFN_vkGetInstanceProcAddr proc) {
  36. DCHECK(proc);
  37. DCHECK(!loader_library_);
  38. base::AutoLock lock(write_lock_);
  39. vkGetInstanceProcAddr = proc;
  40. return BindUnassociatedFunctionPointersCommon();
  41. }
  42. bool VulkanFunctionPointers::BindUnassociatedFunctionPointersCommon() {
  43. vkEnumerateInstanceVersion = reinterpret_cast<PFN_vkEnumerateInstanceVersion>(
  44. vkGetInstanceProcAddr(nullptr, "vkEnumerateInstanceVersion"));
  45. if (!vkEnumerateInstanceVersion) {
  46. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  47. << "vkEnumerateInstanceVersion";
  48. return false;
  49. }
  50. vkCreateInstance = reinterpret_cast<PFN_vkCreateInstance>(
  51. vkGetInstanceProcAddr(nullptr, "vkCreateInstance"));
  52. if (!vkCreateInstance) {
  53. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  54. << "vkCreateInstance";
  55. return false;
  56. }
  57. vkEnumerateInstanceExtensionProperties =
  58. reinterpret_cast<PFN_vkEnumerateInstanceExtensionProperties>(
  59. vkGetInstanceProcAddr(nullptr,
  60. "vkEnumerateInstanceExtensionProperties"));
  61. if (!vkEnumerateInstanceExtensionProperties) {
  62. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  63. << "vkEnumerateInstanceExtensionProperties";
  64. return false;
  65. }
  66. vkEnumerateInstanceLayerProperties =
  67. reinterpret_cast<PFN_vkEnumerateInstanceLayerProperties>(
  68. vkGetInstanceProcAddr(nullptr, "vkEnumerateInstanceLayerProperties"));
  69. if (!vkEnumerateInstanceLayerProperties) {
  70. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  71. << "vkEnumerateInstanceLayerProperties";
  72. return false;
  73. }
  74. return true;
  75. }
  76. bool VulkanFunctionPointers::BindInstanceFunctionPointers(
  77. VkInstance vk_instance,
  78. uint32_t api_version,
  79. const gfx::ExtensionSet& enabled_extensions) {
  80. DCHECK_GE(api_version, kVulkanRequiredApiVersion);
  81. base::AutoLock lock(write_lock_);
  82. vkCreateDevice = reinterpret_cast<PFN_vkCreateDevice>(
  83. vkGetInstanceProcAddr(vk_instance, "vkCreateDevice"));
  84. if (!vkCreateDevice) {
  85. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  86. << "vkCreateDevice";
  87. return false;
  88. }
  89. vkDestroyInstance = reinterpret_cast<PFN_vkDestroyInstance>(
  90. vkGetInstanceProcAddr(vk_instance, "vkDestroyInstance"));
  91. if (!vkDestroyInstance) {
  92. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  93. << "vkDestroyInstance";
  94. return false;
  95. }
  96. vkEnumerateDeviceExtensionProperties =
  97. reinterpret_cast<PFN_vkEnumerateDeviceExtensionProperties>(
  98. vkGetInstanceProcAddr(vk_instance,
  99. "vkEnumerateDeviceExtensionProperties"));
  100. if (!vkEnumerateDeviceExtensionProperties) {
  101. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  102. << "vkEnumerateDeviceExtensionProperties";
  103. return false;
  104. }
  105. vkEnumerateDeviceLayerProperties =
  106. reinterpret_cast<PFN_vkEnumerateDeviceLayerProperties>(
  107. vkGetInstanceProcAddr(vk_instance,
  108. "vkEnumerateDeviceLayerProperties"));
  109. if (!vkEnumerateDeviceLayerProperties) {
  110. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  111. << "vkEnumerateDeviceLayerProperties";
  112. return false;
  113. }
  114. vkEnumeratePhysicalDevices = reinterpret_cast<PFN_vkEnumeratePhysicalDevices>(
  115. vkGetInstanceProcAddr(vk_instance, "vkEnumeratePhysicalDevices"));
  116. if (!vkEnumeratePhysicalDevices) {
  117. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  118. << "vkEnumeratePhysicalDevices";
  119. return false;
  120. }
  121. vkGetDeviceProcAddr = reinterpret_cast<PFN_vkGetDeviceProcAddr>(
  122. vkGetInstanceProcAddr(vk_instance, "vkGetDeviceProcAddr"));
  123. if (!vkGetDeviceProcAddr) {
  124. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  125. << "vkGetDeviceProcAddr";
  126. return false;
  127. }
  128. vkGetPhysicalDeviceFeatures2 =
  129. reinterpret_cast<PFN_vkGetPhysicalDeviceFeatures2>(
  130. vkGetInstanceProcAddr(vk_instance, "vkGetPhysicalDeviceFeatures2"));
  131. if (!vkGetPhysicalDeviceFeatures2) {
  132. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  133. << "vkGetPhysicalDeviceFeatures2";
  134. return false;
  135. }
  136. vkGetPhysicalDeviceFormatProperties =
  137. reinterpret_cast<PFN_vkGetPhysicalDeviceFormatProperties>(
  138. vkGetInstanceProcAddr(vk_instance,
  139. "vkGetPhysicalDeviceFormatProperties"));
  140. if (!vkGetPhysicalDeviceFormatProperties) {
  141. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  142. << "vkGetPhysicalDeviceFormatProperties";
  143. return false;
  144. }
  145. vkGetPhysicalDeviceFormatProperties2 =
  146. reinterpret_cast<PFN_vkGetPhysicalDeviceFormatProperties2>(
  147. vkGetInstanceProcAddr(vk_instance,
  148. "vkGetPhysicalDeviceFormatProperties2"));
  149. if (!vkGetPhysicalDeviceFormatProperties2) {
  150. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  151. << "vkGetPhysicalDeviceFormatProperties2";
  152. return false;
  153. }
  154. vkGetPhysicalDeviceImageFormatProperties2 =
  155. reinterpret_cast<PFN_vkGetPhysicalDeviceImageFormatProperties2>(
  156. vkGetInstanceProcAddr(vk_instance,
  157. "vkGetPhysicalDeviceImageFormatProperties2"));
  158. if (!vkGetPhysicalDeviceImageFormatProperties2) {
  159. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  160. << "vkGetPhysicalDeviceImageFormatProperties2";
  161. return false;
  162. }
  163. vkGetPhysicalDeviceMemoryProperties =
  164. reinterpret_cast<PFN_vkGetPhysicalDeviceMemoryProperties>(
  165. vkGetInstanceProcAddr(vk_instance,
  166. "vkGetPhysicalDeviceMemoryProperties"));
  167. if (!vkGetPhysicalDeviceMemoryProperties) {
  168. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  169. << "vkGetPhysicalDeviceMemoryProperties";
  170. return false;
  171. }
  172. vkGetPhysicalDeviceMemoryProperties2 =
  173. reinterpret_cast<PFN_vkGetPhysicalDeviceMemoryProperties2>(
  174. vkGetInstanceProcAddr(vk_instance,
  175. "vkGetPhysicalDeviceMemoryProperties2"));
  176. if (!vkGetPhysicalDeviceMemoryProperties2) {
  177. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  178. << "vkGetPhysicalDeviceMemoryProperties2";
  179. return false;
  180. }
  181. vkGetPhysicalDeviceProperties =
  182. reinterpret_cast<PFN_vkGetPhysicalDeviceProperties>(
  183. vkGetInstanceProcAddr(vk_instance, "vkGetPhysicalDeviceProperties"));
  184. if (!vkGetPhysicalDeviceProperties) {
  185. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  186. << "vkGetPhysicalDeviceProperties";
  187. return false;
  188. }
  189. vkGetPhysicalDeviceProperties2 =
  190. reinterpret_cast<PFN_vkGetPhysicalDeviceProperties2>(
  191. vkGetInstanceProcAddr(vk_instance, "vkGetPhysicalDeviceProperties2"));
  192. if (!vkGetPhysicalDeviceProperties2) {
  193. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  194. << "vkGetPhysicalDeviceProperties2";
  195. return false;
  196. }
  197. vkGetPhysicalDeviceQueueFamilyProperties =
  198. reinterpret_cast<PFN_vkGetPhysicalDeviceQueueFamilyProperties>(
  199. vkGetInstanceProcAddr(vk_instance,
  200. "vkGetPhysicalDeviceQueueFamilyProperties"));
  201. if (!vkGetPhysicalDeviceQueueFamilyProperties) {
  202. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  203. << "vkGetPhysicalDeviceQueueFamilyProperties";
  204. return false;
  205. }
  206. #if DCHECK_IS_ON()
  207. if (gfx::HasExtension(enabled_extensions,
  208. VK_EXT_DEBUG_REPORT_EXTENSION_NAME)) {
  209. vkCreateDebugReportCallbackEXT =
  210. reinterpret_cast<PFN_vkCreateDebugReportCallbackEXT>(
  211. vkGetInstanceProcAddr(vk_instance,
  212. "vkCreateDebugReportCallbackEXT"));
  213. if (!vkCreateDebugReportCallbackEXT) {
  214. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  215. << "vkCreateDebugReportCallbackEXT";
  216. return false;
  217. }
  218. vkDestroyDebugReportCallbackEXT =
  219. reinterpret_cast<PFN_vkDestroyDebugReportCallbackEXT>(
  220. vkGetInstanceProcAddr(vk_instance,
  221. "vkDestroyDebugReportCallbackEXT"));
  222. if (!vkDestroyDebugReportCallbackEXT) {
  223. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  224. << "vkDestroyDebugReportCallbackEXT";
  225. return false;
  226. }
  227. }
  228. #endif // DCHECK_IS_ON()
  229. if (gfx::HasExtension(enabled_extensions, VK_KHR_SURFACE_EXTENSION_NAME)) {
  230. vkDestroySurfaceKHR = reinterpret_cast<PFN_vkDestroySurfaceKHR>(
  231. vkGetInstanceProcAddr(vk_instance, "vkDestroySurfaceKHR"));
  232. if (!vkDestroySurfaceKHR) {
  233. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  234. << "vkDestroySurfaceKHR";
  235. return false;
  236. }
  237. vkGetPhysicalDeviceSurfaceCapabilitiesKHR =
  238. reinterpret_cast<PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR>(
  239. vkGetInstanceProcAddr(vk_instance,
  240. "vkGetPhysicalDeviceSurfaceCapabilitiesKHR"));
  241. if (!vkGetPhysicalDeviceSurfaceCapabilitiesKHR) {
  242. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  243. << "vkGetPhysicalDeviceSurfaceCapabilitiesKHR";
  244. return false;
  245. }
  246. vkGetPhysicalDeviceSurfaceFormatsKHR =
  247. reinterpret_cast<PFN_vkGetPhysicalDeviceSurfaceFormatsKHR>(
  248. vkGetInstanceProcAddr(vk_instance,
  249. "vkGetPhysicalDeviceSurfaceFormatsKHR"));
  250. if (!vkGetPhysicalDeviceSurfaceFormatsKHR) {
  251. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  252. << "vkGetPhysicalDeviceSurfaceFormatsKHR";
  253. return false;
  254. }
  255. vkGetPhysicalDeviceSurfaceSupportKHR =
  256. reinterpret_cast<PFN_vkGetPhysicalDeviceSurfaceSupportKHR>(
  257. vkGetInstanceProcAddr(vk_instance,
  258. "vkGetPhysicalDeviceSurfaceSupportKHR"));
  259. if (!vkGetPhysicalDeviceSurfaceSupportKHR) {
  260. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  261. << "vkGetPhysicalDeviceSurfaceSupportKHR";
  262. return false;
  263. }
  264. }
  265. if (gfx::HasExtension(enabled_extensions,
  266. VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME)) {
  267. vkCreateHeadlessSurfaceEXT =
  268. reinterpret_cast<PFN_vkCreateHeadlessSurfaceEXT>(
  269. vkGetInstanceProcAddr(vk_instance, "vkCreateHeadlessSurfaceEXT"));
  270. if (!vkCreateHeadlessSurfaceEXT) {
  271. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  272. << "vkCreateHeadlessSurfaceEXT";
  273. return false;
  274. }
  275. }
  276. #if defined(USE_VULKAN_XCB)
  277. if (gfx::HasExtension(enabled_extensions,
  278. VK_KHR_XCB_SURFACE_EXTENSION_NAME)) {
  279. vkCreateXcbSurfaceKHR = reinterpret_cast<PFN_vkCreateXcbSurfaceKHR>(
  280. vkGetInstanceProcAddr(vk_instance, "vkCreateXcbSurfaceKHR"));
  281. if (!vkCreateXcbSurfaceKHR) {
  282. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  283. << "vkCreateXcbSurfaceKHR";
  284. return false;
  285. }
  286. vkGetPhysicalDeviceXcbPresentationSupportKHR =
  287. reinterpret_cast<PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR>(
  288. vkGetInstanceProcAddr(
  289. vk_instance, "vkGetPhysicalDeviceXcbPresentationSupportKHR"));
  290. if (!vkGetPhysicalDeviceXcbPresentationSupportKHR) {
  291. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  292. << "vkGetPhysicalDeviceXcbPresentationSupportKHR";
  293. return false;
  294. }
  295. }
  296. #endif // defined(USE_VULKAN_XCB)
  297. #if BUILDFLAG(IS_WIN)
  298. if (gfx::HasExtension(enabled_extensions,
  299. VK_KHR_WIN32_SURFACE_EXTENSION_NAME)) {
  300. vkCreateWin32SurfaceKHR = reinterpret_cast<PFN_vkCreateWin32SurfaceKHR>(
  301. vkGetInstanceProcAddr(vk_instance, "vkCreateWin32SurfaceKHR"));
  302. if (!vkCreateWin32SurfaceKHR) {
  303. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  304. << "vkCreateWin32SurfaceKHR";
  305. return false;
  306. }
  307. vkGetPhysicalDeviceWin32PresentationSupportKHR =
  308. reinterpret_cast<PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR>(
  309. vkGetInstanceProcAddr(
  310. vk_instance, "vkGetPhysicalDeviceWin32PresentationSupportKHR"));
  311. if (!vkGetPhysicalDeviceWin32PresentationSupportKHR) {
  312. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  313. << "vkGetPhysicalDeviceWin32PresentationSupportKHR";
  314. return false;
  315. }
  316. }
  317. #endif // BUILDFLAG(IS_WIN)
  318. #if BUILDFLAG(IS_ANDROID)
  319. if (gfx::HasExtension(enabled_extensions,
  320. VK_KHR_ANDROID_SURFACE_EXTENSION_NAME)) {
  321. vkCreateAndroidSurfaceKHR = reinterpret_cast<PFN_vkCreateAndroidSurfaceKHR>(
  322. vkGetInstanceProcAddr(vk_instance, "vkCreateAndroidSurfaceKHR"));
  323. if (!vkCreateAndroidSurfaceKHR) {
  324. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  325. << "vkCreateAndroidSurfaceKHR";
  326. return false;
  327. }
  328. }
  329. #endif // BUILDFLAG(IS_ANDROID)
  330. #if BUILDFLAG(IS_FUCHSIA)
  331. if (gfx::HasExtension(enabled_extensions,
  332. VK_FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME)) {
  333. vkCreateImagePipeSurfaceFUCHSIA =
  334. reinterpret_cast<PFN_vkCreateImagePipeSurfaceFUCHSIA>(
  335. vkGetInstanceProcAddr(vk_instance,
  336. "vkCreateImagePipeSurfaceFUCHSIA"));
  337. if (!vkCreateImagePipeSurfaceFUCHSIA) {
  338. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  339. << "vkCreateImagePipeSurfaceFUCHSIA";
  340. return false;
  341. }
  342. }
  343. #endif // BUILDFLAG(IS_FUCHSIA)
  344. return true;
  345. }
  346. bool VulkanFunctionPointers::BindDeviceFunctionPointers(
  347. VkDevice vk_device,
  348. uint32_t api_version,
  349. const gfx::ExtensionSet& enabled_extensions) {
  350. DCHECK_GE(api_version, kVulkanRequiredApiVersion);
  351. base::AutoLock lock(write_lock_);
  352. // Device functions
  353. vkAllocateCommandBuffers = reinterpret_cast<PFN_vkAllocateCommandBuffers>(
  354. vkGetDeviceProcAddr(vk_device, "vkAllocateCommandBuffers"));
  355. if (!vkAllocateCommandBuffers) {
  356. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  357. << "vkAllocateCommandBuffers";
  358. return false;
  359. }
  360. vkAllocateDescriptorSets = reinterpret_cast<PFN_vkAllocateDescriptorSets>(
  361. vkGetDeviceProcAddr(vk_device, "vkAllocateDescriptorSets"));
  362. if (!vkAllocateDescriptorSets) {
  363. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  364. << "vkAllocateDescriptorSets";
  365. return false;
  366. }
  367. vkAllocateMemory = reinterpret_cast<PFN_vkAllocateMemory>(
  368. vkGetDeviceProcAddr(vk_device, "vkAllocateMemory"));
  369. if (!vkAllocateMemory) {
  370. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  371. << "vkAllocateMemory";
  372. return false;
  373. }
  374. vkBeginCommandBuffer = reinterpret_cast<PFN_vkBeginCommandBuffer>(
  375. vkGetDeviceProcAddr(vk_device, "vkBeginCommandBuffer"));
  376. if (!vkBeginCommandBuffer) {
  377. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  378. << "vkBeginCommandBuffer";
  379. return false;
  380. }
  381. vkBindBufferMemory = reinterpret_cast<PFN_vkBindBufferMemory>(
  382. vkGetDeviceProcAddr(vk_device, "vkBindBufferMemory"));
  383. if (!vkBindBufferMemory) {
  384. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  385. << "vkBindBufferMemory";
  386. return false;
  387. }
  388. vkBindBufferMemory2 = reinterpret_cast<PFN_vkBindBufferMemory2>(
  389. vkGetDeviceProcAddr(vk_device, "vkBindBufferMemory2"));
  390. if (!vkBindBufferMemory2) {
  391. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  392. << "vkBindBufferMemory2";
  393. return false;
  394. }
  395. vkBindImageMemory = reinterpret_cast<PFN_vkBindImageMemory>(
  396. vkGetDeviceProcAddr(vk_device, "vkBindImageMemory"));
  397. if (!vkBindImageMemory) {
  398. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  399. << "vkBindImageMemory";
  400. return false;
  401. }
  402. vkBindImageMemory2 = reinterpret_cast<PFN_vkBindImageMemory2>(
  403. vkGetDeviceProcAddr(vk_device, "vkBindImageMemory2"));
  404. if (!vkBindImageMemory2) {
  405. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  406. << "vkBindImageMemory2";
  407. return false;
  408. }
  409. vkCmdBeginRenderPass = reinterpret_cast<PFN_vkCmdBeginRenderPass>(
  410. vkGetDeviceProcAddr(vk_device, "vkCmdBeginRenderPass"));
  411. if (!vkCmdBeginRenderPass) {
  412. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  413. << "vkCmdBeginRenderPass";
  414. return false;
  415. }
  416. vkCmdCopyBuffer = reinterpret_cast<PFN_vkCmdCopyBuffer>(
  417. vkGetDeviceProcAddr(vk_device, "vkCmdCopyBuffer"));
  418. if (!vkCmdCopyBuffer) {
  419. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  420. << "vkCmdCopyBuffer";
  421. return false;
  422. }
  423. vkCmdCopyBufferToImage = reinterpret_cast<PFN_vkCmdCopyBufferToImage>(
  424. vkGetDeviceProcAddr(vk_device, "vkCmdCopyBufferToImage"));
  425. if (!vkCmdCopyBufferToImage) {
  426. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  427. << "vkCmdCopyBufferToImage";
  428. return false;
  429. }
  430. vkCmdCopyImageToBuffer = reinterpret_cast<PFN_vkCmdCopyImageToBuffer>(
  431. vkGetDeviceProcAddr(vk_device, "vkCmdCopyImageToBuffer"));
  432. if (!vkCmdCopyImageToBuffer) {
  433. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  434. << "vkCmdCopyImageToBuffer";
  435. return false;
  436. }
  437. vkCmdEndRenderPass = reinterpret_cast<PFN_vkCmdEndRenderPass>(
  438. vkGetDeviceProcAddr(vk_device, "vkCmdEndRenderPass"));
  439. if (!vkCmdEndRenderPass) {
  440. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  441. << "vkCmdEndRenderPass";
  442. return false;
  443. }
  444. vkCmdExecuteCommands = reinterpret_cast<PFN_vkCmdExecuteCommands>(
  445. vkGetDeviceProcAddr(vk_device, "vkCmdExecuteCommands"));
  446. if (!vkCmdExecuteCommands) {
  447. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  448. << "vkCmdExecuteCommands";
  449. return false;
  450. }
  451. vkCmdNextSubpass = reinterpret_cast<PFN_vkCmdNextSubpass>(
  452. vkGetDeviceProcAddr(vk_device, "vkCmdNextSubpass"));
  453. if (!vkCmdNextSubpass) {
  454. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  455. << "vkCmdNextSubpass";
  456. return false;
  457. }
  458. vkCmdPipelineBarrier = reinterpret_cast<PFN_vkCmdPipelineBarrier>(
  459. vkGetDeviceProcAddr(vk_device, "vkCmdPipelineBarrier"));
  460. if (!vkCmdPipelineBarrier) {
  461. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  462. << "vkCmdPipelineBarrier";
  463. return false;
  464. }
  465. vkCreateBuffer = reinterpret_cast<PFN_vkCreateBuffer>(
  466. vkGetDeviceProcAddr(vk_device, "vkCreateBuffer"));
  467. if (!vkCreateBuffer) {
  468. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  469. << "vkCreateBuffer";
  470. return false;
  471. }
  472. vkCreateCommandPool = reinterpret_cast<PFN_vkCreateCommandPool>(
  473. vkGetDeviceProcAddr(vk_device, "vkCreateCommandPool"));
  474. if (!vkCreateCommandPool) {
  475. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  476. << "vkCreateCommandPool";
  477. return false;
  478. }
  479. vkCreateDescriptorPool = reinterpret_cast<PFN_vkCreateDescriptorPool>(
  480. vkGetDeviceProcAddr(vk_device, "vkCreateDescriptorPool"));
  481. if (!vkCreateDescriptorPool) {
  482. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  483. << "vkCreateDescriptorPool";
  484. return false;
  485. }
  486. vkCreateDescriptorSetLayout =
  487. reinterpret_cast<PFN_vkCreateDescriptorSetLayout>(
  488. vkGetDeviceProcAddr(vk_device, "vkCreateDescriptorSetLayout"));
  489. if (!vkCreateDescriptorSetLayout) {
  490. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  491. << "vkCreateDescriptorSetLayout";
  492. return false;
  493. }
  494. vkCreateFence = reinterpret_cast<PFN_vkCreateFence>(
  495. vkGetDeviceProcAddr(vk_device, "vkCreateFence"));
  496. if (!vkCreateFence) {
  497. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  498. << "vkCreateFence";
  499. return false;
  500. }
  501. vkCreateFramebuffer = reinterpret_cast<PFN_vkCreateFramebuffer>(
  502. vkGetDeviceProcAddr(vk_device, "vkCreateFramebuffer"));
  503. if (!vkCreateFramebuffer) {
  504. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  505. << "vkCreateFramebuffer";
  506. return false;
  507. }
  508. vkCreateGraphicsPipelines = reinterpret_cast<PFN_vkCreateGraphicsPipelines>(
  509. vkGetDeviceProcAddr(vk_device, "vkCreateGraphicsPipelines"));
  510. if (!vkCreateGraphicsPipelines) {
  511. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  512. << "vkCreateGraphicsPipelines";
  513. return false;
  514. }
  515. vkCreateImage = reinterpret_cast<PFN_vkCreateImage>(
  516. vkGetDeviceProcAddr(vk_device, "vkCreateImage"));
  517. if (!vkCreateImage) {
  518. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  519. << "vkCreateImage";
  520. return false;
  521. }
  522. vkCreateImageView = reinterpret_cast<PFN_vkCreateImageView>(
  523. vkGetDeviceProcAddr(vk_device, "vkCreateImageView"));
  524. if (!vkCreateImageView) {
  525. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  526. << "vkCreateImageView";
  527. return false;
  528. }
  529. vkCreateRenderPass = reinterpret_cast<PFN_vkCreateRenderPass>(
  530. vkGetDeviceProcAddr(vk_device, "vkCreateRenderPass"));
  531. if (!vkCreateRenderPass) {
  532. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  533. << "vkCreateRenderPass";
  534. return false;
  535. }
  536. vkCreateSampler = reinterpret_cast<PFN_vkCreateSampler>(
  537. vkGetDeviceProcAddr(vk_device, "vkCreateSampler"));
  538. if (!vkCreateSampler) {
  539. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  540. << "vkCreateSampler";
  541. return false;
  542. }
  543. vkCreateSemaphore = reinterpret_cast<PFN_vkCreateSemaphore>(
  544. vkGetDeviceProcAddr(vk_device, "vkCreateSemaphore"));
  545. if (!vkCreateSemaphore) {
  546. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  547. << "vkCreateSemaphore";
  548. return false;
  549. }
  550. vkCreateShaderModule = reinterpret_cast<PFN_vkCreateShaderModule>(
  551. vkGetDeviceProcAddr(vk_device, "vkCreateShaderModule"));
  552. if (!vkCreateShaderModule) {
  553. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  554. << "vkCreateShaderModule";
  555. return false;
  556. }
  557. vkDestroyBuffer = reinterpret_cast<PFN_vkDestroyBuffer>(
  558. vkGetDeviceProcAddr(vk_device, "vkDestroyBuffer"));
  559. if (!vkDestroyBuffer) {
  560. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  561. << "vkDestroyBuffer";
  562. return false;
  563. }
  564. vkDestroyCommandPool = reinterpret_cast<PFN_vkDestroyCommandPool>(
  565. vkGetDeviceProcAddr(vk_device, "vkDestroyCommandPool"));
  566. if (!vkDestroyCommandPool) {
  567. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  568. << "vkDestroyCommandPool";
  569. return false;
  570. }
  571. vkDestroyDescriptorPool = reinterpret_cast<PFN_vkDestroyDescriptorPool>(
  572. vkGetDeviceProcAddr(vk_device, "vkDestroyDescriptorPool"));
  573. if (!vkDestroyDescriptorPool) {
  574. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  575. << "vkDestroyDescriptorPool";
  576. return false;
  577. }
  578. vkDestroyDescriptorSetLayout =
  579. reinterpret_cast<PFN_vkDestroyDescriptorSetLayout>(
  580. vkGetDeviceProcAddr(vk_device, "vkDestroyDescriptorSetLayout"));
  581. if (!vkDestroyDescriptorSetLayout) {
  582. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  583. << "vkDestroyDescriptorSetLayout";
  584. return false;
  585. }
  586. vkDestroyDevice = reinterpret_cast<PFN_vkDestroyDevice>(
  587. vkGetDeviceProcAddr(vk_device, "vkDestroyDevice"));
  588. if (!vkDestroyDevice) {
  589. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  590. << "vkDestroyDevice";
  591. return false;
  592. }
  593. vkDestroyFence = reinterpret_cast<PFN_vkDestroyFence>(
  594. vkGetDeviceProcAddr(vk_device, "vkDestroyFence"));
  595. if (!vkDestroyFence) {
  596. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  597. << "vkDestroyFence";
  598. return false;
  599. }
  600. vkDestroyFramebuffer = reinterpret_cast<PFN_vkDestroyFramebuffer>(
  601. vkGetDeviceProcAddr(vk_device, "vkDestroyFramebuffer"));
  602. if (!vkDestroyFramebuffer) {
  603. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  604. << "vkDestroyFramebuffer";
  605. return false;
  606. }
  607. vkDestroyImage = reinterpret_cast<PFN_vkDestroyImage>(
  608. vkGetDeviceProcAddr(vk_device, "vkDestroyImage"));
  609. if (!vkDestroyImage) {
  610. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  611. << "vkDestroyImage";
  612. return false;
  613. }
  614. vkDestroyImageView = reinterpret_cast<PFN_vkDestroyImageView>(
  615. vkGetDeviceProcAddr(vk_device, "vkDestroyImageView"));
  616. if (!vkDestroyImageView) {
  617. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  618. << "vkDestroyImageView";
  619. return false;
  620. }
  621. vkDestroyRenderPass = reinterpret_cast<PFN_vkDestroyRenderPass>(
  622. vkGetDeviceProcAddr(vk_device, "vkDestroyRenderPass"));
  623. if (!vkDestroyRenderPass) {
  624. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  625. << "vkDestroyRenderPass";
  626. return false;
  627. }
  628. vkDestroySampler = reinterpret_cast<PFN_vkDestroySampler>(
  629. vkGetDeviceProcAddr(vk_device, "vkDestroySampler"));
  630. if (!vkDestroySampler) {
  631. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  632. << "vkDestroySampler";
  633. return false;
  634. }
  635. vkDestroySemaphore = reinterpret_cast<PFN_vkDestroySemaphore>(
  636. vkGetDeviceProcAddr(vk_device, "vkDestroySemaphore"));
  637. if (!vkDestroySemaphore) {
  638. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  639. << "vkDestroySemaphore";
  640. return false;
  641. }
  642. vkDestroyShaderModule = reinterpret_cast<PFN_vkDestroyShaderModule>(
  643. vkGetDeviceProcAddr(vk_device, "vkDestroyShaderModule"));
  644. if (!vkDestroyShaderModule) {
  645. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  646. << "vkDestroyShaderModule";
  647. return false;
  648. }
  649. vkDeviceWaitIdle = reinterpret_cast<PFN_vkDeviceWaitIdle>(
  650. vkGetDeviceProcAddr(vk_device, "vkDeviceWaitIdle"));
  651. if (!vkDeviceWaitIdle) {
  652. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  653. << "vkDeviceWaitIdle";
  654. return false;
  655. }
  656. vkFlushMappedMemoryRanges = reinterpret_cast<PFN_vkFlushMappedMemoryRanges>(
  657. vkGetDeviceProcAddr(vk_device, "vkFlushMappedMemoryRanges"));
  658. if (!vkFlushMappedMemoryRanges) {
  659. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  660. << "vkFlushMappedMemoryRanges";
  661. return false;
  662. }
  663. vkEndCommandBuffer = reinterpret_cast<PFN_vkEndCommandBuffer>(
  664. vkGetDeviceProcAddr(vk_device, "vkEndCommandBuffer"));
  665. if (!vkEndCommandBuffer) {
  666. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  667. << "vkEndCommandBuffer";
  668. return false;
  669. }
  670. vkFreeCommandBuffers = reinterpret_cast<PFN_vkFreeCommandBuffers>(
  671. vkGetDeviceProcAddr(vk_device, "vkFreeCommandBuffers"));
  672. if (!vkFreeCommandBuffers) {
  673. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  674. << "vkFreeCommandBuffers";
  675. return false;
  676. }
  677. vkFreeDescriptorSets = reinterpret_cast<PFN_vkFreeDescriptorSets>(
  678. vkGetDeviceProcAddr(vk_device, "vkFreeDescriptorSets"));
  679. if (!vkFreeDescriptorSets) {
  680. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  681. << "vkFreeDescriptorSets";
  682. return false;
  683. }
  684. vkFreeMemory = reinterpret_cast<PFN_vkFreeMemory>(
  685. vkGetDeviceProcAddr(vk_device, "vkFreeMemory"));
  686. if (!vkFreeMemory) {
  687. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  688. << "vkFreeMemory";
  689. return false;
  690. }
  691. vkInvalidateMappedMemoryRanges =
  692. reinterpret_cast<PFN_vkInvalidateMappedMemoryRanges>(
  693. vkGetDeviceProcAddr(vk_device, "vkInvalidateMappedMemoryRanges"));
  694. if (!vkInvalidateMappedMemoryRanges) {
  695. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  696. << "vkInvalidateMappedMemoryRanges";
  697. return false;
  698. }
  699. vkGetBufferMemoryRequirements =
  700. reinterpret_cast<PFN_vkGetBufferMemoryRequirements>(
  701. vkGetDeviceProcAddr(vk_device, "vkGetBufferMemoryRequirements"));
  702. if (!vkGetBufferMemoryRequirements) {
  703. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  704. << "vkGetBufferMemoryRequirements";
  705. return false;
  706. }
  707. vkGetBufferMemoryRequirements2 =
  708. reinterpret_cast<PFN_vkGetBufferMemoryRequirements2>(
  709. vkGetDeviceProcAddr(vk_device, "vkGetBufferMemoryRequirements2"));
  710. if (!vkGetBufferMemoryRequirements2) {
  711. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  712. << "vkGetBufferMemoryRequirements2";
  713. return false;
  714. }
  715. vkGetDeviceQueue = reinterpret_cast<PFN_vkGetDeviceQueue>(
  716. vkGetDeviceProcAddr(vk_device, "vkGetDeviceQueue"));
  717. if (!vkGetDeviceQueue) {
  718. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  719. << "vkGetDeviceQueue";
  720. return false;
  721. }
  722. vkGetDeviceQueue2 = reinterpret_cast<PFN_vkGetDeviceQueue2>(
  723. vkGetDeviceProcAddr(vk_device, "vkGetDeviceQueue2"));
  724. if (!vkGetDeviceQueue2) {
  725. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  726. << "vkGetDeviceQueue2";
  727. return false;
  728. }
  729. vkGetFenceStatus = reinterpret_cast<PFN_vkGetFenceStatus>(
  730. vkGetDeviceProcAddr(vk_device, "vkGetFenceStatus"));
  731. if (!vkGetFenceStatus) {
  732. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  733. << "vkGetFenceStatus";
  734. return false;
  735. }
  736. vkGetImageMemoryRequirements =
  737. reinterpret_cast<PFN_vkGetImageMemoryRequirements>(
  738. vkGetDeviceProcAddr(vk_device, "vkGetImageMemoryRequirements"));
  739. if (!vkGetImageMemoryRequirements) {
  740. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  741. << "vkGetImageMemoryRequirements";
  742. return false;
  743. }
  744. vkGetImageMemoryRequirements2 =
  745. reinterpret_cast<PFN_vkGetImageMemoryRequirements2>(
  746. vkGetDeviceProcAddr(vk_device, "vkGetImageMemoryRequirements2"));
  747. if (!vkGetImageMemoryRequirements2) {
  748. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  749. << "vkGetImageMemoryRequirements2";
  750. return false;
  751. }
  752. vkGetImageSubresourceLayout =
  753. reinterpret_cast<PFN_vkGetImageSubresourceLayout>(
  754. vkGetDeviceProcAddr(vk_device, "vkGetImageSubresourceLayout"));
  755. if (!vkGetImageSubresourceLayout) {
  756. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  757. << "vkGetImageSubresourceLayout";
  758. return false;
  759. }
  760. vkMapMemory = reinterpret_cast<PFN_vkMapMemory>(
  761. vkGetDeviceProcAddr(vk_device, "vkMapMemory"));
  762. if (!vkMapMemory) {
  763. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  764. << "vkMapMemory";
  765. return false;
  766. }
  767. vkQueueSubmit = reinterpret_cast<PFN_vkQueueSubmit>(
  768. vkGetDeviceProcAddr(vk_device, "vkQueueSubmit"));
  769. if (!vkQueueSubmit) {
  770. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  771. << "vkQueueSubmit";
  772. return false;
  773. }
  774. vkQueueWaitIdle = reinterpret_cast<PFN_vkQueueWaitIdle>(
  775. vkGetDeviceProcAddr(vk_device, "vkQueueWaitIdle"));
  776. if (!vkQueueWaitIdle) {
  777. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  778. << "vkQueueWaitIdle";
  779. return false;
  780. }
  781. vkResetCommandBuffer = reinterpret_cast<PFN_vkResetCommandBuffer>(
  782. vkGetDeviceProcAddr(vk_device, "vkResetCommandBuffer"));
  783. if (!vkResetCommandBuffer) {
  784. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  785. << "vkResetCommandBuffer";
  786. return false;
  787. }
  788. vkResetFences = reinterpret_cast<PFN_vkResetFences>(
  789. vkGetDeviceProcAddr(vk_device, "vkResetFences"));
  790. if (!vkResetFences) {
  791. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  792. << "vkResetFences";
  793. return false;
  794. }
  795. vkUnmapMemory = reinterpret_cast<PFN_vkUnmapMemory>(
  796. vkGetDeviceProcAddr(vk_device, "vkUnmapMemory"));
  797. if (!vkUnmapMemory) {
  798. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  799. << "vkUnmapMemory";
  800. return false;
  801. }
  802. vkUpdateDescriptorSets = reinterpret_cast<PFN_vkUpdateDescriptorSets>(
  803. vkGetDeviceProcAddr(vk_device, "vkUpdateDescriptorSets"));
  804. if (!vkUpdateDescriptorSets) {
  805. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  806. << "vkUpdateDescriptorSets";
  807. return false;
  808. }
  809. vkWaitForFences = reinterpret_cast<PFN_vkWaitForFences>(
  810. vkGetDeviceProcAddr(vk_device, "vkWaitForFences"));
  811. if (!vkWaitForFences) {
  812. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  813. << "vkWaitForFences";
  814. return false;
  815. }
  816. #if BUILDFLAG(IS_ANDROID)
  817. if (gfx::HasExtension(
  818. enabled_extensions,
  819. VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME)) {
  820. vkGetAndroidHardwareBufferPropertiesANDROID =
  821. reinterpret_cast<PFN_vkGetAndroidHardwareBufferPropertiesANDROID>(
  822. vkGetDeviceProcAddr(vk_device,
  823. "vkGetAndroidHardwareBufferPropertiesANDROID"));
  824. if (!vkGetAndroidHardwareBufferPropertiesANDROID) {
  825. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  826. << "vkGetAndroidHardwareBufferPropertiesANDROID";
  827. return false;
  828. }
  829. }
  830. #endif // BUILDFLAG(IS_ANDROID)
  831. #if BUILDFLAG(IS_POSIX)
  832. if (gfx::HasExtension(enabled_extensions,
  833. VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME)) {
  834. vkGetSemaphoreFdKHR = reinterpret_cast<PFN_vkGetSemaphoreFdKHR>(
  835. vkGetDeviceProcAddr(vk_device, "vkGetSemaphoreFdKHR"));
  836. if (!vkGetSemaphoreFdKHR) {
  837. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  838. << "vkGetSemaphoreFdKHR";
  839. return false;
  840. }
  841. vkImportSemaphoreFdKHR = reinterpret_cast<PFN_vkImportSemaphoreFdKHR>(
  842. vkGetDeviceProcAddr(vk_device, "vkImportSemaphoreFdKHR"));
  843. if (!vkImportSemaphoreFdKHR) {
  844. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  845. << "vkImportSemaphoreFdKHR";
  846. return false;
  847. }
  848. }
  849. #endif // BUILDFLAG(IS_POSIX)
  850. #if BUILDFLAG(IS_WIN)
  851. if (gfx::HasExtension(enabled_extensions,
  852. VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME)) {
  853. vkGetSemaphoreWin32HandleKHR =
  854. reinterpret_cast<PFN_vkGetSemaphoreWin32HandleKHR>(
  855. vkGetDeviceProcAddr(vk_device, "vkGetSemaphoreWin32HandleKHR"));
  856. if (!vkGetSemaphoreWin32HandleKHR) {
  857. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  858. << "vkGetSemaphoreWin32HandleKHR";
  859. return false;
  860. }
  861. vkImportSemaphoreWin32HandleKHR =
  862. reinterpret_cast<PFN_vkImportSemaphoreWin32HandleKHR>(
  863. vkGetDeviceProcAddr(vk_device, "vkImportSemaphoreWin32HandleKHR"));
  864. if (!vkImportSemaphoreWin32HandleKHR) {
  865. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  866. << "vkImportSemaphoreWin32HandleKHR";
  867. return false;
  868. }
  869. }
  870. #endif // BUILDFLAG(IS_WIN)
  871. #if BUILDFLAG(IS_POSIX)
  872. if (gfx::HasExtension(enabled_extensions,
  873. VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME)) {
  874. vkGetMemoryFdKHR = reinterpret_cast<PFN_vkGetMemoryFdKHR>(
  875. vkGetDeviceProcAddr(vk_device, "vkGetMemoryFdKHR"));
  876. if (!vkGetMemoryFdKHR) {
  877. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  878. << "vkGetMemoryFdKHR";
  879. return false;
  880. }
  881. vkGetMemoryFdPropertiesKHR =
  882. reinterpret_cast<PFN_vkGetMemoryFdPropertiesKHR>(
  883. vkGetDeviceProcAddr(vk_device, "vkGetMemoryFdPropertiesKHR"));
  884. if (!vkGetMemoryFdPropertiesKHR) {
  885. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  886. << "vkGetMemoryFdPropertiesKHR";
  887. return false;
  888. }
  889. }
  890. #endif // BUILDFLAG(IS_POSIX)
  891. #if BUILDFLAG(IS_WIN)
  892. if (gfx::HasExtension(enabled_extensions,
  893. VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME)) {
  894. vkGetMemoryWin32HandleKHR = reinterpret_cast<PFN_vkGetMemoryWin32HandleKHR>(
  895. vkGetDeviceProcAddr(vk_device, "vkGetMemoryWin32HandleKHR"));
  896. if (!vkGetMemoryWin32HandleKHR) {
  897. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  898. << "vkGetMemoryWin32HandleKHR";
  899. return false;
  900. }
  901. vkGetMemoryWin32HandlePropertiesKHR =
  902. reinterpret_cast<PFN_vkGetMemoryWin32HandlePropertiesKHR>(
  903. vkGetDeviceProcAddr(vk_device,
  904. "vkGetMemoryWin32HandlePropertiesKHR"));
  905. if (!vkGetMemoryWin32HandlePropertiesKHR) {
  906. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  907. << "vkGetMemoryWin32HandlePropertiesKHR";
  908. return false;
  909. }
  910. }
  911. #endif // BUILDFLAG(IS_WIN)
  912. #if BUILDFLAG(IS_FUCHSIA)
  913. if (gfx::HasExtension(enabled_extensions,
  914. VK_FUCHSIA_EXTERNAL_SEMAPHORE_EXTENSION_NAME)) {
  915. vkImportSemaphoreZirconHandleFUCHSIA =
  916. reinterpret_cast<PFN_vkImportSemaphoreZirconHandleFUCHSIA>(
  917. vkGetDeviceProcAddr(vk_device,
  918. "vkImportSemaphoreZirconHandleFUCHSIA"));
  919. if (!vkImportSemaphoreZirconHandleFUCHSIA) {
  920. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  921. << "vkImportSemaphoreZirconHandleFUCHSIA";
  922. return false;
  923. }
  924. vkGetSemaphoreZirconHandleFUCHSIA =
  925. reinterpret_cast<PFN_vkGetSemaphoreZirconHandleFUCHSIA>(
  926. vkGetDeviceProcAddr(vk_device,
  927. "vkGetSemaphoreZirconHandleFUCHSIA"));
  928. if (!vkGetSemaphoreZirconHandleFUCHSIA) {
  929. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  930. << "vkGetSemaphoreZirconHandleFUCHSIA";
  931. return false;
  932. }
  933. }
  934. #endif // BUILDFLAG(IS_FUCHSIA)
  935. #if BUILDFLAG(IS_FUCHSIA)
  936. if (gfx::HasExtension(enabled_extensions,
  937. VK_FUCHSIA_EXTERNAL_MEMORY_EXTENSION_NAME)) {
  938. vkGetMemoryZirconHandleFUCHSIA =
  939. reinterpret_cast<PFN_vkGetMemoryZirconHandleFUCHSIA>(
  940. vkGetDeviceProcAddr(vk_device, "vkGetMemoryZirconHandleFUCHSIA"));
  941. if (!vkGetMemoryZirconHandleFUCHSIA) {
  942. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  943. << "vkGetMemoryZirconHandleFUCHSIA";
  944. return false;
  945. }
  946. }
  947. #endif // BUILDFLAG(IS_FUCHSIA)
  948. #if BUILDFLAG(IS_FUCHSIA)
  949. if (gfx::HasExtension(enabled_extensions,
  950. VK_FUCHSIA_BUFFER_COLLECTION_EXTENSION_NAME)) {
  951. vkCreateBufferCollectionFUCHSIA =
  952. reinterpret_cast<PFN_vkCreateBufferCollectionFUCHSIA>(
  953. vkGetDeviceProcAddr(vk_device, "vkCreateBufferCollectionFUCHSIA"));
  954. if (!vkCreateBufferCollectionFUCHSIA) {
  955. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  956. << "vkCreateBufferCollectionFUCHSIA";
  957. return false;
  958. }
  959. vkSetBufferCollectionImageConstraintsFUCHSIA =
  960. reinterpret_cast<PFN_vkSetBufferCollectionImageConstraintsFUCHSIA>(
  961. vkGetDeviceProcAddr(
  962. vk_device, "vkSetBufferCollectionImageConstraintsFUCHSIA"));
  963. if (!vkSetBufferCollectionImageConstraintsFUCHSIA) {
  964. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  965. << "vkSetBufferCollectionImageConstraintsFUCHSIA";
  966. return false;
  967. }
  968. vkGetBufferCollectionPropertiesFUCHSIA =
  969. reinterpret_cast<PFN_vkGetBufferCollectionPropertiesFUCHSIA>(
  970. vkGetDeviceProcAddr(vk_device,
  971. "vkGetBufferCollectionPropertiesFUCHSIA"));
  972. if (!vkGetBufferCollectionPropertiesFUCHSIA) {
  973. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  974. << "vkGetBufferCollectionPropertiesFUCHSIA";
  975. return false;
  976. }
  977. vkDestroyBufferCollectionFUCHSIA =
  978. reinterpret_cast<PFN_vkDestroyBufferCollectionFUCHSIA>(
  979. vkGetDeviceProcAddr(vk_device, "vkDestroyBufferCollectionFUCHSIA"));
  980. if (!vkDestroyBufferCollectionFUCHSIA) {
  981. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  982. << "vkDestroyBufferCollectionFUCHSIA";
  983. return false;
  984. }
  985. }
  986. #endif // BUILDFLAG(IS_FUCHSIA)
  987. if (gfx::HasExtension(enabled_extensions, VK_KHR_SWAPCHAIN_EXTENSION_NAME)) {
  988. vkAcquireNextImageKHR = reinterpret_cast<PFN_vkAcquireNextImageKHR>(
  989. vkGetDeviceProcAddr(vk_device, "vkAcquireNextImageKHR"));
  990. if (!vkAcquireNextImageKHR) {
  991. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  992. << "vkAcquireNextImageKHR";
  993. return false;
  994. }
  995. vkCreateSwapchainKHR = reinterpret_cast<PFN_vkCreateSwapchainKHR>(
  996. vkGetDeviceProcAddr(vk_device, "vkCreateSwapchainKHR"));
  997. if (!vkCreateSwapchainKHR) {
  998. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  999. << "vkCreateSwapchainKHR";
  1000. return false;
  1001. }
  1002. vkDestroySwapchainKHR = reinterpret_cast<PFN_vkDestroySwapchainKHR>(
  1003. vkGetDeviceProcAddr(vk_device, "vkDestroySwapchainKHR"));
  1004. if (!vkDestroySwapchainKHR) {
  1005. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  1006. << "vkDestroySwapchainKHR";
  1007. return false;
  1008. }
  1009. vkGetSwapchainImagesKHR = reinterpret_cast<PFN_vkGetSwapchainImagesKHR>(
  1010. vkGetDeviceProcAddr(vk_device, "vkGetSwapchainImagesKHR"));
  1011. if (!vkGetSwapchainImagesKHR) {
  1012. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  1013. << "vkGetSwapchainImagesKHR";
  1014. return false;
  1015. }
  1016. vkQueuePresentKHR = reinterpret_cast<PFN_vkQueuePresentKHR>(
  1017. vkGetDeviceProcAddr(vk_device, "vkQueuePresentKHR"));
  1018. if (!vkQueuePresentKHR) {
  1019. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  1020. << "vkQueuePresentKHR";
  1021. return false;
  1022. }
  1023. }
  1024. #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
  1025. if (gfx::HasExtension(enabled_extensions,
  1026. VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME)) {
  1027. vkGetImageDrmFormatModifierPropertiesEXT =
  1028. reinterpret_cast<PFN_vkGetImageDrmFormatModifierPropertiesEXT>(
  1029. vkGetDeviceProcAddr(vk_device,
  1030. "vkGetImageDrmFormatModifierPropertiesEXT"));
  1031. if (!vkGetImageDrmFormatModifierPropertiesEXT) {
  1032. DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
  1033. << "vkGetImageDrmFormatModifierPropertiesEXT";
  1034. return false;
  1035. }
  1036. }
  1037. #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
  1038. return true;
  1039. }
  1040. } // namespace gpu