vkGetInstanceProcAddr
和vkGetDeviceProcAddr
從API documentation中完全丟失。然而,他們需要使用交換鏈來執行命令(從而生成任何有意義的Vulkan應用程序)。此外,SDK附帶的立方體/三重演示使用它們非常不一致。Vulkan:vkGetInstanceProcAddress和vkGetDeviceProcAddress之間的區別
這兩種方法是否可以互換,如果不能,有什麼區別?
vkGetInstanceProcAddr
和vkGetDeviceProcAddr
從API documentation中完全丟失。然而,他們需要使用交換鏈來執行命令(從而生成任何有意義的Vulkan應用程序)。此外,SDK附帶的立方體/三重演示使用它們非常不一致。Vulkan:vkGetInstanceProcAddress和vkGetDeviceProcAddress之間的區別
這兩種方法是否可以互換,如果不能,有什麼區別?
vkGetInstanceProcAddress
是獲取函數指針,將始終從傳入的情況下創建的任何設備工作。
然而函數返回可以包括可能或可能不會被啓用調度邏輯(通常以考慮擴展對於設備)可能會減慢通話。這就是爲什麼vkGetDeviceProcAddress
存在以獲得沒有調度邏輯的功能。你沒有義務使用它們,但它可能有助於獲得一些額外的速度。
,這是特別明顯的,當你已激活幾層:
隨着設備特定的功能的指針的最終調度可以被移除:從khonos loader and layer interface document
如果您只使用1個設備那麼應用程序的操作順序將爲:
從平臺/加載程序獲取vkGetInstanceProcAddress
。
加載vkCreateInstance
從它和擴展和圖層查詢。 (使用null作爲實例參數)
創建實例。 (您將使用此作爲加載其他功能的第一個參數)
加載vkEnumeratePhysicalDevices
並且與查詢設備相關。
用vkCreateDevice
創建設備,指定所需的擴展名。
將您需要的所有其他功能加載到vkGetDeviceProcAddress
並將設備作爲第一個參數傳遞。
以上回答是正確的。我將補充說,對於WSI擴展,Windows,Linux和Android加載器都表示他們將導出WSI擴展入口點。 因此,在這些平臺上,不需要使用vkGetInstanceProcAddr和vkGetDeviceProcAddr來獲取WSI入口點。但是通常需要通過Vulkan中的vkGet * ProcAddr檢索擴展入口點。
WSI和加載函數指針與另一個無關。 –