Después de un año y medio de desarrollo, el proyecto Wine ha publicado la versión del paquete vkd3d 1.3 con la implementación de Direct3D 12, que funciona a través de la traducción de llamadas a la API gráfica Vulkan. El paquete incluye las bibliotecas libvkd3d con la implementación de Direct3D 12, libvkd3d-shader con el traductor de los modelos de shaders 4 y 5, y libvkd3d-utils con funciones para facilitar la portación de aplicaciones Direct3D 12, así como un conjunto de ejemplos demostrativos, incluyendo el puerto de glxgears a Direct3D 12. El código del proyecto se distribuye bajo la licencia LGPLv2.1.
La biblioteca libvkd3d admite la mayoría de las características de Direct3D 12, incluyendo herramientas para gráficos y computación, colas y listas de comandos, descriptores y descriptores de montones, firmas de raíz, acceso no ordenado, samplers, firmas de comando, constantes de raíz, renderizado indirecto, métodos Clear*() y Copy*().
En libvkd3d-shader se ha implementado la traducción de bytecode de los modelos de sombreado 4 y 5 a representación intermedia SPIR-V. Se admiten sombreadores de vértices, píxeles, teselación, computacionales y simples geométricos, así como la serialización y deserialización de la firma raíz. Se han implementado instrucciones de sombreadores para operaciones aritméticas, atómicas y de bits, operadores de comparación y control del flujo de datos, instrucciones sample, gather y load, operaciones de acceso desordenado (UAV, Unordered Access View).
Entre las novedades más significativas en Vkd3d 1.3 se encuentran:
- Se añadió soporte inicial para la compilación y el preprocesamiento de shaders en el lenguaje HLSL (High-Level Shader Language), disponible desde DirectX 9.0.
- Se añadió soporte para arreglos de descriptores definidos en el modelo de shaders 5.1.
- Se ha proporcionado soporte para operaciones con números de punto flotante de doble precisión en shaders, direccionamiento indirecto para shaders de teselación, exportación de stencil desde shaders, modificador de shaders 'precise' y barreras globales para recursos en memoria.
- Se implementó la posibilidad de desensamblar shaders de Direct3D desde bytecode a representación ensambladora.
- Se añadió soporte para analizar el formato antiguo de bytecode de Direct3D, utilizado en los modelos de shaders Direct3D 1, 2 y 3.
- En libvkd3d se han añadido características de Direct3D 12, como firmas de raíz, contadores de vista con acceso no ordenado, operadores lógicos de fusión para la salida y el modo de direccionamiento de texturas mirror_once. Se añadió la estructura vkd3d_host_time_domain_info.
Fuente: opennet.ru
