El proyecto Wine ha publicado la versión del paquete vkd3d 1.13 con la implementación de Direct3D 12, que funciona a través de la traducción de llamadas en la API gráfica Vulkan. El paquete incluye las bibliotecas libvkd3d con la implementación de Direct3D 12, libvkd3d-shader con el traductor de sombreadores modelo 4 y 5, y libvkd3d-utils con funciones para facilitar el portado de aplicaciones de Direct3D 12, así como un conjunto de ejemplos de demostración, incluido el puerto glxgears a Direct3D 12. El código del proyecto se distribuye bajo la licencia LGPLv2.1.
La biblioteca libvkd3d soporta la mayor parte de las características de Direct3D 12, incluyendo herramientas para gráficos y cálculos, colas y listas de comandos, descriptores y descriptores de montón, firmas raíz, acceso no ordenado, Samplers, firmas de comandos, constantes raíz, renderizado indirecto, métodos Clear*() y Copy*(). En libvkd3d-shader se implementa la traducción del bytecode de modelos de shaders a la representación intermedia SPIR-V. Se soportan shaders de vértices, píxeles, teselación, cómputo y shaders geométricos simples, así como la serialización y deserialización de la firma raíz. Se han implementado operaciones aritméticas, atómicas y bit a bit, operadores de comparación y control de flujo, instrucciones sample, gather y load, y operaciones de acceso no ordenado (UAV, Unordered Access View).
En la nueva versión:
- Se ha añadido soporte para el desenrollado de bucles en el compilador HLSL (optimización que sustituye las operaciones cíclicas por varias copias consecutivas de código para un uso más eficiente del caché del procesador y reducción de bifurcaciones).
- Se ha añadido soporte para el compilador de efectos para algunos objetos de estado del modelo de sombreadores cuatro.
- Se ha asegurado el soporte para los tipos del modelo de sombreadores cuatro: BlendState, ComputeShader, DomainShader, GeometryShader, HullShader, DepthStencilState y RasterizerState, así como para las funciones OMSetRenderTargets(), SetBlendState(), SetComputeShader(), SetDomainShader(), SetGeometryShader(), SetHullShader(), SetPixelShader(), SetVertexShader(), SetDepthStencilState() y SetRasterizerState().
- En el compilador de sombreadores se ha implementado el soporte para el análisis y almacenamiento en varios formatos de los valores de inicialización para variables globales, parámetros de funciones y anotaciones.
- Se ha añadido soporte para el espacio de registros del modelo de sombreadores 5.1.
- Se han implementado funciones incorporadas tex1D(), tex2D(), tex3D(), texCUBE(), asint(), f16tof32(), faceforward(), GetRenderTargetSampleCount(), rcp(), tex2Dbias(), tex1Dgrad(), tex2Dgrad(), tex3Dgrad() y texCUBEgrad().
- En libvkd3d se ha añadido la interfaz ID3D12CommandList6 y se ha implementado la posibilidad de crear texturas cuya compresión se realiza a nivel de bloques individuales (por ejemplo, los bloques de 4×4 píxeles se comprimen de forma separada).
- Se ha añadido soporte para la estructura vkd3d_shader_parameter_info y los parámetros VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32, VKD3D_SHADER_PARAMETER_NAME_ALPHA_TEST_FUNC, VKD3D_SHADER_PARAMETER_NAME_ALPHA_TEST_REF, VKD3D_SHADER_PARAMETER_NAME_FLAT_INTERPOLATION y VKD3D_SHADER_PARAMETER_TYPE_BUFFER.
Fuente: opennet.ru
