Nel panorama delle API grafiche, Le lingue di ombreggiatura hanno dovuto affrontare una limitazione, perché nonostante la possibilità di scrivere codice in un sottoinsieme comune tra GLSL, HLSL e C++, sono presenti le attuali restrizioni.
Per questo è nato Vcc (Vulkan Clang Compiler) il compilatore Vulkan Clang, che è un progetto in sviluppo da 3 anni, nasce come risposta a questi limiti e sfide. Questo progetto cerca non solo di superare le restrizioni espressive, ma di eliminare il concetto stesso di linguaggi sfumati.
Incorporando l'intera famiglia linguistica C / C ++ a Vulcano, Vcc introduce funzionalità mai viste prima negli shader Vulkan, come puntatori fisici, puntatori generici, chiamate di funzioni reali e un flusso di controllo completo.
Questa iniziativa cerca di colmare il divario software tra la grafica e le API di calcolo. Rendendo Vulkan compatibile con altre API di GPU Computing, Vcc viene presentato come un passo importante verso l'unificazione della programmazione nella grafica e nell'informatica, allineandosi all'adozione di massa e alla qualità di implementazione per cui Vulkan è noto.
Informazioni su VCC
Vcc è un compilatore basato su Clang progettato per generare codice eseguibile in Vulkan, il suo obiettivo è quello di posizionarsi come un compilatore in grado di tradurre codice C++ in una rappresentazione che può essere eseguita su GPU che supportano l'API grafica Vulkan. A differenza dei modelli di programmazione GPU basati sui linguaggi shader GLSL e HLSL, Vcc prende l'idea di eliminare completamente l'uso di linguaggi shader separati e offre la possibilità di compilare direttamente codice C/C++ per Vulkan.
Sebbene potrebbe essere considerato un concorrente di GLSL e HLSL, Da allora, la vera intenzione alla base di questo progetto va oltre Vcc cerca di incorporare la famiglia di linguaggi C/C++ in Vulkan, introducendo una serie di funzionalità negli shader Vulkan.
Vcc è semplicemente un'interfaccia per Shady, un IR e un compilatore progettato per estendere SPIR-V con il supporto per i costrutti sopra menzionati. Shady viene presentato come un IR relativamente convenzionale e include il supporto per l'analisi di LLVM IR. Gestisce la riduzione e l'emulazione di tutte le funzionalità aggiuntive non presenti nelle versioni attuali di SPIR-V 3.
Naturalmente, ci sono una serie di caratteristiche uniche che si trovano solo negli shader. Questi sono esposti in Vcc utilizzando intrinseci e annotazioni, consentendo di scrivere codice che interagisce con le varie funzionalità del canale Vulkan.
Il processo di compilazione in Vcc prevede l'utilizzo dei componenti del progetto LLVM e Clang come interfaccia. Per l'esecuzione sulla GPU, Vcc sviluppa la propria rappresentazione shader intermedia "Shady", insieme a un compilatore dedicato per convertire il codice in questa rappresentazione. Questo approccio consente la compilazione di codice C/C++ standard ed è completato da specifiche funzioni integrate per sfruttare le capacità della GPU.
Vcc si distingue per il supporto di funzioni native C/C++ per controllare il flusso del programma, consentendo anche l'uso dell'istruzione "goto". Inoltre, offre la possibilità di chiamare funzioni, eseguire funzioni in modo ricorsivo e utilizzare vari tipi di puntatori, come puntatori fisici, puntatori con tag e puntatori a funzioni. Inoltre, semplifica l'esecuzione di operazioni aritmetiche sui puntatori e la determinazione dei layout dei caratteri in memoria.
La rappresentazione intermedia dello shader Shady è basata su SPIR-V 3 ed è stata ampliata per supportare costrutti speciali inerenti alle funzionalità C/C++. L'emulazione viene utilizzata per implementare funzionalità avanzate che non sono direttamente applicabili a SPIR-V. Vcc include funzioni e annotazioni integrate per consentire ai programmi di utilizzare in modo efficiente le capacità specifiche degli shader, fornendo così un ambiente versatile e potente per lo sviluppo di applicazioni GPU.
Infine, vale la pena ricordare che non tutto è roseo eÈ essenziale tenere conto di alcune limitazioni dell’implementazione. Ad esempio, Vcc non supporta le eccezioni C++ e la funzionalità malloc/free non è disponibile. Inoltre, esiste una restrizione sulla portabilità delle funzioni e dei puntatori tra il sistema host e la GPU. Queste considerazioni sono cruciali quando si pianifica lo sviluppo di applicazioni che utilizzano Vcc per garantire una distribuzione efficiente e senza problemi.
Se si interessati a saperne di più, puoi consultare il sito e per chi fosse interessato al codice, sappi che è disponibile qui.