Hirdetés

Új eszközzel segíti a shaderek fejlesztését a Khronos Group

A Khronos Group a Vulkan API tényleges startja óta nagyon aktívnak tekinthető. Bár maga az API már használható a fejlesztők számára, azért közel sincs minden egyes probléma megoldva. Többek között az előző évben véglegesített SPIR-V 1.0 a jövő szempontjából ugyan rendkívül stabil alapot ad, de ma még célszerű több API-t is támogatni, ami már nehézségeket jelent a shader nyelv szempontjából.

Az sokak számára ismert, hogy a Vulkan által használ shader nyelv a SPIR-V, és erre ma GLSL (OpenGL Shading Language) nyelvből lehet fordítani. A jövőben a támogatott nyelvek sora nyilván bővül, de most koncentráljunk a jelenre. A GLSL ugyanis bár egy nyelvnek tekinthető, az egyes API-k más verziót használnak belőle. Ezt a Khronos Group berkein belül viccesen GLSL dialektusnak csúfolják, ami természetesen nagyon elvont meghatározása a problémáknak, de jól szemlélteti a lényeget, vagyis azt, hogy az alapvető GLSL nyelvnek öt különböző, amúgy specifikált variánsa létezik. Ez nagyon egyszerűen levezethető, ugyanis van modern mobil (OpenGL ES 3.0 vagy jobb), elavult mobil (OpenGL ES 2.0 vagy rosszabb), modern asztali (OpenGL 3 vagy jobb), elavult asztali (OpenGL 2 vagy rosszabb) és végül Vulkan GLSL specifikáció.

Mivel a SPIR-V-re csak a Vulkan GLSL specifikációjú nyelvből lehet fordítani, a fejlesztőknek is ilyen shadereket kell írniuk. Amennyiben csak a Vulkan API-t támogató hardvereken való futtatás a cél, ez teljesen elfogadható, de ha a célpiac miatt szükség van egy OpenGL vagy OpenGL ES portra, akkor előjönnek a gondok. Itt nevezetesen arról van szó, hogy a SPIR-V mellé szállítani kell még OpenGL-hez és OpenGL ES-hez való GLSL shadereket is, de ez nem túl szerencsés, mivel a feltételes betöltésekkel operáló kódok menedzselése egy idő után nehézkessé válik, és több erőforrást is kell befektetni a fejlesztésbe.

A Khronos Group SPIRV-Cross eszköze ezt a gondot oldja meg. A segítségével szállítható az alkalmazás SPIR-V shaderekkel, ami jó a Vulkan API-hoz, és a SPIR-V kódokból konvertálható OpenGL vagy OpenGL ES API-kkal kompatibilis GLSL variáns is. Ez a fejlesztések menedzselhetőségét radikálisan egyszerűsíti, miközben az adott programmal tulajdonképpen egyszerre célozható a Vulkan, az OpenGL és az OpenGL ES API is.

A Khronos Group ennél egy picit továbbment, így a SPIRV-Cross eszközzel több, magasabb szintű nyelvet is támogatni szeretnének, gondolva itt az Apple MSL-re (Metal Shading Language) is, de konvertálható debugolható C++ kód is a SPIR-V-ből. Utóbbi két opció egyelőre kísérleti fázisban van.

A SPIRV-Cross az alábbi GitHUB oldalon érhető el.

Azóta történt

Előzmények

Hirdetés