El proyecto Wine ha publicado una nueva versión del paquete vkd3d 1.2 con una implementación de Direct3D 12 que funciona traduciendo las llamadas a la API de gráficos Vulkan.
Esta nueva version de vkd3d 1.2 contiene diversas mejoras, pero de las principales que se destacan son la disponibilidad de libvkd3d-shader como biblioteca pública, el soporte para sombreadores de teselación, así como el soporte de salida de flujo.
El paquete incluye bibliotecas libvkd3d con implementaciones de Direct3D 12, libvkd3d-shader con traductor de shader modelo 4 y 5 y libvkd3d-utils con funciones para simplificar la migración de aplicaciones Direct3D 12, así como un conjunto de demostraciones, incluido el puerto glxgears a Direct3D 12. El código del proyecto se distribuye licenciado bajo LGPLv2.1.
La biblioteca libvkd3d admite la mayoría de las funciones de Direct3D 12, incluidas las funciones de gráficos y computación, listas y colas de comandos, descriptores y descriptores de montón, firmas raíz, acceso no ordenado, muestreadores, firmas de comandos, constantes raíz, representación indirecta, etc.
Libvkd3d-shader implementa la traducción del código de bytes 4 y 5 de los modelos de sombreado en la representación intermedia SPIR-V. Se admiten vértices, píxeles, teselación, sombreadores de geometría simple y computacional, serialización de firmas raíz y deserialización.
Las instrucciones del sombreador incluyen operaciones aritméticas, atómicas y bit a bit, operadores de control de flujo de datos y comparación, instrucciones de muestreo, recopilación y carga, operaciones de acceso no ordenado (UAV, Vista de acceso no ordenado).
En la etapa actual de desarrollo, no todas las llamadas a Direct3D 12 están implementadas y las pruebas se llevaron a cabo principalmente en un conjunto de aplicaciones de demostración. La versión no incluye características en desarrollo como soporte para teselación y sombreadores de geometría compleja, así como una serie de mejoras relacionadas con sombreadores y métodos básicos de Direct3D 12. Estas características se ofrecerán en una versión futura.
Principales novedades de Vkd3d 1.2
De los cambios mas importantes que se presentan en la nueva version, es la disponibilidad de la biblioteca libvkd3d-shader para su uso en proyectos de terceros, pues se añadieron diversas funciones Direct3D 12, tales como:
- Multi-sampling.
- Recursos reservados.
- Tasas de paso de datos de instancia.
- API de «datos privados» para todas las interfaces.
- Asignaciones de componentes de vista de recursos de sombreador.
- Extensión VK_KHR_draw_indirect_count.
- Representación predicada / condicional.
- Representación de profundidad sin sombreador de píxeles.
- Recorte de profundidad. Esto requiere la extensión VK_EXT_depth_clip_enable.
- Descarte del rasterizador.
- Mezcla de doble fuente.
- Mapeo de recursos colocados.
- Los métodos ReadFromSubresource () y WriteToSubresource () ID3D12Resource.
- Acceso simultáneo a recursos de múltiples colas.
- Vistas nulas. Es decir, vistas sin un recurso subyacente.
- Varias consultas de soporte de funciones más.
Además de esto, también se destaca el soporte añadido para convertir, serializar y deserializar firmas root (vkd3d_serialize_versioned_root_signature () y vkd3d_create_versioned_root_signature_deserializer (), asi como también el soporte para salida de transmisión.
Otro de los cambio que se destaca es la implementación de variables de entorno: VKD3D_CONFIG para establecer opciones para cambiar el comportamiento de libvkd3d y VKD3D_VULKAN_DEVICE para anular el dispositivo para la API de Vulkan.
Además de que se agregó soporte para las instrucciones de sombreado bufinfo, eval_centroid, eval_sample_index, ld2ms, sample_b, sample_d, sample_info, samplepos y el soporte preliminar para shaders modelo 5.1.
Y también el soporte para entornos de destino OpenGL SPIR-V. Esto permite SPIR-V producido por libvkd3d-shader para ser utilizado con GL_ARB_gl_spirv. Esto incluye soporte para contadores atómicos OpenGL y muestreadores combinados.
Finalmente si quieres conocer mas al respecto sobre esta nueva version, puedes consultar la lista completa de cambios en el siguiente enlace.
¿Cómo instalar vkd3d en Linux?
Para los que estén interesados en poder instalar vkd3d en su sistema, deberán de obtener el código fuente y proceder a realizar la compilación, aunque para fines prácticos o para aquellos novatos, pueden probar esta biblioteca sin mucho esfuerzo. Para ello solamente deben instalar lutris y dentro de las configuraciones de este.
En cuanto a los interesados en la compilación deben obtener el código con:
git clone git://source.winehq.org/git/vkd3d.git/
./autogen.sh
./configure
make
../vkd3d/configure --build=i686-pc-linux-gnu "CPPFLAGS=-m32" "LDFLAGS=-m32"
Finalmente se deberán habilitar las capas de Vulkan:
export VK_INSTANCE_LAYERS=VK_LAYER_LUNARG_standard_validation
VKD3D_CONFIG=vk_debug
Fuente obtenida de: https://blog.desdelinux.net/vkd3d-1-2-llega-con-mejoras-de-compatibilidad-sombreado-y-mas/