:szatkus zmiany są spore nie tyle w API, co w tym co robi driver.
- Po pierwsze Vulkan jest "context-less", to znaczy, że możesz nagrywać komendy na wielu wątkach. To wymaga zmiany sposobu projektowania bebechów aplikacji, by była jak najbardziej CPU-bound.
- Synchronizacja nie istnieje w Vulkanie. Więc wszelkie czekanie, aż coś się wykona należy do ciebie. Jak GL tworzy resource textury, która później jest bindowana, to będzie lock, by upewnić się, że jest gotowa do użycia. Vulkan nie zaczeka i po prostu będzie crash. Niektóre z tych synchronizacji są niezbędne inne są na wszelki wypadek ( bo 1 na 10 przypadków może wystąpić race condition ). W Vulkanie ty decydujesz co i jak.
- Vulkan daje ci pełny dostęp do pamięci. Ty tworzysz alokatory, decydujesz jaki layout będzie miała pamięć itd. Driver GL sam zarządza pamięcią i tu również wybiera drogę bezpieczną niż raczej szybką.
- Bufory z komendami są prekompilowane i optymizowane. Jeśli wysyłasz do kolejki jakiś command buffer, to wysyłasz gotowe do wykonania rozkazy dla GPU. Może tak być, bo Vulkan nie ma weryfikacji stanu API. GL musi każdą wysłaną komendę zweryfikować pod względem poprawności ( dlatego unika się tzw. redundant calls w GL, w Vulkanie one nie mają żadnego znaczenia, bo Vulkan nic nie weryfikuje ).
- Wszystkie funkcje Vulkana mogą być wykonywane na dowolnym wątku. Synchronizacja jest "explicit", czyli po stronie programu. Daje to spore pole do zabawy pod względem paralelizacji zadań. W GL context mógł być tylko na jednym wątku, natomiast driver mógł, ale nie musiał, dokonać pewnych paralelizacji. W Vulkanie to ty się tym zajmujesz, Vulkan ma to gdzieś
- "Hello Triangle" w Vulkanie ma ponad 2000 linii kodu
Tych zmian jest naprawdę bardzo dużo i to jest zupełnie inne API. Podobieństwa między GL a Vulkanem są właściwie minimalne ( nawet zniknęło pojęcie textury czy framebuffera ). No ale to nie temat na narzekalnię