O projeto Wine lançou a versão do pacote vkd3d 1.16 com a implementação do Direct3D 12, que funciona através da transcrição de chamadas na API gráfica Vulkan. O pacote inclui as bibliotecas libvkd3d com a implementação do Direct3D 12, libvkd3d-shader com o tradutor das versões 4 e 5 dos shaders, e libvkd3d-utils com funções para facilitar a portabilidade de aplicações Direct3D 12, além de um conjunto de exemplos de demonstração, incluindo a porta do glxgears para o Direct3D 12. O código do projeto é disponibilizado sob a licença LGPLv2.1.
A biblioteca libvkd3d suporta a maior parte das funcionalidades do Direct3D 12, incluindo ferramentas para gráficos e computação, filas e listas de comandos, descritores e descritores de heap, assinaturas raiz, acesso não ordenado, Samplers, assinaturas de comandos, constantes raiz, renderização indireta, métodos Clear*() e Copy*(). Na libvkd3d-shader é implementada a tradução de bytecode de modelos de shaders para uma representação intermediária SPIR-V. Suportam-se shaders de vértices, pixel, tesselação, computacionais e de geometria simples, serialização e desserialização de assinatura raiz. Entre as instruções de shader, são implementadas operações aritméticas, atômicas e de bit, operadores de comparação e controle de fluxo de dados, instruções sample, gather e load, operações de acesso não ordenado (UAV, Unordered Access View).
Na nova versão:
- Apoio aos shaders DXIL (DirectX Intermediate Language) foi estabilizado e incluído por padrão.
- O compilador do idioma de shaders HLSL agora possui suporte inicial para shaders geométricos. Para as versões de shaders 1, 2 e 3, foi implementado o suporte a endereçamento indireto, módulos e limitações de valores.
- A biblioteca libvkd3d anunciou suporte para a versão 6.0 do modelo de shader. Na interface ID3D12Device1, foi implementado o método SetEventOnMultipleFenceCompletion(). Adicionado suporte à extensão Vulkan VK_KHR_zero_initialize_workgroup_memory para inicializar com zeros a memória para shaders. A extensão Vulkan VK_KHR_maintenance2 foi incluída como obrigatória, conforme proposto na especificação Vulkan 1.1.
- Foi adicionado suporte à desassembleia de shaders SPIR-V e efeitos binários «fx_2_0».
- Adicionado suporte experimental para endereçamento indireto de buffers constantes em GLSL (OpenGL Shading Language).
- Na implementação do idioma de shaders MSL (Metal Shading Language), utilizado pela Apple na API gráfica Metal, foi adicionada a capacidade de carregar texturas.
- Adicionado suporte a funções integradas do HLSL: AllMemoryBarrier(), AllMemoryBarrierWithGroupSync(), DeviceMemoryBarrier(), DeviceMemoryBarrierWithGroupSync(), GroupMemoryBarrier() e GroupMemoryBarrierWithGroupSync().
- Implementados os flags VKD3D_SHADER_COMPILE_OPTION_FEATURE_ZERO_INITIALIZE_WORKGROUP_MEMORY, VKD3D_SHADER_COMPONENT_INT64, VKD3D_SHADER_COMPONENT_FLOAT16, VKD3D_SHADER_COMPONENT_UINT16, VKD3D_SHADER_COMPONENT_INT16, VKD3D_SHADER_RESOURCE_DATA_NONE e VKD3D_SHADER_RESOURCE_DATA_UINT.
Fonte: opennet.ru
