Pular para o conteúdo
vkd3d 2.0 chega com suporte avançado a shaders e melhorias de depuração

vkd3d 2.0 chega com suporte avançado a shaders e melhorias de depuração

Versão 2.0 do vkd3d traz novas APIs, otimizações de shaders HLSL, suporte a denormalização e controle aprimorado de debug.

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_DEBUG recebe 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() e texCUBElod().
  • Novas semânticas de entrada/saída: SV_ClipDistance, SV_CullDistance e SV_StencilRef.
  • Correções em InterlockedMin()/InterlockedMax() quando os operandos têm assinaturas diferentes.
  • Mapeamento de semânticas VFACE e VPOS para os nomes equivalentes de SM 4+ via VKD3D_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 for agora 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 umod do 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, _da para texcrd/texld.
  • Registradores de entrada vFace e vPos para 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_info para consulta ao modo denormal de ponto flutuante.
  • Enum VKD3D_SHADER_SPIRV_EXTENSION_KHR_FLOAT_CONTROLS indica suporte à extensão SPIR‑V KHR_float_controls.
  • Opções de compilação VKD3D_SHADER_COMPILE_OPTION_DENORMAL_MODE_F16/F32/F64 definem o modo denormal para 16, 32 e 64 bits.
  • Flag VKD3D_SHADER_COMPILE_OPTION_CONST_GLOBAL_UNIFORMS trata todas as uniformes globais como const em fontes HLSL.
  • Compilação contra VKD3D_SHADER_API_2_0 falha se o modo denormal exigido não puder ser especificado, exigindo a extensão SPIR‑V correspondente.

libvkd3d‑utils

  • Funções D3DCompile(), D3DCompile2(), D3DCompile2VKD3D() e D3DPreprocess() aceitam D3D_COMPILE_STANDARD_FILE_INCLUDE como manipulador de includes.
  • A partir da versão do compilador 37, D3DCompile2VKD3D() trata uniformes globais como const, a menos que a flag D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY seja 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_RenderTargetArrayIndex e 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

  1. Baixe o tarball:

    wget https://dl.winehq.org/vkd3d/source/vkd3d-2.0.tar.xz
    tar -xf vkd3d-2.0.tar.xz
  2. Ou clone o repositório:

    git clone https://gitlab.winehq.org/wine/vkd3d.git
    cd vkd3d
    git checkout v2.0
  3. Siga as instruções de build no arquivo README.md para compilar libvkd3d, libvkd3d‑shader e 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.

Via gitlab.winehq.org. Você pode conferir o post original em inglês:

vkd3d 2.0 release

Por · Última atualização: