We do often include affiliate links to earn us some pennies. See more here.

Updated: It has been merged into Mesa, just before I clicked publish on this—what timing! From what they said, it should be available in Mesa 19.3 and it can be enabled with the "RADV_PERFTEST=aco" environment variable (source).


Original article:

Back in early July, Valve announced their work on a new AMD GPU shader compiler for Mesa named ACO and now they're trying to get it pulled into Mesa directly.

Their main aims with ACO were to get the "best-possible code generation for game shaders, and fastest-possible compilation speed" and to replace the currently used shader compiler from the massive LLVM project. It has certainly seemed promising, improving both shader compile time resulting in less stuttering and so helping to improve overall FPS and smoothness in Linux games when played on supported AMD GPUs.


Image: Valve

Just this week, a merge request was opened to get ACO into Mesa officially and so far the reception does seem quite positive. It's not in yet though and it may need more work doing and adjustments before it's actually accepted. It's likely far too late for Mesa 19.2 which is due to release very soon, so hopefully Mesa 19.3 currently due towards the end of the year will see it.

You can see Valve's original announcement with more details about ACO here, although with the new Steam display view for news and events it doesn't load for me so use the Wayback Machine if you have the same issue.

To see a little more discussion about it, there's people testing it in our forum.

Article taken from GamingOnLinux.com.
30 Likes
About the author -
author picture
I am the owner of GamingOnLinux. After discovering Linux back in the days of Mandrake in 2003, I constantly checked on the progress of Linux until Ubuntu appeared on the scene and it helped me to really love it. You can reach me easily by emailing GamingOnLinux directly. You can also follow my personal adventures on Bluesky.
See more from me
The comments on this article are closed.
All posts need to follow our rules. For users logged in: please hit the Report Flag icon on any post that breaks the rules or contains illegal / harmful content. Guest readers can email us for any issues.
32 comments
Page: «2/2
  Go to:

Shmerl Sep 19, 2019
If this isn't clear, here is how it works. Games or anything else GPU targeted, ship GPU programs, that are called "shaders". To address the issue of multiple GPUs that exist (that have different hardware architecture), you can't just ship shaders in the form of the machine code, like you do for regular compiled CPU programs.

So what happens is (simple case, not covering complex ones like translation layers and Wine), that your shader written in high level language like GLSL or HLSL is compiled into portable intermediate representation (bytecode) i.e. SPIR-V during your development. This shader is shipped with the game. When the game runs, it passes the shader to the graphics backend (i.e. Vulkan "driver"). It has to use a compiler, to compile that SPIR-V shader into GPU machine code. That compiler is arleady specific to the GPU it's targeted at. I.e. the same game would work with Intel, AMD or Nvidia, in each of those cases, relying on different compilers to turn SPIR-V into machine code to be executed on the GPU.

This way developers themsleves don't need to compile shaders before hand into machine code, which makes games more portable and future proof. I.e. if you'd be shipping machine code shaders with your game, it would break on each new GPU generation or so, plus you'd need to compile for every existing GPU architecture yourself, and then select it at runtime yourself too. Basically - too messy.

Until now, Mesa used amdgpu (llvm based) compiler for AMD cards for Vulkan and OpenGL use cases:

* https://github.com/llvm-mirror/llvm/tree/master/lib/Target/AMDGPU
* https://github.com/llvm-mirror/llvm/blob/master/docs/AMDGPUUsage.rst
* https://llvm.org/docs/AMDGPUUsage.html

Now developers are working on standalone compiler, that's not relying on llvm. Again, this has nothing to do with Steam service, but Valve developers are leading the effort though.


Last edited by Shmerl on 19 September 2019 at 10:09 pm UTC
torbido Sep 19, 2019
Is there any review or an article to backup your words?

That's what it is. A shader compiler for the Vulkan driver (radv). I.e. why do you assume it's something to do with Steam (service)? If you think so, you should have a source for such assumption, not the other way around.

Because in its announcement they mentioned "online compilation of game shaders", and I asked where can we download these game shaders, and no one knew the answer, and when I used Steam, I found that it automatically downloading these shaders before running the game, so I assumed that it will be only available for Steam games only, because they are not available anywhere else.


