lançamento do projeto , que fornece a implementação do Direct3D 9, funcionando através da tradução de chamadas na API gráfica . O projeto é baseado na base de código do projeto , que foi ampliada com suporte ao Direct3D 9. Comparado com a implementação do Direct3D 9 baseada no WineD3D, o D9VK permite alcançar um desempenho mais elevado, pois a tradução do Direct3D 9 através do OpenGL é mais lenta do que a tradução através do Vulkan.
D9VK pode ser usado para executar aplicações e jogos 3D no Linux usando o Wine. Suporta a execução da maioria dos jogos baseados no Direct3D 9, que utilizam a versão 2 ou 3 do Shader Model. O código do projeto é licenciado sob a licença Zlib. Para usar o D9VK, é necessário ter drivers com suporte à API Vulkan, como AMD RADV 18.3+, NVIDIA 415.22+, Intel ANV 19.0+ e AMDVLK.
Principais melhorias:
- Foi implementada a possibilidade de usar mais de 4 GB de memória de vídeo em aplicações de 32 bits, o que resolveu problemas ao executar mods nos jogos Skyrim e Oblivion;
- Foi incluído o processamento assíncrono da saída do resultado da renderização na tela (etapa de apresentação). Para reduzir latências no fluxo principal de renderização, o processamento da saída é realizado na thread de submissão de comandos;
- Foram removidos pontos de sincronização desnecessários da thread de comando ao extrair dados solicitados;
- O código para determinar o tempo interno foi alterado para usar um timer específico da plataforma, o que ajudou a resolver problemas com o comportamento incorreto do high_resolution_clock do MinGW;
- Foi assegurada a liberação de buffers adiados MANAGED e SYSTEMMEM na fase de execução do PrepareDraw, o que resolveu problemas de desempenho em jogos como Risen e Legend of the Heroes: Trails of the Sky;
- Suporte adicionado , que possibilitou a implementação correta da renderização em jogos como SpinTyres e Mudrunner;
- Foi melhorada a compatibilidade com (D3D9Ex). Levou-se em conta a especificidade do tratamento de ResetEx e Reset;
- Foram realizados limpeza e refatoração do código;
- Foi assegurado o mapeamento direto dos buffers WRITEONLY, o que pode impactar positivamente o desempenho e contornar um erro no jogo
Counter-Strike: Global Offensive, que leva à continuação da gravação no buffer após sua liberação; - Implementado o método , permitindo o uso de caixas de diálogo em aplicações em tela cheia;
- Suporte implementado , incluindo , necessário para SWVP (SoftWare Vertex Processing);
- O contador do sampler foi refeito, exibindo-se sobre a imagem atual (heads-up display, HUD);
- Adicionada a opção d3d9.dialogBoxMode, que pode ser usada para desativar o funcionamento apenas no modo de tela cheia;
- Foram feitas otimizações de desempenho e resolvidos problemas que se manifestavam ao jogar GTA: San Andreas, The Masquerade Bloodlines, Max Payne 2, The Sims 2, Silent Hunter 3, Senran Kagura Shinovi, Dungeons and Dragons, Crysis, Metal Slug X, ANGLE, Need for Speed: Carbon e Risen 1.
Adicionalmente, pode-se destacar desenvolvedor do projeto (implementação de DXGI, Direct3D 10 e Direct3D 11 sobre a API Vulkan) se concentrar temporariamente apenas na correção de erros, retardando a expansão da funcionalidade. Tal desejo por preocupações sobre a redução da qualidade da base de código e a dificuldade de manutenção no futuro. Cada atualização da versão 1.4.x gera reclamações sobre mudanças regressivas que não podem ser reproduzidas, localizadas e corrigidas.
Esses problemas exigem análise das causas de sua ocorrência, caso contrário, deixar as falhas não corrigidas enquanto a funcionalidade continua a ser expandida pode apenas agravar a situação e transformar o processo de manutenção em um pesadelo. Entre os planos que o desenvolvedor do DXVK pretende implementar antes de passar para o modo de correção de erros, está a adição de suporte a algumas extensões úteis do Vulkan e a fusão com os desenvolvimentos do projeto D9VK.
Adendo: em andamento lançamento corretivo do D9VK 0.40.1, no qual o valor padrão de COLOR0 nos shaders de vértice para vec4(1) e corrigido um erro que fazia com que os bits dos slots para saídas do shader fossem aplicados incorretamente por padrão e, portanto, corrigidos de maneira inadequada pelo backend, levando à sua substituição por vec4(0).
Fonte: opennet.ru
