为了开始学习vulkan,我想确保我了解程序是如何调用和实际使用vulkan的。所以我知道开发人员要开始下载vulkan头文件或vulkan SDK包,其中包括官方的Khronos vulkan头文件。我下载了SDK,在那里我找到了vulkan头文件,我还将我的程序链接到提供的vulkan-1.lib。我的第一个问题是vulkan-1。Lib是vulkan的实际加载程序库?或者它是某种导入库,在我的Windows系统中搜索实际的vulkan加载程序vulkan-1.dll?然后是vulkan-1.dll它能在我的系统中找到vulkan驱动程序吗?如果有,我可以查看的vulkan驱动程序的标准安装在哪里?
vulkan-1。Lib只是一个用于vulkan-1.dll加载器的链接库。
加载器如何与可安装的客户端驱动程序接口的规范可以在这里找到archive。在Windows上,它将搜索注册表项HKEY_LOCAL_MACHINESystemCurrentControlSetControlClass{Adapter GUID} 00XVulkanDriverName
,以查找包含驱动程序路径的JSON文件的路径。在我的系统上,驱动程序在C:WindowsSystem32DriverStoreFileRepositorynv_dispi.inf_amd64_{some base64 hash}/nvoglv64.dll
中,它代表nvidia OpenGL和Vulkan 64位ICD。它包含OpenGL和Vulkan,因为它们有很多相似之处,最大的是它们都通过gdi32.dll与内核模式显示小端口驱动程序通信。
实际上并没有太多的东西可以看到驱动程序内部,因为它导出的主要内容是vk_icdGetInstanceProcAddr
函数,该函数由加载器用于查询所有驱动程序函数。加载程序将建立调度表来处理调用所有层和驱动程序(直到您选择了一个物理设备,它必须查询每个驱动程序)。在驱动程序内部,它基本上实现了Vulkan中的每个函数,并通过vk_icdGetInstanceProcAddr
函数公开它们。如果你想了解更多关于它的工作,你最好阅读Vulkan Spec存档。