Specifikace Vulkanu přidala volbu mezi menším obrazem v paměti a rychlejším přístupem
Khronos vydal 31. července aktualizaci specifikace Vulkanu 1.4.358 s jediným novým rozšířením. VK_EXT_image_tiling_control dovoluje u každého obrazu zvlášť říct, jestli má ovladač zvolit uspořádání dat, které šetří paměť, nebo to, které zrychluje přístup. Dosud to bylo na ovladači a aplikace do jeho volby neviděla.

Skupina Khronos vydala 31. července aktualizaci specifikace Vulkanu s označením 1.4.358. Přibylo v ní jediné nové rozšíření, zato takové, pod kterým jsou podepsaní lidé z AMD, Valve, Samsungu, NVIDIE, Intelu a Nintenda: VK_EXT_image_tiling_control.
Dvě hodnoty, za kterými se skrývá víc možností
Obrazem (VkImage) se ve Vulkanu myslí blok obrazových dat v paměti grafické karty – textura, plocha, na kterou se vykresluje, hloubková mapa. Jak se ta data v paměti poskládají, dosud řídily dvě hodnoty. VK_IMAGE_TILING_LINEAR je ukládá po řádcích za sebou, jak by je člověk psal na papír. VK_IMAGE_TILING_OPTIMAL nechává uspořádání na ovladači: ten si obraz rozseká na dlaždice a poskládá je tak, aby bylo čtení sousedních bodů rychlejší.
Návrhový dokument rozšíření to popisuje jako typický kompromis mezi místem a časem: lineární uspořádání šetří paměť, optimální zrychluje přístup. Potíž je v tom, co se skrývá pod druhou z těch hodnot. Karta jich totiž může umět víc – několik různých optimálních uspořádání, každé s jinou spotřebou paměti a jinou rychlostí – a která se použije, si ovladač vybírá sám. Aplikace o té volbě neví a nemá ji jak ovlivnit.
Podle návrhu má přitom vývojář navíc informace, ke kterým se ovladač nedostane: ví, jak se obraz bude používat, a zná cílovou platformu. „Byly zjištěny případy, kdy ovladač nedokáže bez dalších podrobností zvolit nejlepší možnost pro všechny aplikace,“ stojí v dokumentu (přeloženo z angličtiny). Dosavadní náhrada byla nepřímá – měnit parametry vytvoření obrazu a pak měřit, jestli se uspořádání vůbec změnilo. Že ladění a měření vadí vývojářům shaderů ze všeho nejvíc, ukázala i anketa Khronosu mezi více než čtyřmi sty z nich.
Tři hodnoty místo zkoušení
Rozšíření přidává strukturu VkImageTilingControlCreateInfoEXT, kterou aplikace připojí k popisu vznikajícího obrazu. Obsahuje jedinou položku a ta nabývá tří hodnot:
VK_IMAGE_TILING_CONTROL_DEFAULT_EXT– chová se stejně, jako by struktura nebyla připojená vůbec;VK_IMAGE_TILING_CONTROL_MIN_SIZE_EXT– ovladač má zvolit uspořádání s nejmenší spotřebou paměti;VK_IMAGE_TILING_CONTROL_MAX_PERFORMANCE_EXT– má zvolit to nejrychlejší, i za cenu vyšší spotřeby.
Vedle toho přibývá příznak imageTilingControl; podle návrhu ho musí karta podporovat vždy, když podporuje samotné rozšíření. Návrh vysvětluje i to, proč nestačil jeden přepínač: u pouhého zapnuto/vypnuto by se muselo dodat zvlášť zjišťování výchozího chování, a to se může časem měnit.
Záruka platí jen v jednom směru
Hodnota pro nejmenší velikost je závazná: paměťový nárok obrazu s ní nesmí být větší než u zbylých dvou. U hodnoty pro nejvyšší rychlost žádný slib není. Návrh to říká rovnou – doba přístupu k obrazu závisí na příliš mnoha věcech, takže ovladač udělá, co může. Obě volby se navíc u některých obrazů srovnají do téhož výsledku; třeba tam, kde rozměry přesně vycházejí na velikost dlaždice, žádný kompromis neexistuje.
Zato se volba musí promítnout do dotazů, kterými si aplikace zjišťuje velikost a rozvržení obrazu ještě před jeho vytvořením. Jinak by si vývojář vyžádal úsporné uspořádání a paměť si naplánoval podle čísel platných pro jiné.
Zarovnání šlo ovlivnit už dva roky, uspořádání ne
Ve specifikaci je rozšíření VK_MESA_image_alignment_control, jehož jediným autorem je Hans-Kristian Arntzen z Valve; popis rozšíření nese datum poslední úpravy 3. května 2024. Řeší příbuzný problém z druhé strany: aplikace jím žádá o menší zarovnání obrazu v paměti, než jaké by karta jinak vyžadovala. Popis uvádí jako příklad vrstvení nad rozhraním Direct3D 12, kde se u umísťovaných prostředků počítá s určitým zarovnáním a napodobit to jinak znamená plýtvat výplní.
Nové rozšíření to starší neruší a Arntzen je podepsaný i pod ním. Když aplikace určí strop zarovnání, musí to omezit i výběr uspořádání – obojí platí zároveň.
Co dalšího v 1.4.358 je
Zbytek aktualizace jsou opravy a upřesnění: rozvolnění požadavku na jedinečnost identifikátoru paměťového objektu v hlášení o alokacích, upřesnění, že rozložení VK_IMAGE_LAYOUT_PREINITIALIZED se týká jen lineárních obrazů, nebo dovolení, aby dotaz na počet ořezaných útvarů přeskočil zdegenerované trojúhelníky. Vydání také přebírá změny z bezpečnostně kritické varianty Vulkan SC 1.0.22.
Předchozí aktualizace 1.4.357 vyšla 17. července, mezi oběma je tedy čtrnáct dní. Stejnou dvoutýdenní pauzu bez aktualizace specifikace zmiňuje i server Phoronix.
Ve specifikaci ano, v ovladači zatím neznámo
Rozšíření nese pořadové číslo 688 a revizi 1 z 19. června 2026; jako autor je u něj uvedený Noah Fredriks z AMD. Je to rozšíření zařízení, tedy volitelná část rozhraní – aplikace si musí zjistit, jestli ho konkrétní karta a ovladač nabízejí. Jestli už to některý z nich umí, se ze seznamu změn nepozná – o implementacích v něm není nic.
Strojový popis rozhraní, ze kterého se generují hlavičkové soubory, dnes vede 472 rozšíření označených jako podporovaná pro Vulkan. Sto padesát jedna z nich má předponu EXT a 149 předponu KHR; příloha specifikace ta první označuje za vícedodavatelská a ta druhá za khronosovská.
Zdroje: seznam změn ve Vulkanu 1.4.358, návrhový dokument rozšíření, jeho příloha ve specifikaci, příloha k VK_MESA_image_alignment_control a zpráva serveru Phoronix. Počty rozšíření jsou spočítané ze souboru vk.xml ve stejné verzi.