Pular para o conteúdo
DXVK 3.0 chega com novo compilador de shaders e suporte a descriptor heap

DXVK 3.0 chega com novo compilador de shaders e suporte a descriptor heap

DXVK 3.0 traz compilador dxbc-spirv, descriptor heap, melhorias no D3D9 e correções de bugs, otimizando memória e desempenho em jogos Linux.

A versão 3.0 do DXVK foi lançada em 25 de junho de 2024 pelo desenvolvedor doitsujin (Philip Rebohle). O update traz um novo compilador de shaders, adoção padrão da extensão Vulkan VK_EXT_descriptor_heap, aprimoramentos no suporte ao Direct3D 9 e diversas correções de bugs que impactam jogos populares no Linux.

Compilador de shaders baseado em dxbc-spirv

  • O DXVK passa a usar o dxbc-spirv para a compilação de shaders, substituindo o antigo tradutor legado para todos os modelos de shader suportados.
  • Benefícios:
    • Correção de falhas de renderização em títulos como Postal: Brain Damaged e Snowrunner (issues #3488 e Mesa #13251).
    • Código SPIR‑V mais compacto, reduzindo o consumo de memória em até 1 GiB em jogos como Overwatch e God of War.
    • Compilação totalmente delegada a worker threads, diminuindo tempos de inicialização e stutter em jogos como Days Gone e Final Fantasy XIV.
    • Cache de shaders intermediários armazenado em AppData/Local do prefixo Wine; caminho configurável via DXVK_SHADER_CACHE_PATH.

Importante para desenvolvedores: ao modificar o compilador, desative o cache com DXVK_SHADER_CACHE=0 para evitar o carregamento de shaders obsoletos.

Nota: fora de casos extremos, o novo compilador não traz ganho de performance geral.

Uso padrão do descriptor heap (VK_EXT_descriptor_heap)

  • A extensão VK_EXT_descriptor_heap passa a ser a implementação padrão nos drivers que a suportam, substituindo o modelo baseado em VK_EXT_descriptor_buffer introduzido na 2.7.
  • Resultados esperados:
    • Desempenho de CPU comparável ao modelo anterior.
    • Redução da penalidade de desempenho GPU observada em placas Nvidia.
  • Compatibilidade: drivers Nvidia >= 595.84; versões anteriores mantêm o modelo antigo por regressões de performance.
  • Mensagem de log indica o uso: info: Binding model: Descriptor heap.

Melhorias específicas para D3D9

Pipeline de função fixa

  • Implementação de ubershaders para o pipeline fixo, com variantes otimizadas compiladas em background. Elimina stutter em jogos como Unreal Tournament 2004 (PR #5192).

Otimizações de upload de buffers

  • Buffers agora são enviados sob demanda, limitando memória “in‑flight” e corrigindo falhas de endereço em jogos 32‑bit D3D9. Beneficia títulos sem Resizable BAR, como GTA IV (PR #5350).

Estado de multisampling

  • Quando as extensões VK_EXT_sample_locations e VK_EXT_extended_dynamic_state3 estão disponíveis, D3DRS_MULTISAMPLEANTIALIAS funciona corretamente, permitindo rasterização single‑sample em alvos multisampled. Corrige UI em Anno 1701, Men of War Assault Squad e outros.

Outras mudanças relevantes

Recursos compartilhados

  • Compatibilidade com a implementação upstream do Wine, dispensando patches específicos do Proton (PR #5257). O caminho legado será mantido temporariamente.

Controle de taxa de quadros

  • Variável de ambiente DXVK_FRAME_RATE foi removida. Recomenda‑se usar limitadores externos como Gamescope ou MangoHUD. O limitador interno ainda pode ser ativado via dxvk.maxFrameRate = n no arquivo de configuração.

Correções de bugs e otimizações gerais

  • Diversas validações Vulkan foram ajustadas.
  • Correções de processamento de vértices em D3D8/9 para jogos como Vietcong e The I of the Dragon (PR #5656).
  • Ajustes de cálculo de neblina fixa em D3D8/9 (affecting Sea Dogs).
  • Uso da extensão VK_EXT_border_color_swizzle para formatos de textura D3D9 problemáticos (PR #5390).
  • Redução de sincronizações GPU desnecessárias, beneficiando passes de renderização independentes e shaders de computação, especialmente em GPUs com VK_KHR_unified_image_layouts.
  • A fila de transferência assíncrona é empregada de forma mais agressiva (PR #5713).
  • Suporte ao recurso Class Linkage do D3D11, embora ainda não haja jogos conhecidos que o utilizem.
  • Otimizações de caminhos D3D9 comuns, reduzindo carga de CPU em Resident Evil 6.
  • Redução de uploads de constantes de shader D3D9, diminuindo uso de memória e melhorando desempenho (PR #5686, #5689).

Correções específicas de jogos

  • Bioshock Infinite: fim do esgotamento do sampler pool que causava flickering (PR #5376).
  • Borderlands 2: correção de grama tremendo com filtragem anisotrópica (PR #5549).
  • Colin McRae Rally 3: renderização correta com SilentPatch (PR #5213).
  • Fallout New Vegas: resolução de profundidade em mods específicos (PR #5665).
  • Insurgency & CS:GO: contorno de bug que removia texturas (PR #5602).
  • Max Payne: correção de crash ao usar múltiplos monitores (PR #5221).
  • Total War : Pharaoh: solução para flicker no menu principal e problema de desempenho com MSAA (PR #5517).
  • Entre outros títulos listados no changelog completo.

Requisitos de driver

A partir desta versão, o DXVK exige suporte às extensões introduzidas no Vulkan 1.4. Em prática, isso significa que drivers capazes de executar Vulkan 1.4 são necessários. Usuários devem garantir que seus drivers não estejam desatualizados por vários anos.

Aviso para GPUs AMD RDNA 1/2 no Windows

  • Embora a versão funcione, drivers Windows para RDNA 1/2 não recebem mais atualizações de recursos, permanecem no modelo de binding legado e apresentam quedas de desempenho significativas. Recomenda‑se permanecer na série 2.x do DXVK ou migrar para Linux.

Como obter a versão 3.0

A release está disponível na página oficial do projeto no GitHub: https://github.com/doitsujin/dxvk/releases/tag/v3.0. O pacote inclui arquivos binários, notas de release detalhadas e instruções de instalação para usuários de Wine/Proton.

Para quem já utiliza versões anteriores, recomenda‑se limpar o cache de shaders (DXVK_SHADER_CACHE_PATH) e revisar as configurações de descriptor heap conforme a GPU e driver em uso.

Este artigo foi elaborado com base nas notas de lançamento oficiais do DXVK 3.0, preservando links e referências técnicas relevantes.

Via github.com. Você pode conferir o post original em inglês:

Version 3.0

Por · Última atualização: