2016-02-19 10 views

Odpowiedz

11

vkGetInstanceProcAddress jest, aby wskaźnik funkcji, które zawsze będzie działać z każdym urządzeniem stworzonym z instancji wydanego w.

Jednak funkcje wrócił może zawierać logikę wysyłki (zazwyczaj do konta dla rozszerzeń, które mogą lub nie mogą być włączone dla urządzenia), które mogą spowolnić połączenie. Dlatego istnieje vkGetDeviceProcAddress, aby uzyskać funkcję, która nie ma logiki wysyłki. Nie jesteś zobowiązany do korzystania z nich, ale może pomóc uzyskać dodatkową prędkość.

Jest to szczególnie zauważalne w przypadku uaktywnienia kilku warstw:

enter image description here

Dzięki specyficznym wskaźnikiem funkcji urządzenia końcowe sklepie można go wyjąć:

enter image description here
obrazy z khonos loader and layer interface document

Jeśli używasz tylko 1 urządzenia e wtedy kolejność operacji dla aplikacji będzie:

  1. dostać vkGetInstanceProcAddress z platformy/ładowarki.

  2. ładowanie z niego oraz zapytania o rozszerzenie i warstwę. (przy użyciu wartości null jako parametru instancji)

  3. utwórz instancję. (użyjesz tego jako pierwszego parametru do załadowania innych funkcji)

  4. załaduj vkEnumeratePhysicalDevices i związanych z urządzeniami zapytań.

  5. utwórz urządzenie z numerem vkCreateDevice określając żądane rozszerzenia.

  6. załaduj wszystkie pozostałe funkcje, których potrzebujesz, podając vkGetDeviceProcAddress i przekazując urządzenie jako pierwszy parametr.

1

Powyższa odpowiedź jest prawidłowa. Dodam, że dla rozszerzeń WSI, ładowarki Windows, Linux i Android mają wszystko, co napisali, wyeksportują punkty wejścia rozszerzenia WSI. Tak więc na tych platformach vkGetInstanceProcAddr i vkGetDeviceProcAddr NIE są potrzebne do użycia w celu uzyskania punktów wejścia WSI. Ale ogólnie punkty wejścia rozszerzenia muszą być pobierane za pośrednictwem vkGet * ProcAddr w Vulkan.

+0

WSI i wskaźniki funkcji ładowania nie mają ze sobą nic wspólnego. –