Vkd3d, Wine’s library for translating Direct3D to Vulkan, released version 2.1, with most of the work focused on shader compilation, compatibility, and reflection.
One of the biggest improvements concerns HLSL, Microsoft’s shader programming language. The release fixes a compiler bug involving nested function calls, where different arguments could incorrectly use the same result.
The shader compiler gains a new optimization pass that removes unused data to make older Direct3D shaders behave more like when compiled with Microsoft’s tools. Support for half-precision arithmetic has expanded, alongside stricter checking of shader inputs and outputs.
Compatibility with older Direct3D shader bytecode has also improved, with Vkd3d 2.1 adding support for more legacy instructions and modifiers to handle a wider range of older shader code correctly.
On the Vulkan side, the SPIR-V backend gains additional numeric conversion support, particularly for shaders originating from DXIL, the intermediate format used by modern Direct3D.
Work continues on Vkd3d’s experimental GLSL output. The backend can now handle more advanced shader features, including shared memory, atomic operations, barriers, indirect input access, and additional compute shader inputs.
Another major part of the release is improved shader reflection. Reflection allows software to inspect a compiled shader and retrieve information about its variables, resources, inputs, outputs, and other properties.
Moreover, Vkd3d 2.1 adds many previously missing reflection capabilities and extends support beyond Direct3D 12 to Direct3D 10 and 11 interfaces as well.
The release also improves compatibility with older Microsoft shader compiler behavior, especially around half-precision variables, and introduces new preprocessing and reflection functionality to emulate specific versions of Microsoft’s compiler more closely.
Finally, Vkd3d’s command-line tools receive smaller improvements. The shader compiler gains an option for half-precision compatibility, while the DXBC utility can replace individual sections inside compiled shader containers instead of rebuilding them entirely.
For additional details, see the changelog. Vkd3d 2.1 is available as source code from WineHQ.
