Начиная с 15 мая в новой версии Mesa 23.2-devel, опция переменной окружения AMD_DEBUG=useaco теперь доступна для указания драйверу RadeonSI Gallium3D использовать компилятор шейдеров Valve ACO, а не компилятор шейдеров AMDGPU LLVM для поддерживаемых типов шейдеров.
Valve потратила годы на работу над внутренним компилятором ACO в качестве более быстрой альтернативы официальному шейдерному компилятору AMD на базе LLVM, используемому в RadeonSI, ранее в RADV, а также в вычислительном стеке ROCm и др. Внутренний компилятор ACO сыграл важную роль в успехе драйвера RADV и сделал его отличным драйвером для Linux-геймеров на Steam Deck и тех, кто на настольных компьютерах Linux пользуется графикой Radeon с открытым исходным кодом.
В течение многих лет велись разговоры о том, чтобы привнести ACO в RadeonSI, и это постепенно происходит. Благодаря этому запросу на слияние от Qiang Yu последняя часть головоломки собралась вместе, позволяя включить компилятор ACO с опцией AMD_DEBUG=useaco для поддерживаемых типов шейдеров.
Но с этим первоначальным слиянием поддержка компилятора ACO в RadeonSI будет только для монолитных пиксельных шейдеров. Цян объяснил в MR:
«Компиляция ACO может быть включена с помощью AMD_DEBUG=useaco. В настоящее время поддерживается только монолитный PS. Было бы огромным изменением перевести все шейдеры на ACO сразу, поэтому я планирую включать их по одному для более легкого анализа и отладки».
Он проработал известные регрессии, которые изначально были у компилятора ACO с пиксельными шейдерами по сравнению с бэкендом компилятора LLVM.
Приятно видеть эту последнюю партию кода ACO + RadeonSI — несколько сотен строк нового кода. Надеюсь, в скором времени больше типов шейдеров начнут работать в ACO с RadeonSI. Другие работы по ACO для Mesa можно найти по этому запросу на GitLab.