Hasznos funkciókkal újít az OpenGL 4.4

Ahogy azt az elmúlt években már megszokhattuk, az OpenGL jellemzően a SIGGRAPH rendezvénnyel párhuzamosan frissül, és nincs ez másképp most sem. A Khronos Group ugyanis bemutatta az API 4.4-es verzióját, mely az előző évben bevetett temérdek újításhoz képest is nagy előrelépésnek számít. A legfontosabb extrákkal ugyanakkor csak a legmodernebb hardverek birkóznak meg, de legalább már nem egy gyártóhoz kötődő specifikus kiterjesztésekről van szó, ami így is jelentős előrelépés.

Hirdetés

Az OpenGL 4.4 legfontosabb újításai között három új, opcionálisan támogatható kiterjesztés szerepel: GL_ARB_bindless_texture, GL_ARB_seamless_cubemap_per_texture és GL_ARB_sparse_texture. A GL_ARB_bindless_texture az NVIDIA korábbi kiterjesztésének (GL_NV_bindless_texture) másolata, és lehetővé teszi az egy shader kódba beköthető egyedi textúrák számának növelését. Konkrétan egymillió fölé emeli ezt az értéket, ami a korábbi 128-hoz képest komoly előrelépés, de ennél is fontosabb, hogy eddig az objektumok bekötése a processzort terhelte, ami esetenként CPU-limithez is vezethetett, de az új kiterjesztéssel ez feloldható, így akár tízszeres gyorsulás is elérhető erre vonatkozóan. Persze a mai programok erősen terhelik a GPU-kat, így ilyen esetben a lehetséges gyorsulás inkább kétszeres, de ez is elég jó.

A GL_ARB_seamless_cubemap_per_texture szintén egy korábban létező kiterjesztés másolata (GL_AMD_seamless_cubemap_per_texture). Ennek a célja egy apróbb hiba megoldása, mely szegélyeket eredményezhet a cube mapek illesztésénél az OpenGL-ben. A legnagyobb újítás azonban a GL_ARB_sparse_texture bevezetése, mely a hardveres megatextúrázást teszi lehetővé. Az új kiterjesztés a GL_AMD_sparse_texture átdolgozása, illetve alapvető butítása, hogy ne csak a GCN architektúrára épülő Radeonok támogathassák. A rendszer elsősorban a textúratömörítés kapcsán lett megvágva, így az aktuális GL_ARB_sparse_texture implementáció tömörítetlen textúrákat igényel a működéshez. Természetesen a fejlesztők továbbra is használhatják a GL_AMD_sparse_texture opciót, ami támogatja a textúratömörítést, de ezzel a működést csak a GCN-es Radeonokra korlátozzák.

A fentiek közül a GL_ARB_bindless_texture és a GL_ARB_seamless_cubemap_per_texture kiterjesztéseket csak az NVIDIA Kepler és az AMD GCN architektúrára épülő hardverek kezelik, míg a GL_ARB_sparse_texture bármilyen OpenGL 4.0-t támogató hardverrel működőképes.

Ezzel persze az újításoknak nincs vége, hiszen a GL_ARB_buffer_storage szintén egy nagyon fontos kiterjesztés, és tulajdonképpen a DirectX 11.2-ben bemutatkozott map default buffer funkció OpenGL-es változata, némileg kiegészítve. Ezt a szolgáltatást főleg az APU-k képesek majd kihasználni, mivel lényegében arról van szó, hogy az integrált grafikus vezérlő alapértelmezett puffereit bármikor elérhetik a központi processzormagok. Ez dedikált GPU-val egy igen fájdalmas procedúra árán valósítható meg, mivel át kell másolni a szükséges alapértelmezett puffereket a rendszermemóriába, majd kérvényezni kell annak olvasását, illetve írását. Már maga az adatmásolás is sok teljesítményvesztést jelent, de az API késleltetéseit beleszámolva igen komoly büntetés elé néznek a hardverek. Az OpenGL-es implementáció az előbbieket kiegészíti még a dedikált GPU-kra is, mivel a fejlesztő kezébe adja a kontrolt, hogy az alapértelmezett puffereket hova helyezik el. Amennyiben a rendszermemóriát választják, akkor a központi processzormagok ezeket nagyon könnyen elérhetik. Persze a PCI Express kapcsolaton keresztül elérhető rendszermemória használata nem biztos, hogy minden szituációban előnyös egy dedikált GPU számára, de a lehetőség adott.

A GL_ARB_enhanced_layouts is értékes extra, hiszen a GLSL továbbfejlesztése a célja, hogy az a fejlesztők számára nagyobb szabadságot adjon a programok írása szempontjából. Lényeges újítás még a GL_ARB_query_buffer_object, mely az AMD saját kiterjesztésének (GL_AMD_query_buffer_object) másolata, és segítségével bizonyos szituációkban tempónövekedés érhető el. Emellett a GL_ARB_multi_bind is a teljesítménynövelést célozza a processzor többletterhelésének csökkentésével.

A további kisebb újítások mellett az OpenGL 4.4 egyszerűbb teszi a Direct3D-ben írt alkalmazások portolását, amiben a már említett GL_ARB_buffer_storage funkciónak vezető szerepe van, de a GL_ARB_vertex_type_10f_11f_11f_rev és a GL_ARB_texture_mirror_clamp_to_edge is hasznos, hiszen mindkettő Direct3D-ben használt formátumokat definiál.

Az OpenGL 4.4 részletes specifikációja az alábbi fájlban olvasható. Az NVIDIA már bejelentette, hogy a fejlesztők elérhetnek egy drivert az OpenGL 4.4 előzetes támogatásával, míg az AMD elmondta, hogy minden új kiterjesztést támogatnak majd.

Azóta történt

Előzmények

Hirdetés