vkGetInstanceProcAddr并且vkGetDeviceProcAddr在API文档中完全遗漏了.但是,他们需要使用交换链执行命令(从而制作任何有意义的Vulkan应用程序).此外,SDK附带的cube/tri演示使用它们非常不一致.
这两种方法是否可以互换,如果没有,有什么区别?
rat*_*eak 13
vkGetInstanceProcAddress 是获取将始终与从传入的实例创建的任何设备一起使用的函数指针.
然而,返回的功能可以包括调度逻辑(通常用于考虑可能或可能不为设备启用的扩展),这可能减慢呼叫的速度.这就是为什么vkGetDeviceProcAddress存在获得没有调度逻辑的功能的原因.您没有义务使用它们,但它可能有助于获得一些额外的速度.
激活多个图层时尤其明显:
使用特定于设备的函数指针,可以删除最终的调度:
如果您只使用1个设备,则应用程序的操作顺序为:
获得vkGetInstanceProcAddress从平台/装载机.
vkCreateInstance从中加载以及扩展和图层查询.(使用null作为实例参数)
创建实例.(您将使用此作为加载其他函数的第一个参数)
加载vkEnumeratePhysicalDevices并与查询设备相关.
创建设备并vkCreateDevice指定所需的扩展名.
加载您需要的所有其他功能并将vkGetDeviceProcAddress设备作为第一个参数传递.