A equipe de desenvolvimento do vkd3d anunciou a disponibilização da versão 2.0 da biblioteca de portabilidade 3D. O código-fonte pode ser baixado em vkd3d-2.0.tar.xz ou clonado diretamente dos repositórios Git:
- https://gitlab.winehq.org/wine/vkd3d.git
- https://codeberg.org/vkd3d/vkd3d.git
A lista completa de contribuidores está no arquivo AUTHORS do projeto.
Principais novidades
libvkd3d
- Recursos depth/stencil combinados podem ser criados sem a flag
D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL. - Variável de ambiente
VKD3D_DEBUGrecebe sintaxe estendida, permitindo controle fino do output de depuração (veja a seção Environment variables no README).
libvkd3d‑shader – suporte a HLSL
- Operações de store em memória compartilhada de grupos de threads.
- Operações atômicas (
Interlocked*) em UAVs e memória compartilhada. - Novo passe de eliminação de sub‑expressões comuns.
- Suporte inicial a loops nos perfis de shader model 2‑3.
- Melhor alocação de registradores temporários e hoisting de escrita de saída, crucial para SM 1‑3.
- Implementação das intrínsecas
tex3Dbias(),tex3Dlod()etexCUBElod(). - Novas semânticas de entrada/saída:
SV_ClipDistance,SV_CullDistanceeSV_StencilRef. - Correções em
InterlockedMin()/InterlockedMax()quando os operandos têm assinaturas diferentes. - Mapeamento de semânticas
VFACEeVPOSpara os nomes equivalentes de SM 4+ viaVKD3D_SHADER_COMPILE_OPTION_BACKCOMPAT_MAP_SEMANTIC_NAMES. - Dobra de expressões modulo em ponto flutuante em tempo de compilação.
- Escopo de variáveis declaradas em cláusulas
foragora persiste após o laço, alinhando‑se ao comportamento HLSL. - Análise de literais de ponto flutuante independente da locale do sistema.
FX (effects) source type
- Correção no parsing de índices de operandos dentro de blocos
eval(). - Reconhecimento da operação
umoddo FXLVM.
Legacy Direct3D byte‑code
- Suporte a novas instruções:
m4x4,m3x4,m4x3,m3x3,m3x2,phase,texdepth,texreg2ar,texreg2gb,texreg2rgb. - Modificadores de fonte
_dz,_db,_dw,_daparatexcrd/texld. - Registradores de entrada
vFaceevPospara pixel shaders. - Saídas de tamanho de ponto para SM 3 e clamp de saídas SM 1‑2 entre 0 e 1.
- DXIL passa a suportar ponteiros de referência avançada e valores de stencil especificados em pixel shaders.
- Alvo experimental MSL (Metal Shading Language) também aceita stencil reference.
- Assembly de shader Direct3D agora aceita constantes imediatas de 16 bits e novos flags globais (
64UAVs,ROVs,UAVLoadAdditionalFormats, etc.).
Novas interfaces
- Estrutura
vkd3d_shader_scan_denormal_mode_infopara consulta ao modo denormal de ponto flutuante. - Enum
VKD3D_SHADER_SPIRV_EXTENSION_KHR_FLOAT_CONTROLSindica suporte à extensão SPIR‑VKHR_float_controls. - Opções de compilação
VKD3D_SHADER_COMPILE_OPTION_DENORMAL_MODE_F16/F32/F64definem o modo denormal para 16, 32 e 64 bits. - Flag
VKD3D_SHADER_COMPILE_OPTION_CONST_GLOBAL_UNIFORMStrata todas as uniformes globais comoconstem fontes HLSL. - Compilação contra
VKD3D_SHADER_API_2_0falha se o modo denormal exigido não puder ser especificado, exigindo a extensão SPIR‑V correspondente.
libvkd3d‑utils
- Funções
D3DCompile(),D3DCompile2(),D3DCompile2VKD3D()eD3DPreprocess()aceitamD3D_COMPILE_STANDARD_FILE_INCLUDEcomo manipulador de includes. - A partir da versão do compilador 37,
D3DCompile2VKD3D()trata uniformes globais comoconst, a menos que a flagD3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITYseja usada.
Mudanças desde a versão 1.19
A atualização inclui centenas de commits de diversos contribuidores. Entre os destaques:
- Correções de parsing e melhorias no pré‑processador HLSL (Elizabeth Figura).
- Implementação de loops SM 3 sem necessidade de uniformes de limite (Francisco Casas).
- Validação de valores de sistema como
SV_VertexID,SV_RenderTargetArrayIndexe outros (Giovanni Mascellani). - Aprimoramentos de depuração e tracking de nível de log por unidade de tradução (vkd3d‑common).
- Testes ampliados para novas instruções, semânticas e comportamento de constante em buffers.
A lista completa de alterações está disponível no changelog oficial do projeto.
Como obter e compilar
-
Baixe o tarball:
wget https://dl.winehq.org/vkd3d/source/vkd3d-2.0.tar.xz tar -xf vkd3d-2.0.tar.xz -
Ou clone o repositório:
git clone https://gitlab.winehq.org/wine/vkd3d.git cd vkd3d git checkout v2.0 -
Siga as instruções de build no arquivo
README.mdpara compilarlibvkd3d,libvkd3d‑shadere as utilidades.
Impacto para desenvolvedores
A nova versão traz suporte aprimorado a recursos avançados de shaders, permitindo que aplicações que dependem de HLSL ou DXIL sejam traduzidas com maior fidelidade para Vulkan. As opções de controle de denormalização e as novas flags de compilação facilitam a otimização de desempenho em GPUs que exigem comportamento preciso de ponto flutuante. Além disso, o controle granular de debug simplifica a identificação de problemas em pipelines gráficos complexos.
Para quem mantém projetos baseados em Wine ou em camadas de compatibilidade DirectX‑Vulkan, a atualização para vkd3d 2.0 é altamente recomendada.