2017-08-24 115 views
-1

据副主题“的应用程序接口加载器”性能最佳的方法来设置福尔康接口下的福尔康SDK文档是我应该使用Vulkan装载机吗?

https://vulkan.lunarg.com/doc/view/1.0.57.0/windows/LoaderAndLayerInterface.html#user-content-best-application-performance-setup

但我不知道如何真正实现这种或有是一个已经做到这一点的图书馆。

作为一个旁注,如果我选择使用加载程序库其中是所有非核心非wsi函数的列表?

回答

0

你应该使用装载机,几乎没有一个好的理由不。最简单的方法是链接到加载器库,但如果您的应用程序可能需要在没有安装Vulkan驱动程序的系统上运行(即使它只需运行足够显示错误消息),那么您应该加载动态加载器库。

即使使用加载器,也可以通过调用通过vkGetDeviceProcAddr获取的函数来获得与未使用加载器相同的性能。当你这样做时,你直接调用驱动程序,装载程序的开销几乎为零。

所有可用的扩展名都在vulkan.h中。扩展命令(函数)按提供它们的扩展名进行排序,因此很容易判断某个命令需要哪个扩展名。你也可以看看spec;附录中列出了每个扩展,并列出了它添加的结构和命令。

+0

所以如果一个函数已经被加载器定义了,我如何使用vkGetDeviceProcAddr从加载器中重载旧的定义 –

+0

某处,无论是作为全局的,结构体的成员等,都声明函数的函数指针:“ PFN_vkCmdDraw MyCmdDraw;“。创建设备后,通过调用vkGetDeviceProcAddr进行设置。然后调用它:“MyCmdDraw(commandBuffer,...);” –

+0

但是,如果我想使用Vulkan.hpp文件,vk :: Device成员函数会调用绘图的常规原型。 同样是使用vkGetDeviceProcAddr这些好canidate功能: vkMapMemory,vkUnMapMemory,vkAcquireNextImageKHR,vkQueueSubmit,vkQueuePresentKHR,vkQueueWaitIdle,vkCmdDrawIndexed –

0

查看Intel教程的first part或Vulkan Cookbook的code samples。它们包含有关如何与Vulkan库连接以及如何动态加载函数指针的信息。

至于扩展名列表 - 你需要所有的扩展名吗?启用所有发布的实例和设备扩展并不是一个好主意,因为它极大地限制了您的代码运行的设备。只需选择扩展您需要为您的项目,在实例和/或设备创建期间启用它们,并且(如有必要)使用上面提供的链接中提供的代码加载它们的功能。

+0

我知道我不需要所有的扩展我只想找到我需要的更容易的格式,而不只是看vulkan.h –

+0

官方规范有一个版本,其中列出并解释所有发布的扩展。 – Ekzuzy