Alacsony szintű hardverelérést biztosító grafikus API

Egy korábbi tudástár anyagban már írtunk a grafikus API-król (Application Programming Interface), de ezeknek is van egy viszonylag speciális irányuk, mégpedig az alacsony szintű programozhatóságot biztosító grafikus API-k. Ide tartozik az Apple Metal, az AMD Mantle, a Microsoft DirectX 12 és a Khronos Group által bemutatott Vulkan is.

DirectX 12, Metal, Mantle
DirectX 12, Metal, Mantle

Céljukat tekintve az alacsony szintű programozhatóságot biztosító grafikus API-k nem különböznek hagyományosabb társaiktól, így ezek is a programok kompatibilitását célozzák a különböző hardverekkel, de ezt a vastagabb absztrakciót megvalósító megoldásokkal szemben máshogy érik el. Az alacsony szintű programozhatóság ebből a szempontból csalóka, mivel szó sincs arról, hogy ezeket esetleg a gépi kódhoz közeli assembly nyelvvel kell használni, csupán arról van szó, hogy ne az API, illetve a hozzá tartozó grafikus eszközillesztő feleljen a hardver működtetéséért, hanem maga a program, illetve ezen belül is a videojáték-motor.

A fentiek lényegében azt jelentik, hogy egy alacsony szintű programozhatóságot biztosító grafikus API csak egy olyan vékony absztrakciós réteg, amely csupán a shader programok adott hardveren történő futtatásáért felel, míg azok a jellemző funkciók, amelyek eddig a magasabb szintű elérésre tervezett grafikus API-k, a hozzájuk tervezett driver modellek, illetve a konkrét eszközillesztők részei voltak egyszerűen átkerülnek a programba, és csakis ott futnak. Ide sorolhatók többet között az állapotokra vonatkozó szűrések, a számítandó képkockákra vonatkozó parancsok összegyűjtése, a grafikus vezérlő memóriájának vezérlése, illetve az egyes létrehozott erőforrások menedzselése.

A fentiek következtében a program oldalán többet kell dolgozni az adott videojáték-motor leképzőjén, hiszen azok a feladatok, amelyek eddig az API-ban, illetve egészen pontosan az API-hoz írt grafikus eszközillesztőben voltak benne, mostantól szimplán nincsenek ott, így a programba kell beírni a szükséges implementációt. Ennek viszont van egy olyan előnye, hogy az egész működés profilozhatóvá válik, vagyis az egyes hibák megkereshetők és javíthatók. Utóbbi nagy fegyvertény, hiszen a vastagabb absztrakciót használó API-kon erre nincs igazán lehetőség, ami szinte lehetetlenné teszi az optimalizálást.

Hirdetés