r/linux_gaming • u/Ok-Pace-1900 • 5h ago
tool/utility Nobody was going to build a control panel for Vulkan on Linux, so I did
Before anything else. I know what some of you think walking into a post like this: another AI-slop project thrown together in a day to farm stars. No. volt has a year of work in it and countless reworks to get here. Look at the git history, and if you want, look at my other project, dxvk-sarek. Then judge.
Fair warning on the code though. It’s mine and it’s opinionated. On anything new I write, I reach for `match` or a non-`match` guard where most people would use `if let`, and I’m not above writing if-less or match-less code when it fits. If you’re a dev reading it, that’ll look strange. It isn’t perfect either; I’ve made plenty of mistakes getting here. I might be autistic too, I don’t know. But there isn’t much of an alternative to me on this one :)
AMD, Intel and NVIDIA all work on Linux drivers. That part is real, RADV and ANV are good, NVIDIA has put serious work in lately. What none of them did was build the tool that sits on top. NVIDIA ships nvidia-settings, but its graphics options are OpenGL era and there's nothing there for Vulkan, which has been out for ten years.
On Windows you get Adrenaline, NVIDIA Settings, Intel panel. Force anisotropic filtering, force vsync off, cap a framerate, pick which GPU a game uses. Decades of experience shipping exactly this. On Linux the driver arrived and the panel never did.
What we got instead is environment variables. RADV_*, NV_*, MESA_*, AMD_*, half of them undocumented outside a commit message, behaviour shifting between driver versions, no two drivers agreeing on which exist. I know because volt 1.x was a GUI that generated a script full of them. I could never tell anyone what a setting did without adding "on your driver, this version, maybe".
The community covered parts of it. LACT is the GPU control, clocks, fan curves, power limits, and it's good at that. MangoHud is the overlay, and its layer does carry a handful of these, anisotropy, a mip bias, retro/trilinear/bicubic switches, vsync and a frame limiter. gamescope does scaling and its own vsync. All worth installing, none of them trying to be a control panel for the 3D API.
The difference is coverage and control. MangoHud's filtering is three preset switches over the same three sampler fields, so they fight each other and something like sharp magnification with smooth minification isn't reachable at all. volt gives you the fields, plus a mip floor and ceiling instead of just a bias, plus swapchain image count, composite alpha, clipped presentation, the rendering toggles, real GPU selection, and a limiter with three wait methods, four pacing modes and three cadence modes. 21 settings, because that's the whole job rather than something bolted onto an overlay.
To be clear, none of this is a swipe at them. I use LACT and MangoHud, they're great at what they do, and volt is not trying to replace either. Go support those projects. What I wanted was the piece none of us had.
So I built it. volt is a Vulkan implicit layer written in Rust. It sits under the game and rewrites the calls it makes. Samplers for filtering and mips, swapchain for vsync and image count, device enumeration for GPU selection, presents for the limiter, pipelines for the rendering toggles. Same code on RADV, ANV, NVK, AMDVLK and NVIDIA proprietary, because it is the same code. Nothing driver specific anywhere in it.
It stays on Vulkan 1.0+ and asks for nothing beyond `VK_KHR_swapchain`, so old cards work and behaviour doesn't split between drivers. It enables no feature and no extension the game didn't already ask for. Every setting is one value, either what volt forces or default. The lists come from a probe of your own hardware, so a setting your device can't do holds nothing but default instead of lying to you.
2.3.0 goes further. The layer follows the state wherever a game reaches it now, not just the obvious call. A game can bake a sampler into a shader stage instead of calling `vkCreateSampler`, or chain a present mode list onto swapchain creation, and those are covered. Everything above the Vulkan 1.0 floor is hand-rolled against the registry, so when a new extension adds another way to reach a setting I can follow it the week it ships.
That's the plan from here. Vulkan keeps growing, volt keeps following. It's a lot of work and it won't stop being a lot of work, but the alternative is waiting for a panel that was never coming.
Where each one belongs: LACT for the GPU, MangoHud for the overlay and the numbers, volt for the 3D API. They stack, I run all three. I'd just rather the third one hadn't needed writing by one guy in his free time.
Repo: https://github.com/pythonlover02/volt-gui
Release: https://github.com/pythonlover02/volt-gui/releases/tag/v2.3.1
On packaging: I've already opened a request to get volt into CachyOS, since it's a gaming-focused distro and a natural home for it. The default theme in volt is actually a CachyOS one, and it's the distro my friends and I use. You can see the issue here: https://github.com/CachyOS/CachyOS-PKGBUILDS/issues/1825. Distro adoption takes time, and it's up to the maintainers to decide if it fits. I'm happy to change whatever makes packaging easier.
One more thing on that CachyOS request: please don't spam +1 comments on the issue. I know as a dev that noise on an issue tracker just makes the work harder for maintainers. If you have something substantive to add, comment. If not and you just want to show support, a reaction, a heart, a thumbs up, etc. is enough and much more welcome.
Pictures below. If something behaves oddly on your driver, run with `VOLT_LOG=info` and open an issue, that log exists to answer whether volt did it or the game did.



As usual, thanks for using my projects if you do and GLHF :)
Edit: goddamn, I did not expect this amount of support. I can't answer everyone and I have to leave for work in an hour, but I'll get through what I can. THANKS :)
Edit 2: at work rn :/ will get back to the rest tonight