Last edited by torbido on 19 September 2019 at 6:15 pm UTC
Shmerl Sep 19, 2019
Because in its announcement they mentioned "online compilation of game shaders

Do you have an exact quote? I'm not sure what "online compilation" means. Possibly just on demand, during game execution.


Last edited by Shmerl on 19 September 2019 at 6:10 pm UTC
torbido Sep 19, 2019
Because in its announcement they mentioned "online compilation of game shaders

Do you have an exact quote? I'm not sure what "online compilation" means. Possibly just on demand, during game execution.
Because in its announcement they mentioned "online compilation of game shaders

Do you have an exact quote? I'm not sure what "online compilation" means. Possibly just on demand, during game execution.

They removed the direct link to the announcement, but it is still number 2 in their news page, you just need to scroll down in this link

https://steamcommunity.com/games/221410/announcements



I don't know if we excluded online game shaders, it will give the same result or not, because no one made any reviews.


Last edited by torbido on 19 September 2019 at 6:28 pm UTC
Shmerl Sep 19, 2019
I think by online compilation they mean what I said above. Online → runtime. That should make it more clear. Simply compilation of shaders on your computer during game execution. Nothing to do with online as "on the network".


Last edited by Shmerl on 19 September 2019 at 6:28 pm UTC
torbido Sep 19, 2019
I think by online compilation they mean what I said above. Online → runtime. That should make it more clear. Simply compilation of shaders on your computer during game execution. Nothing to do with online as "on the network".
And what this option in Steam does exactly?!



Last edited by torbido on 19 September 2019 at 6:46 pm UTC
Shmerl Sep 19, 2019
That's Steam backend compiling shaders for specific architecture on the server, and then downloading and using it for local games. Not what they called online in the above quote.
torbido Sep 19, 2019
That's Steam backend compiling shaders for specific architecture on the server, and then downloading and using it for local games. Not what they called online in the above quote.
Ok, I hope that you are right about that.
mylka Sep 19, 2019
you can download
https://github.com/srmojuze/Refresh2025/releases



RADV/ACO

and you can start it with RADV_PERFTEST=llvm ./Refresh2025.x86_64

then it is just RADV
YoRHa-2B Sep 21, 2019
[quote=torbido]
Ok, I hope that you are right about that.
It's common terminology.
off-line compilation = shipping pre-compiled binaries for your GPU. You'd do this on consoles.
on-line = the opposite, i.e. letting your graphics driver do the job locally during execution.


Last edited by YoRHa-2B on 21 September 2019 at 4:15 pm UTC
massatt212 Sep 21, 2019
can some one help me with Ubuntu 18.04 and not Experience from Ubuntu 19.04
i install Ubuntu 18.04 and some reason no Kernel Above 4.18/4.19 plays games properly, their is huge fps drops like 50% performance.
Ubuntu 19.04 Works properly with any Kernel, but ubuntu 19 not working with some games
i used ukuu to install 4.18 just to check performance and it goes back up to normal
idk if i have to upgrade my llvm RADV idk i rather use Ubuntu 18, cause i can swap sessions to SteamOS for the Console look,
if im install Kernel wrong can some one advice me on how to do it

Im using Valve ACO Driver
Works with Any Kernel on Arch, Ubuntu 19
But ubuntu 18 and MESA Driver Combine with Kernel 5.+ doesnt Work at all performance loss is Huge
Shmerl Sep 22, 2019
off-line compilation = shipping pre-compiled binaries for your GPU. You'd do this on consoles.

I guess it helps them avoid this stutter and need for caching, but it also has a major downside - games break on each new console generation (assuming it has new GPU generation too), unless developers recompile them. It's also what held AMD back from going all the way from scratch in RDNA, requiring them to provide backwards compatibility for GCN microarchitecture - requirement from console makers not to break old games.


Last edited by Shmerl on 22 September 2019 at 12:24 am UTC
While you're here, please consider supporting GamingOnLinux on:

Reward Tiers: Patreon. Plain Donations: PayPal.

This ensures all of our main content remains totally free for everyone! Patreon supporters can also remove all adverts and sponsors! Supporting us helps bring good, fresh content. Without your continued support, we simply could not continue!

You can find even more ways to support us on this dedicated page any time. If you already are, thank you!
The comments on this article are closed.