Téměř naráz s očekávaným oznámením grafického API DirectX 12 se nyní během GDC 2014 sveze i „konkurenční“ multiplatformní OpenGL, lépe řečeno jeho zjednodušená verze určená především pro mobilní GPU. Khronos Group včera oficiálně oznámila dokončení specifikace OpenGL ES 3.1. Nová verze tohoto rozhraní přinese pokročilé možnosti programátorům, zároveň by ale měla fungovat i s některými již existujícími grafickými adaptéry.
OpenGL ES 3.1 zůstává podmnožinou „dospělého“ OpenGL, verze 3.1 si ale půjčila některé další funkce. Tou nejdůležitější je přidání compute shaderu. Ten poskytuje mnohem větší flexibilitu a volnost k programování obecných výpočtů než pixel shadery. Používá se tedy ke složitějším algoritmům či k akceleraci úloh, které nejsou spjaté s vykreslováním grafiky. Compute shader tedy znamená větší volnost pro programátory, umožní jim také na GPU počítat předtím nemožný (nebo nepraktický) kód. Díky tomu by hry napsané pro OpenGL ES 3.1 mohly přinést vyšší vizuální kvalitu či hry lepší simulaci fyziky. Jako programovací jazyk je použit GLSL ES.
Naopak geometry shader součástí OpenGL ES 3.1 stále není (stejně jako třeba teselace). Samotný programovací jazyk shaderů ale získal některá vylepšení. Podporovány jsou nové druhy operací a kód se bude řídit o něco méně rigidními pravidly, které umožní flexibilnější míchání pixel shaderů a vertex shaderů. Novinky přicházejí i do práce s texturami, OpenGL ES 3.1 podporuje gather, multisampling a také stencil textury.
Zajímavé je, že nová verze se dotýká i současného horkého tématu, a to zátěže CPU při vykreslování. Zatímco na PC nás nároky na procesor trápí zejména coby brzda výkonu, u mobilních grafik běží také o výdrž zařízení na baterii. Omezení zátěže CPU je tedy žádoucí i zde a OpenGL ES 3.1 za tímto účelem přináší funkci indirect draw commands. Použití Indirect draw commands umožňuje samostatnější práci grafického adaptéru, který si díky nim může sám přidělovat práci, aniž by do procesu musel vždy zapojovat hostitelský procesor. Příkladem použití může být výpočet pomocí compute shaderu, který sám po dokončení inicializuje vykreslovací příkaz k zobrazení výsledků.
Specifikace rozhraní OpenGL ES 3.1 je již finální a vydaná. Tato verze je navržena tak, aby využívala existujících vlastností současného hardwaru, měla by tedy fungovat s již existujícími mobilními čipy. Poměrně velké množství grafických jader by tedy po aktualizaci ovladačů mělo získat podporu nové verze, žádný seznam ale zatím není. Khronos Group nyní sestavuje sadu oveěovacích testů, na jejímž základě teprve čipy dostanou certifikaci. Tyto práce údajně budou trvat zhruba čtvrt roku, poté by se mohly začít první SoCy s oficiální podporou OpenGL ES 3.1 objevovat. Verze 3.1 by také měla být zpětně kompatibilní s OpenGL ES 2.0 a 3.0 co se programování týče. To znamená, že existující aplikace by se měly dát o novou verzi snadno rozšířit bez nějakého masivního přepisování.
S tvrzením, že jejich GPU bude OpenGL ES 3.1 zvládat, už přišly firmy Imagination, Nvidia a Vivante. U Vivante se zřejmě bude jednat o GPU založená na architektuře Vega (například GC6400). Nvidia uvádí podporu u nové Tegry K1, která má architekturu Kepler pocházející z desktopu (ta podporuje celé OpenGL 4.4), předchozí Tegry se starší architekturou grafiky budou asi mít smůlu. U Imagination/PowerVR by pak měly mít potřebnou výbavu grafické adaptéry s architekturou Rogue, tedy GPU série 6.
Zdroje: Khronos Group, AnandTech