24 {
25 if (getProc == nullptr) {
26 return;
27 }
28
32
33
47
48
168
169
179 1)) {
188 }
189
190
199 }
200
201
208 }
209
210
215 }
216
217
222 }
223
224
230 }
231
232
239 }
240
241
244 }
245
246#ifdef SK_BUILD_FOR_ANDROID
247
252 }
253#endif
254
255}
256
257#ifdef SK_DEBUG
259#else
261#endif
262
263#define RETURN_FALSE_INTERFACE \
264 if (kIsDebug) { SkDebugf("%s:%d VulkanInterface::validate() failed.\n", __FILE__, __LINE__); } \
265 return false;
266
267bool VulkanInterface::validate(uint32_t instanceVersion,
268 uint32_t physicalDeviceVersion,
269 const VulkanExtensions* extensions) const {
270
271 if (nullptr == fFunctions.fCreateInstance ||
272 nullptr == fFunctions.fDestroyInstance ||
273 nullptr == fFunctions.fEnumeratePhysicalDevices ||
274 nullptr == fFunctions.fGetPhysicalDeviceFeatures ||
275 nullptr == fFunctions.fGetPhysicalDeviceFormatProperties ||
276 nullptr == fFunctions.fGetPhysicalDeviceImageFormatProperties ||
277 nullptr == fFunctions.fGetPhysicalDeviceProperties ||
278 nullptr == fFunctions.fGetPhysicalDeviceQueueFamilyProperties ||
279 nullptr == fFunctions.fGetPhysicalDeviceMemoryProperties ||
280 nullptr == fFunctions.fCreateDevice ||
281 nullptr == fFunctions.fDestroyDevice ||
282 nullptr == fFunctions.fEnumerateInstanceExtensionProperties ||
283 nullptr == fFunctions.fEnumerateDeviceExtensionProperties ||
284 nullptr == fFunctions.fEnumerateInstanceLayerProperties ||
285 nullptr == fFunctions.fEnumerateDeviceLayerProperties ||
286 nullptr == fFunctions.fGetDeviceQueue ||
287 nullptr == fFunctions.fQueueSubmit ||
288 nullptr == fFunctions.fQueueWaitIdle ||
289 nullptr == fFunctions.fDeviceWaitIdle ||
290 nullptr == fFunctions.fAllocateMemory ||
291 nullptr == fFunctions.fFreeMemory ||
292 nullptr == fFunctions.fMapMemory ||
293 nullptr == fFunctions.fUnmapMemory ||
294 nullptr == fFunctions.fFlushMappedMemoryRanges ||
295 nullptr == fFunctions.fInvalidateMappedMemoryRanges ||
296 nullptr == fFunctions.fGetDeviceMemoryCommitment ||
297 nullptr == fFunctions.fBindBufferMemory ||
298 nullptr == fFunctions.fBindImageMemory ||
299 nullptr == fFunctions.fGetBufferMemoryRequirements ||
300 nullptr == fFunctions.fGetImageMemoryRequirements ||
301 nullptr == fFunctions.fGetImageSparseMemoryRequirements ||
302 nullptr == fFunctions.fGetPhysicalDeviceSparseImageFormatProperties ||
303 nullptr == fFunctions.fQueueBindSparse ||
304 nullptr == fFunctions.fCreateFence ||
305 nullptr == fFunctions.fDestroyFence ||
306 nullptr == fFunctions.fResetFences ||
307 nullptr == fFunctions.fGetFenceStatus ||
308 nullptr == fFunctions.fWaitForFences ||
309 nullptr == fFunctions.fCreateSemaphore ||
310 nullptr == fFunctions.fDestroySemaphore ||
311 nullptr == fFunctions.fCreateEvent ||
312 nullptr == fFunctions.fDestroyEvent ||
313 nullptr == fFunctions.fGetEventStatus ||
314 nullptr == fFunctions.fSetEvent ||
315 nullptr == fFunctions.fResetEvent ||
316 nullptr == fFunctions.fCreateQueryPool ||
317 nullptr == fFunctions.fDestroyQueryPool ||
318 nullptr == fFunctions.fGetQueryPoolResults ||
319 nullptr == fFunctions.fCreateBuffer ||
320 nullptr == fFunctions.fDestroyBuffer ||
321 nullptr == fFunctions.fCreateBufferView ||
322 nullptr == fFunctions.fDestroyBufferView ||
323 nullptr == fFunctions.fCreateImage ||
324 nullptr == fFunctions.fDestroyImage ||
325 nullptr == fFunctions.fGetImageSubresourceLayout ||
326 nullptr == fFunctions.fCreateImageView ||
327 nullptr == fFunctions.fDestroyImageView ||
328 nullptr == fFunctions.fCreateShaderModule ||
329 nullptr == fFunctions.fDestroyShaderModule ||
330 nullptr == fFunctions.fCreatePipelineCache ||
331 nullptr == fFunctions.fDestroyPipelineCache ||
332 nullptr == fFunctions.fGetPipelineCacheData ||
333 nullptr == fFunctions.fMergePipelineCaches ||
334 nullptr == fFunctions.fCreateGraphicsPipelines ||
335 nullptr == fFunctions.fCreateComputePipelines ||
336 nullptr == fFunctions.fDestroyPipeline ||
337 nullptr == fFunctions.fCreatePipelineLayout ||
338 nullptr == fFunctions.fDestroyPipelineLayout ||
339 nullptr == fFunctions.fCreateSampler ||
340 nullptr == fFunctions.fDestroySampler ||
341 nullptr == fFunctions.fCreateDescriptorSetLayout ||
342 nullptr == fFunctions.fDestroyDescriptorSetLayout ||
343 nullptr == fFunctions.fCreateDescriptorPool ||
344 nullptr == fFunctions.fDestroyDescriptorPool ||
345 nullptr == fFunctions.fResetDescriptorPool ||
346 nullptr == fFunctions.fAllocateDescriptorSets ||
347 nullptr == fFunctions.fFreeDescriptorSets ||
348 nullptr == fFunctions.fUpdateDescriptorSets ||
349 nullptr == fFunctions.fCreateFramebuffer ||
350 nullptr == fFunctions.fDestroyFramebuffer ||
351 nullptr == fFunctions.fCreateRenderPass ||
352 nullptr == fFunctions.fDestroyRenderPass ||
353 nullptr == fFunctions.fGetRenderAreaGranularity ||
354 nullptr == fFunctions.fCreateCommandPool ||
355 nullptr == fFunctions.fDestroyCommandPool ||
356 nullptr == fFunctions.fResetCommandPool ||
357 nullptr == fFunctions.fAllocateCommandBuffers ||
358 nullptr == fFunctions.fFreeCommandBuffers ||
359 nullptr == fFunctions.fBeginCommandBuffer ||
360 nullptr == fFunctions.fEndCommandBuffer ||
361 nullptr == fFunctions.fResetCommandBuffer ||
362 nullptr == fFunctions.fCmdBindPipeline ||
363 nullptr == fFunctions.fCmdSetViewport ||
364 nullptr == fFunctions.fCmdSetScissor ||
365 nullptr == fFunctions.fCmdSetLineWidth ||
366 nullptr == fFunctions.fCmdSetDepthBias ||
367 nullptr == fFunctions.fCmdSetBlendConstants ||
368 nullptr == fFunctions.fCmdSetDepthBounds ||
369 nullptr == fFunctions.fCmdSetStencilCompareMask ||
370 nullptr == fFunctions.fCmdSetStencilWriteMask ||
371 nullptr == fFunctions.fCmdSetStencilReference ||
372 nullptr == fFunctions.fCmdBindDescriptorSets ||
373 nullptr == fFunctions.fCmdBindIndexBuffer ||
374 nullptr == fFunctions.fCmdBindVertexBuffers ||
375 nullptr == fFunctions.fCmdDraw ||
376 nullptr == fFunctions.fCmdDrawIndexed ||
377 nullptr == fFunctions.fCmdDrawIndirect ||
378 nullptr == fFunctions.fCmdDrawIndexedIndirect ||
379 nullptr == fFunctions.fCmdDispatch ||
380 nullptr == fFunctions.fCmdDispatchIndirect ||
381 nullptr == fFunctions.fCmdCopyBuffer ||
382 nullptr == fFunctions.fCmdCopyImage ||
383 nullptr == fFunctions.fCmdBlitImage ||
384 nullptr == fFunctions.fCmdCopyBufferToImage ||
385 nullptr == fFunctions.fCmdCopyImageToBuffer ||
386 nullptr == fFunctions.fCmdUpdateBuffer ||
387 nullptr == fFunctions.fCmdFillBuffer ||
388 nullptr == fFunctions.fCmdClearColorImage ||
389 nullptr == fFunctions.fCmdClearDepthStencilImage ||
390 nullptr == fFunctions.fCmdClearAttachments ||
391 nullptr == fFunctions.fCmdResolveImage ||
392 nullptr == fFunctions.fCmdSetEvent ||
393 nullptr == fFunctions.fCmdResetEvent ||
394 nullptr == fFunctions.fCmdWaitEvents ||
395 nullptr == fFunctions.fCmdPipelineBarrier ||
396 nullptr == fFunctions.fCmdBeginQuery ||
397 nullptr == fFunctions.fCmdEndQuery ||
398 nullptr == fFunctions.fCmdResetQueryPool ||
399 nullptr == fFunctions.fCmdWriteTimestamp ||
400 nullptr == fFunctions.fCmdCopyQueryPoolResults ||
401 nullptr == fFunctions.fCmdPushConstants ||
402 nullptr == fFunctions.fCmdBeginRenderPass ||
403 nullptr == fFunctions.fCmdNextSubpass ||
404 nullptr == fFunctions.fCmdEndRenderPass ||
405 nullptr == fFunctions.fCmdExecuteCommands) {
407 }
408
409
412 if (nullptr == fFunctions.fGetPhysicalDeviceFeatures2 ||
413 nullptr == fFunctions.fGetPhysicalDeviceProperties2 ||
414 nullptr == fFunctions.fGetPhysicalDeviceFormatProperties2 ||
415 nullptr == fFunctions.fGetPhysicalDeviceImageFormatProperties2 ||
416 nullptr == fFunctions.fGetPhysicalDeviceQueueFamilyProperties2 ||
417 nullptr == fFunctions.fGetPhysicalDeviceMemoryProperties2 ||
418 nullptr == fFunctions.fGetPhysicalDeviceSparseImageFormatProperties2) {
420 }
421 }
422
423
426 if (nullptr == fFunctions.fGetImageMemoryRequirements2 ||
427 nullptr == fFunctions.fGetBufferMemoryRequirements2 ||
428 nullptr == fFunctions.fGetImageSparseMemoryRequirements2) {
430 }
431 }
432
433
436 if (nullptr == fFunctions.fBindBufferMemory2 ||
437 nullptr == fFunctions.fBindImageMemory2) {
439 }
440 }
441
442
445 if (nullptr == fFunctions.fTrimCommandPool) {
447 }
448 }
449
450
453 if (nullptr == fFunctions.fGetDescriptorSetLayoutSupport) {
455 }
456 }
457
458
461 if (nullptr == fFunctions.fGetPhysicalDeviceExternalBufferProperties) {
463 }
464 }
465
466
469 if (nullptr == fFunctions.fCreateSamplerYcbcrConversion ||
470 nullptr == fFunctions.fDestroySamplerYcbcrConversion) {
472 }
473 }
474
475#ifdef SK_BUILD_FOR_ANDROID
476
479 if (nullptr == fFunctions.fGetAndroidHardwareBufferProperties ||
480 nullptr == fFunctions.fGetMemoryAndroidHardwareBuffer) {
482 }
483 }
484#endif
485
486 return true;
487}
488
489}
490
#define ACQUIRE_PROC(name, instance, device)
#define ACQUIRE_PROC_SUFFIX(name, suffix, instance, device)
#define RETURN_FALSE_INTERFACE
#define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME
#define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME
#define VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME
#define VK_KHR_MAINTENANCE3_EXTENSION_NAME
#define VK_MAKE_VERSION(major, minor, patch)
#define VK_KHR_MAINTENANCE1_EXTENSION_NAME
#define VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME
#define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
#define VK_EXT_DEVICE_FAULT_EXTENSION_NAME
#define VK_KHR_BIND_MEMORY_2_EXTENSION_NAME