Wine's VKD3D 1.7 Implements More Direct3D 12 Functionality Atop Vulkan

Written by Michael Larabel in WINE on 24 March 2023 at 10:15 AM EDT. 7 Comments
Not to be confused with Valve's downstream, VKD3D-Proton, that is used by Steam Play but Wine's VKD3D codebase itself is out today with a new version of this Direct3D 12 on Vulkan implementation.

CodeWeavers' Henri Verbeet today released VKD3D 1.7 as the newest version of this Direct3D 12 implementation relied upon by the upstream Wine code. As with most VKD3D releases, it's about implementing more D3D12/HLSL functionality with more intrinsics now being in place as well as there now being improved Shader Model 1/2/3 profiles support, compute shader improvements, and more.
- New features for the HLSL source type:
- Support for calling user-defined functions.
- Support for array parameters to user-defined functions.
- Much improved support for the Direct3D shader model 1/2/3 profiles.
- Support for the SV_DispatchThreadID, SV_GroupID, and SV_GroupThreadID compute shader system-value semantics.
- Support for the optional "offset" parameter of the texture object Load() method.
- Support for the all() intrinsic function.
- Support for the distance() intrinsic function.
- Support for the exp() and exp2() intrinsic functions.
- Support for the frac() intrinsic function.
- Support for the lit() intrinsic function.
- Support for the reflect() intrinsic function.
- Support for the sin() and cos() intrinsic functions.
- Support for the smoothstep() intrinsic function.
- Support for the sqrt() and rsqrt() intrinsic functions.
- Support for the step() intrinsic function.
- Support for the transpose() intrinsic function.
- Support for the case-insensitive variants of the "float" and "dword" data types.
- Partial support for minimum precision data types like "min16float". These are currently interpreted as their regular counterparts.
- Improved constant propagation support, in particular to constant propagation through swizzles.

- HLSL static variables are now properly zero-initialised.

- The Direct3D shader model 4 and 5 disassembler outputs sample counts for multi-sampled resource declarations.

- New interfaces:
- vkd3d_shader_parse_dxbc() provides support for parsing DXBC blobs.
- vkd3d_shader_serialize_dxbc() provides support for serialising DXBC blobs.
- vkd3d_shader_free_dxbc() is used to free vkd3d_shader_dxbc_desc structures, as returned by vkd3d_shader_parse_dxbc().
- The VKD3D_SHADER_COMPILE_OPTION_WRITE_TESS_GEOM_POINT_SIZE compile option can be used to specify whether SPIR-V shaders targeting Vulkan environments should write point sizes for geometry and tessellation shaders. If left unspecified, point sizes will be written.

VKD3D 1.7 should be pulled into the next Wine bi-weekly development release while those wanting this D3D12-on-Vulkan library straight away can fetch the new VKD3D release via WineHQ Git.
Related News
About The Author
Michael Larabel

Michael Larabel is the principal author of and founded the site in 2004 with a focus on enriching the Linux hardware experience. Michael has written more than 20,000 articles covering the state of Linux hardware support, Linux performance, graphics drivers, and other topics. Michael is also the lead developer of the Phoronix Test Suite, Phoromatic, and automated benchmarking software. He can be followed via Twitter, LinkedIn, or contacted via

Popular News This Week