Přeskočit na obsah
Tech-Blog Chatujme.cz Chatujme.cz
Programování

Vývojářka Collabory navrhla pro ovladače Vulkanu v Mese mezivrstvu Shiva

Faith Ekstrand z Collabory přednesla 28. září na konferenci XDC 2026 v Torontu návrh Shivy, vrstvy, na kterou by ovladače Vulkanu v Mese mířily místo přímo na Vulkan. Kód zatím žádný není. Prototyp má vzniknout na ovladačích Nouveau a Panfrost a podle jejího vlastního odhadu potrvá dva roky, než z toho něco budou mít uživatelé.

· 69 zhlédnutí

Projekt Mesa sdružuje otevřené ovladače grafiky pro Linux. Vedle nich v něm žije společný běhový kód, který za ovladače obstarává to, co je u všech stejné. Na konferenci XDC 2026 v Torontu ale zaznělo, že u Vulkanu tenhle model došel na hranici: přednáška Faith Ekstrand z Collabory s názvem „Is it time for Vulkan Gallium?“ stála 28. září v hlavním programu a měla celý slot, tedy 45 minut.

Stránka konference XDC 2026 s popisem přednášky Is it time for Vulkan Gallium
Stránka přednášky v programu XDC 2026. Konference běžela v Torontu od 28. do 30. září, mezi jejími sponzory jsou Arm, AMD, Collabora, Microsoft i NVIDIA. Foto: vlastní snímek obrazovky, indico.freedesktop.org (snímek obrazovky)

Výchozí bod je v abstraktu přednášky. Když Vulkan 1.0 vyšel před deseti lety, psaní ovladačů bylo podle Ekstrand zábavné: bity rozhraní se namapovaly na bity hardwaru a šlo se dál. V roce 2026 je venku Vulkan 1.4 a stovky rozšíření, některé výčtové typy mají tři verze, které musí někdo přemapovat, a duplicitní vstupní body i dotazy jsou všude.

Běhový kód sedí uvnitř ovladačů, ne nad nimi

Jednu větu označila Ekstrand na svém slajdu za jádro problému: běhový kód Vulkanu v Mese sedí uvnitř ovladačů, ne nad nimi. Vstupní body rozhraní implementují všichni naráz – ovladače, běhový kód, vrstva pro práci s okny, vrstvy nad ovladači i obaly funkcí s příponou 2. Dědičnost se přitom používá ve všech podobách zároveň: struktura začínající jinou strukturou, tabulky funkcí, obsahování jedné struktury v druhé. A všichni volají do všech.

Devadesát procent dnešního běhového kódu je podle ní volitelné, včetně veškerého zachytávání stavu. Ovladač si tedy může vzít jen část a zbytek si napsat sám – což je přesně to, co mezi ovladači dělá rozdíly. Sama k tomu dodala, že to celé funguje mnohem líp, než mělo právo, protože Vulkan je na spoustu věcí dobrá úroveň abstrakce. Jen už to prý nestačí.

Tři místa, kde to podle Ekstrand drhne

První je příznakové pole VkFormatFeatureFlags2, které přišlo s Vulkanem 1.3. Mesa má pomocnou funkci na převod do starší verze a ovladače ji musí volat všude. Vlastnosti modifikátorů obrazu pak existují ve dvou různých strukturách, protože pole nešlo rozšířit, takže je ovladače musí obsluhovat obě ručně. Lepší to podle Ekstrand být nemůže, dokud se dotazy nedají obalit – a bity docházejí, přičemž v Khronosu se už mluví o třetí verzi.

Druhé je slučování podprůchodů vykreslování. Na povrchu vypadá jednoduše: heuristika rozhodne, co se sloučí, cíle vykreslování se sečtou a čtení vstupních příloh se nahradí čtením z framebufferu. Jenže přeuspořádání cílů nepřeuspořádá stav míchání barev, takže přibyl druhý způsob, který to udělá – a souhra obou je podle slajdu špatně definovaná. Třetí je meta, tedy operace, které si ovladač provádí sám nad sebou. Tu Ekstrand na slajdu nerozvedla vůbec, jen se zeptala, jestli ji ještě musí vysvětlovat.

Co si Shiva bere z Gallia

