El proyecto Wine ha publicado la versión del paquete vkd3d 1.11 con la implementación de Direct3D 12, que funciona a través de la traducción de llamadas al API gráfico Vulkan. El paquete incluye las bibliotecas libvkd3d con la implementación de Direct3D 12, libvkd3d-shader con el traductor de modelos de sombreado 4 y 5, y libvkd3d-utils con funciones que facilitan la portación de aplicaciones Direct3D 12, así como un conjunto de ejemplos de demostración, incluyendo 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 funcionalidades de Direct3D 12, incluyendo herramientas para gráficos y cálculos, colas y listas de comandos, descriptores y descriptores de montones, firmas raíz, acceso desordenado, Samplers, firmas de comandos, constantes raíz, renderizado indirecto, métodos Clear*() y Copy*(). En libvkd3d-shader se implementó la traducción de bytecode de versiones 4 y 5 de modelos de shaders a la representación intermedia SPIR-V. Se soportan shaders de vértices, píxeles, teselación, cómputo y de geometría simple, así como la serialización y deserialización de la firma raíz. Se han implementado instrucciones de shaders para operaciones aritméticas, atómicas y bitwise, operadores de comparación y control del flujo de datos, instrucciones sample, gather y load, y operaciones de acceso desordenado (UAV, Unordered Access View).
En la nueva versión:
- Se ha añadido soporte inicial para la compilación de bytecode antiguo de Direct3D a un representación intermedia de sombreadores SPIR-V.
- Se ha añadido soporte inicial en el compilador HLSL para la compilación de perfiles de efectos Direct3D ("fx_2_0", "fx_4_0", "fx_4_1" y "fx_5_0").
- Se ha añadido soporte experimental para la compilación del lenguaje intermedio DXIL (DirectX Intermediate Language) a representación SPIR-V y a instrucciones ensambladoras de sombreadores Direct3D.
- Se ha añadido soporte en HLSL para los perfiles "fx_2_0", "fx_4_0", "fx_4_1" y "fx_5_0", implementadas las funciones integradas acos(), asin(), atan() y atan2(), y se ha proporcionado soporte para recursos "Buffer".
- Se ha añadido una optimización que realiza la actualización de descriptores en modo asíncrono, lo que puede llevar a una aceleración de aplicaciones que actualizan un gran número de descriptores en cada fotograma.
- Se ha asegurado el uso de las extensiones de Vulkan VK_EXT_mutable_descriptor_type y VK_EXT_shader_viewport_index_layer para mejorar la eficiencia en el manejo del conjunto de descriptores y acelerar el renderizado de arreglos de sombreadores de vértices y de teselación.
- Se ha añadido soporte para las interfaces ID3D12Device7 y ID3D12Resource2. Se ha añadido el método GetResourceAllocationInfo1() a la interfaz ID3D12Device4.
- Se ha añadido soporte para las interfaces D3DReflect() y D3DDisassemble().
- Se han implementado las consultas de verificación D3D12_FEATURE_D3D12_OPTIONS6, D3D12_FEATURE_D3D12_OPTIONS7, D3D12_FEATURE_D3D12_OPTIONS8, D3D12_FEATURE_D3D12_OPTIONS9, D3D12_FEATURE_D3D12_OPTIONS10, D3D12_FEATURE_D3D12_OPTIONS11, D3D12_FEATURE_D3D12_OPTIONS12, D3D12_FEATURE_D3D12_OPTIONS13.
- Se han añadido nuevas opciones de compilación: VKD3D_SHADER_COMPILE_OPTION_FEATURE, VKD3D_SHADER_COMPILE_OPTION_FEATURE_INT64, VKD3D_SHADER_COMPILE_OPTION_FEATURE_FLOAT64, VKD3D_SHADER_API_VERSION_1_10 y VKD3D_SHADER_SPIRV_EXTENSION_EXT_VIEWPORT_INDEX_LAYER.
- Se han involucrado las extensiones de Vulkan VK_KHR_android_surface, VK_KHR_wayland_surface, VK_KHR_win32_surface, VK_KHR_xlib_surface, VK_EXT_metal_surface y VK_MVK_ios_surface en las funciones D3D12CreateDeviceVKD3D() y D3D12CreateDevice().
Fuente: opennet.ru
