2016-02-19 36 views

回答

11

vkGetInstanceProcAddress是獲取函數指針,將始終從傳入的情況下創建的任何設備工作。

然而函數返回可以包括可能或可能不會被啓用調度邏輯(通常以考慮擴展對於設備)可能會減慢通話。這就是爲什麼vkGetDeviceProcAddress存在以獲得沒有調度邏輯的功能。你沒有義務使用它們,但它可能有助於獲得一些額外的速度。

,這是特別明顯的,當你已激活幾層:

enter image description here

隨着設備特定的功能的指針的最終調度可以被移除:從khonos loader and layer interface document

enter image description here
圖像

如果您只使用1個設備那麼應用程序的操作順序將爲:

  1. 從平臺/加載程序獲取vkGetInstanceProcAddress

  2. 加載vkCreateInstance從它和擴展和圖層查詢。 (使用null作爲實例參數)

  3. 創建實例。 (您將使用此作爲加載其他功能的第一個參數)

  4. 加載vkEnumeratePhysicalDevices並且與查詢設備相關。

  5. vkCreateDevice創建設備,指定所需的擴展名。

  6. 將您需要的所有其他功能加載到vkGetDeviceProcAddress並將設備作爲第一個參數傳遞。

1

以上回答是正確的。我將補充說,對於WSI擴展,Windows,Linux和Android加載器都表示他們將導出WSI擴展入口點。 因此,在這些平臺上,不需要使用vkGetInstanceProcAddr和vkGetDeviceProcAddr來獲取WSI入口點。但是通常需要通過Vulkan中的vkGet * ProcAddr檢索擴展入口點。

+0

WSI和加載函數指針與另一個無關。 –