Skip to content

2.4.0 Released

Latest

Choose a tag to compare

@pythonlover02 pythonlover02 released this 19 Sep 04:55
· 1 commit to main since this release

Changes 2.4.0

Mostly fixing nits and making the layer more spec legal on the edge cases. If a forced value would break something it's tied to, volt now keeps the game value and logs why.

  • Alpha To Coverage only offers off now, forcing it on needs the shader help and volt never touches shaders.
  • Linear filtering is only forced onto samplers already using linear somewhere.
  • Mip Floor / Mip Ceiling drop a bound that would cross the other one instead of swapping them.
  • Weird samplers (unnormalized, subsampled, image processing, ycbcr) are left alone on the fields they can't change, and samplers using cubic filtering don't get anisotropy.
  • LOD bias is left alone where the game enabled the portability subset.
  • Only forced values get clamped now, the game own LOD bias and image count pass through untouched.
  • Sample shading is never turned on where the game enabled mixed framebuffer samples.
  • Present Mode only offers the core modes and only forces over one of them, a mode an extension defines is left alone. Chained mode lists now follow the forced one.
  • Present mode isn't forced where the game set swapchain flags or a scaling node, and image count is left alone on shared present modes.
  • Composite alpha is now narrowed in the surface capabilities too, same as image count.
  • Where a surface query fails, the setting it gates isn't forced.
  • volt now hooks vkGetPipelineKeyKHR and vkCreatePipelineBinariesKHR, so pipeline keys and binaries see the same rebuilt create info as the pipeline itself.
  • vkQueuePresentKHR now rebuilds a chained present mode list to match the forced mode.
  • Device groups are narrowed to the chosen GPU instead of dropped or kept whole.
  • Every hook is only handed out where the game enabled something that provides it.
  • volt negotiates the loader interface version instead of assuming it, and no longer answers the instance enumeration calls itself.
  • The frame limiter is now kept per swapchain per device, and presents with several swapchains wait on all of them.
  • The probe checks every call it makes before making it. It exits 2 where the device needs support the loader lacks, and skips a backend instead of forcing it. Device facts are recorded at enumeration, so the device cards fill either way.
  • NaN and infinity in a profile are ignored with a warning.
  • The GUI validates new profile names the same way the layer does.
  • Log lines now read asked A, applied B or say why a setting didn't land, once per device for each distinct pair.

Profiles carry over, except alpha_to_coverage = "on" and present or alpha modes volt has no name for. The GUI resets those to default and tells you which.

Why bother if it already worked? Newer Intel, AMD and NVIDIA Vulkan drivers are kinda forgiving (as long as it isn't SPIRV), other drivers might not be, ARM iGPUs for example, or older, less supported or unsupported ones. Staying in spec means a driver update or new hardware shouldn't suddenly break things :), or that if it breaks, then i am not at fault.

volt 2.4.0 should cover and work on all Vulkan drivers up to 1.4.363, since that's the version i have been working on.

This rewrite was a mess though and the git history is a little messy right now, i tried to clean it up as much as i could, doing resets and pushing again to the private branch, but there's only so much i can do, still everything is working as intended rn and if something isn't i will fix it. I originally intended it to be released 2 days after 2.3.1, but then i found one non spec following code path, and another, and another. None of them are something you would usually see, because the main drivers let you get away with undefined behaviour. That doesn't mean it's "good" for the kind of layer volt is. The amount of work isn't a big issue either, since volt will probably stay at 21 settings and just hook new paths as Vulkan grows.

volt isn't intended to be a gamechanger, just give you something that Linux should have had long ago :)

Requirements

  • Layer: Vulkan 1.0+ with VK_KHR_swapchain, Linux x86_64 (and i686 for
    32-bit games)
  • Probe: volt-probe, built and installed alongside the launcher. Every
    device-backed option list is read through it. It loads libxcb and
    libwayland-client at runtime and needs neither.

Native aarch64 builds are not provided; see the README for FEX-Emu / Box64.

Builds

  • Built inside rust:1.85.1-bookworm (Debian 12, glibc 2.36), so anything
    newer works and anything older will not. x86_64 only.
  • The archive is a ready to install tree: unpack it, then sudo make install or make install-user installs without compiling anything.
  • Flatpak extensions ship in the archive but are not installed by default: make flatpak-install-user (or sudo make flatpak-install).
  • For more, read the README
    or the Welcome window the program shows on first run.

Extras

We got an icon LETS GOOO

Two blue capybaras (local friendly pal from where i live) doing a V (for volt), with two apples and a heart at the back. It was made by a friend who isn't sure yet about having socials for his art, so as he asked, his name stays private for now. If he changes his mind i will add links to his work.

It's also what the tray shows now, and make installs it instead of the old screenshot.

ko-fi

That's all for now, thank you for using my projects! If you can, please consider
donating, and as always, GLHF!

Release: