L'azienda NVIDIA ha trasferito il linguaggio di shaders Slang e il compilatore associato sotto la guida del consorzio Khronos, che si occupa dello sviluppo degli standard grafici. Si prevede che lo sviluppo del progetto Slang in un'area indipendente di Khronos attirerà nuovi partecipanti. Il linguaggio è stato creato come progetto congiunto di NVIDIA e delle principali università americane (Università Carnegie Mellon, Università di Stanford, Istituto Tecnologico del Massachusetts, Università della California a San Diego e Università di Washington). Le aziende Autodesk, Adobe, id Software, Igalia e Valve hanno dichiarato il loro supporto per questo nuovo progetto congiunto. Il codice del compilatore è scritto in C++ ed è rilasciato sotto licenza Apache 2.0. Il compilatore supporta le piattaforme Linux, Windows, macOS e WebAssembly.
Il linguaggio Slang è molto simile a HLSL, utilizzato in Direct3D, ed è caratterizzato dal supporto per moduli, generics e interfacce, che semplificano la manutenzione e lo sviluppo di grandi basi di codice, oltre a mirare a ottenere la massima prestazione e a essere utilizzato in applicazioni di rendering in tempo reale. Tra le funzionalità aggiuntive si notano il supporto per estensioni per l'uso di shader grafici in calcoli legati all'apprendimento automatico e alla differenziazione automatica.
Il compilatore si sviluppa secondo la paradigma 'scrivi lo shader una volta, esegui ovunque', e consente di convertire shader scritti nei linguaggi Slang, HLSL (High-Level Shader Language) e GLSL (OpenGL Shading Language) in rappresentazioni per le API grafiche Direct3D 11/12, Vulkan, Metal, OpenGL, WebGPU, OptiX e CUDA, oltre a codice macchina in grado di essere eseguito su comuni CPU. Oltre alla compilazione degli shader in rappresentazione binaria, Slang consente di generare codice sorgente testuale in C++, MSL (Metal Shading Language) e CUDA, mantenendo i nomi originali degli identificatori e la struttura delle chiamate.
Oltre al linguaggio Slang, il compilatore può essere utilizzato per compilare la maggior parte del codice esistente in HLSL senza necessitare di modifiche significative o solo piccoli ritocchi (ad esempio, Valve è riuscita a compilare in Slang tutti gli shader HLSL del gioco Source 2, modificando solo 10 righe di codice). Per la compilazione di GLSL è disponibile un modulo separato, che supporta la maggior parte delle funzioni interne e degli elementi di sintassi di GLSL. Durante la compilazione è possibile configurare i parametri del codice generato, ad esempio, si può generare codice altamente portatile, così come codice che utilizza nuove funzionalità delle ultime specifiche di Direct3D e Vulkan.
Inoltre, è stato presentato un nuovo rilascio di Slang 2024.14.5, che include nuove funzionalità come il nuovo tipo Atomic<T> per eseguire operazioni atomiche, l'espressione 'where', l'interfaccia IFunc per la scrittura di funzioni generiche, i tipi Tuple per memorizzare collezioni di valori di tipi diversi, tipi generici con un numero variabile di parametri, supporto per Unicode, backend per i linguaggi di shaders Metal e WGSL (utilizzati in WebGPU). È stata presentata un'implementazione di rasterizzatore scritta in Slang, che supporta la tecnica di rendering 3D Gaussian Splatting. È stato predisposto un ambiente online per esperimenti e compilazione dal browser.
Fonte: opennet.ru