U OpenGL má Mesa odpověď dlouho a jmenuje se Gallium. Leží celé mezi ovladačem a rozhraním: ovladače implementují Gallium, ne OpenGL. Díky tomu má Mesa kam schovat podivnosti OpenGL, má použitelné rozhraní pro meta operace – vlastní blitter píše Gallium pomocí Gallia, ne OpenGL pomocí OpenGL – a hlavně má rozhraní, které se dá měnit. Vulkan ani OpenGL se měnit nedají, protože mají stabilní ABI, takže nic z nabalených podivností už nikdy nezmizí.

Shiva má tenhle model přenést k Vulkanu. Schéma na slajdu má čtyři patra: běhový kód Vulkanu, „klasický“ překladač stavu, rozhraní Shiva a pod ním ovladač hardwaru s pomocnými vrstvami. Klasický běhový kód v Mese zůstane a překladač stavu pro Shivu bude z jeho pohledu vypadat jako obyčejný ovladač. Abstrakce se do Shivy budou stěhovat postupně: co bude používat jen ona, se přesune celé, a něco se podle Ekstrand vyplatí mít dvakrát, protože to Shiva zvládne líp.

Jméno vysvětlila na samostatném slajdu. Šiva je ve světě Final Fantasy bohyně ledu, Vulcan je bůh ohně. „Funguje to,“ napsala k tomu.

Ploché struktury a Rust jako cíl, ne jako přílepek

Rozhraní Shivy má být moderní a s co nejmenší zátěží minulosti: shader objects, dynamické vykreslování. Žádné řetězce pNext ani příznaková pole druhé generace – ovladač má dostávat ploché struktury, kde nepoužité položky nesou výchozí hodnoty. K tomu jasně určené životnosti objektů a jejich vlastnictví.

Podpora back-endů v Rustu je výslovný cíl návrhu. Rozhraní se má do Rustu navazovat samo: na straně C tabulky funkcí, na straně Rustu traity. Počítá se s pravidly životnosti, s řezy místo dvojic ukazatel a délka a s chytrými ukazateli u objektů s počítanými referencemi; pro C++ se možná přidá hlavička, která dá std::span. Pseudorozšíření, která si dnes Mesa vyrábí sama, se občas standardizují jen proto, že je chce Zink nebo VKD3D – a tím se Vulkan dál komplikuje.

Otevřených otázek je pět a Ekstrand je vypsala bez odpovědí: čím se rozhraní popíše (XML, JSON, hlavička v C, nebo Rust), jak vystavit příznaky delší než 64 bitů, jestli má být jedna instance Shivy pro všechny ovladače, jak mají fungovat deskriptory a co s dynamickým stavem. Ke všem pěti připsala, že se to vyřeší cestou.

Dva roky, a je to odhad

Časový plán si autorka sama označila za nejlepší dohad. Psát chce začít hned po konferenci, zdrží ji schůzka Khronosu a pár nedodělků, takže volná bude koncem října. Rok podle ní potrvá, než se budou moci přidat další lidé: detailů je spousta, celek se nejspíš několikrát přepíše a nové rozhraní potřebuje jeden redakční hlas, ne návrh komisí.

Prototypovat bude na ovladačích Nouveau a Panfrost, tedy na dvou hardwarech, které zná nejlíp; back-end pro Nouveau vznikne v Rustu, pro Panfrost v C. Dva roky je odhad, kdy by Shiva mohla být připravená pro uživatele – a to jen pro Nouveau a možná Panfrost, protože se to musí ověřit dřív, než se začne mluvit o portování dalších. Stěhování ostatních ovladačů bude pomalé: přesun všech na Gallium trval deset let a Ekstrand nečeká, že u Shivy to půjde o moc rychleji.

Na slajdu číslo 40 stojí výhrada, kterou je dobré číst spolu se vším ostatním: zatím z toho není ani řádka kódu, takže se všechno může kdykoli změnit, a kdo si stěžuje, že se výsledek neshoduje se slajdy z XDC, chodí špatně. Ovladače jako RADV pro karty AMD nebo ANV pro Intel tedy zůstávají tam, kde jsou; podle plánu přijdou na řadu až po Nouveau a Panfrostu, a pomalu.

Zdroje

Programování

Linux Rust Ovladače Vulkan Mesa

← zpět na výpis