Azienda Valve una nuova compilatore di shader nella mailing list degli sviluppatori di Mesa per il driver Vulkan RADV, come alternativa al compilatore di shader di AMDGPU, utilizzato nei driver OpenGL e Vulkan RadeonSI e RADV per le schede grafiche AMD.
Una volta completati i test e le migliorie, ACO è previsto per l'inclusione nel core di Mesa.
Il codice proposto da Valve mira a garantire la generazione di codice ottimale possibile per gli shader delle applicazioni di gioco, nonché a raggiungere una velocità di compilazione molto elevata. L'attuale compilatore di shader di Mesa utilizza componenti LLVM, che non consentono di ottenere la velocità di compilazione desiderata e non permettono un controllo completo del flusso di controllo, causando in passato problemi significativi. Inoltre, allontanandosi da LLVM è possibile implementare un'analisi più aggressiva delle discrepanze e gestire più finemente il carico sui registri, permettendo di generare file eseguibili più efficienti.
ACO è scritto in C++ ed è progettato con un occhio all'applicazione per la compilazione JIT, utilizzando strutture dati veloci per la scansione e evitando strutture basate su puntatori come le liste collegate e le catene def-use. La rappresentazione intermedia del codice si basa interamente su (Static Single Assignment) e consente la distribuzione dei registri, calcolando esattamente in anticipo quale registro utilizzare in base allo shader.
Attualmente sono supportati solo shader pixel (frammento) e shader computazionali su GPU AMD discrete (dGPU VI+). Tuttavia, ACO compila correttamente shader per tutti i giochi testati, inclusi shader complessi da giochi come Shadow of the Tomb Raider e Wolfenstein II. Il prototipo di ACO proposto per i test supera quasi di due volte il compilatore shader AMDGPU in velocità di compilazione e mostra un incremento del FPS in alcuni giochi quando eseguiti su sistemi con il driver RADV.
Fonte: opennet.ru
