vkd3d 1.2 comes with compatibility improvements, shading and more

The project Wine has released a new version of the vkd3d 1.2 package with a Direct3D 12 implementation which works by translating the calls to the Vulkan graphics API.

This new version of vkd3d 1.2 contains various improvements, but of the main ones that stand out are the availability of libvkd3d-shader as a public library, shader support tessellation, as well as the flow output support.

The packageand includes libvkd3d libraries with Direct3D 12 implementations, libvkd3d-shader with model 4 and 5 shader translator and libvkd3d-utils with functions to simplify the migration of Direct3D 12 applications, as well as a set of demos, including the glxgears port to Direct3D 12. The project code is distributed licensed under LGPLv2.1.

Library libvkd3d supports most of the Direct3D 12 features, including graphics and computation functions, command lists and queues, heap descriptors and descriptors, root signatures, unordered access, samplers, command signatures, root constants, indirect representation, and so on.

libvkd3d-shader implements the translation of byte code 4 and 5 of the shading patterns in the SPIR-V intermediate representation. Vertices, pixels, tessellation, computational and simple geometry shaders, root signature serialization, and deserialization are supported.

The shader instructions include arithmetic, atomic and bitwise operations, data flow control and comparison operators, sampling, gathering and loading instructions, unordered access operations (UAV, Unordered access view).

At the current stage of development, not all calls to Direct3D 12 are implemented and the tests were mainly carried out on a set of demo applications. The release does not include features in development such as support for complex geometry shaders and tessellation, as well as a number of improvements related to Direct3D 12 basic methods and shaders. These features will be offered in a future release.

Main new features of Vkd3d 1.2

Of the most important changes that are presented in the new version, is the libvkd3d-shader library availability for use in third-party projects, since Various Direct3D 12 functions were added, such as:

  • Multi-sampling.
  • Reserved resources.
  • Instance data passing rates.
  • "Private data" API for all interfaces.
  • Shader resource view component mappings.
  • VK_KHR_draw_indirect_count extension.
  • Predicate / conditional representation.
  • Depth rendering without pixel shader.
  • Depth cutout. This requires the VK_EXT_depth_clip_enable extension.
  • Discard the rasterizer.
  • Dual source mixing.
  • Mapping of placed resources.
  • The ReadFromSubresource () and WriteToSubresource () ID3D12Resource methods.
  • Simultaneous access to multi-queue resources.
  • Null views. That is, views without an underlying resource.
  • Several more feature support inquiries.

In addition to this, Added support for converting, serializing and deserializing signatures is also highlighted root (vkd3d_serialize_versioned_root_signature () and vkd3d_create_versioned_root_signature_deserializer (), as well as support for streaming output.

Another change that stands out is the environment variable implementation: VKD3D_CONFIG to set options to change the behavior of libvkd3d and VKD3D_VULKAN_DEVICE to override the device for the Vulkan API.

Besides that added support for shading instructions bufinfo, eval_centroid, eval_sample_index, ld2ms, sample_b, sample_d, sample_info, samplepos and preliminary support for model 5.1 shaders.

And also support for OpenGL SPIR-V target environments. This allows SPIR-V produced by libvkd3d-shader to be used with GL_ARB_gl_spirv. This includes support for OpenGL atomic counters and combined samplers.

Finally if you want to know more about it about this new version, you can check the complete list of changes In the following link.

How to install vkd3d on Linux?

For those who are interested in being able to install vkd3d on their system, they should obtain the source code and proceed with the compilation, although for practical purposes or for those newbies, they can try this library without much effort. For this, they only have to install lutris and within its configurations.

As for those interested in compilation, they must obtain the code with:

git clone git://source.winehq.org/git/vkd3d.git/
./autogen.sh
./configure
make
../vkd3d/configure --build=i686-pc-linux-gnu "CPPFLAGS=-m32" "LDFLAGS=-m32"

Finally, the Vulkan layers must be enabled:

export VK_INSTANCE_LAYERS=VK_LAYER_LUNARG_standard_validation
VKD3D_CONFIG=vk_debug


Leave a Comment

Your email address will not be published. Required fields are marked with *

*

*

  1. Responsible for the data: Miguel Ángel Gatón
  2. Purpose of the data: Control SPAM, comment management.
  3. Legitimation: Your consent
  4. Communication of the data: The data will not be communicated to third parties except by legal obligation.
  5. Data storage: Database hosted by Occentus Networks (EU)
  6. Rights: At any time you can limit, recover and delete your information.