Linguaggi di alto livello

Come per la CPU, è possibile programmare gli shader tramite linguaggi di programmazione a diversi livelli e poi compilarli per tradurli nel linguaggio macchina che la GPU può interpretare direttamente. I livelli sono tre:

Allo stato attuale, non esiste uno standard accettato da tutti i produttori per il linguaggio macchina.
In origine, quando fu rilasciato OpenGL 2.0, era stato previsto che lo standard assembly sviluppato dall'Architecture Review Board (detto appunto assembly ARB) sarebbe diventato parte dello standard OpenGL. Così è stato, tuttavia esso supportava solamente i primi due tipi di shader (Vertex e Fragment) e non è più stato aggiornato nelle versioni di OpenGL successive. È diventato vecchio in breve tempo ed è raramente utilizzato, anche se le schede video NVIDIA supportano tutt'ora un suo discendente, l'assembly NVIDIA.

Per maggiore compatibilità, invece, sono stati sviluppati due linguaggi ad alto livello: GLSL (openGL Shading Language) da OpenGL, HLSL (High Level Shading Language) da Microsoft nello standard DirectX.
Questi due linguaggi di programmazione sono accettati da pressoché tutti i driver per schede video recenti. Uno shader viene compilato dal driver e tradotto nel linguaggio macchina corretto per l'architettura della GPU. Perciò, gli shader devono essere compilati di volta in volta run-time sul computer dell'utente finale.

L'uso di GLSL o HLSL porta tutti i vantaggi classici della programmazioni ad alto livello: codice più comprensibile, minor rischio di errore, minor tempo necessario per scrivere il codice, eccetera.

In più, l'uso di un linguaggio ad alto livello tende a produrre in media codice più ottimizzato. Infatti, anche se ci fosse uno standard condiviso, sarebbe impossibile sviluppare un programma assembly ottimizzato per tutte le architetture esistenti (e future). Invece, siccome il compilatore è all'interno del driver, esso conosce l'architettura della GPU e può eseguire le ottimizzazioni necessarie.
Di solito, tutti i compilatori per linguaggi ad alto livello moderni contengono degli ottimizzatori molto potenti, perché se il codice è più ottimizzato la scheda video sembra comunque più veloce all'utente finale.

Per superare la differenza tra GLSL e HLSL, è stato sviluppato da NVIDIA in collaborazione con Microsoft un linguaggio di livello ancora più alto, Cg (C for Graphics). Questo linguaggio può essere compilato sia in shader per DirectX che per OpenGL, o direttamente in linguaggio assembly per una scheda video.


Copyright © 2011 Riccardo Monica
Eccetto ove espressamente indicato altrimenti, il contenuto di questa pagina è disponibile secondo la licenza Creative Commons Attribuzione - Condividi allo stesso modo 3.0.