2017-08-24 122 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