Vulkan 1.3 implementado no M1 em apenas um mês
Introdução ao driver Honeykrisp
- Driver Honeykrisp: primeiro driver a implementar a especificação completa do Vulkan 1.3 em hardware da Apple.
- Estado de desenvolvimento: ainda não foi lançado para usuários finais, e segue recebendo novos recursos e melhorias de desempenho. O código-fonte está disponível para desenvolvedores.
Processo de desenvolvimento
2 de abril
- Início: início do desenvolvimento de um driver Vulkan para M1 com base no driver NVK.
3 de abril
- Conjuntos de descritores: adaptação dos conjuntos de descritores do M1, que são diferentes dos da NVIDIA, para se ajustarem ao NVK.
4 de abril
- Shaders de computação: implementação da compilação de shaders de computação e da função de copiar buffers e imagens usando comandos Vulkan.
6 de abril
- Tratamento de estado gráfico: escrita do código para tratar o estado gráfico, aproveitando código do driver OpenGL e combinando-o com o NVK.
7 de abril
- Estado dinâmico: adoção de uma estratégia para tratar todos os estados de forma dinâmica, com adição de código para compilar e armazenar em cache prólogos e epílogos.
8 de abril
- Resultados dos testes: resultados iniciais de teste com 149.770 aprovados, 7.741 falhas e 2.396 travamentos.
9 de abril
- Vulkan 1.3: após alcançar 99,6% de aprovação no Vulkan 1.1, a mudança para Vulkan 1.3 resultou em 98,3% de aprovação.
10 a 12 de abril
- Testes adicionais: confirmação de que o renderizador Vulkan funcionava no SuperTuxKart e no Zink, com correção de bugs nos testes.
16 a 17 de abril
- Correção de bugs do compilador: correção de bugs do compilador encontrados nos testes de indexação de descritores, incluindo a resolução de um problema de loop infinito.
18 de abril
- Renderização zero-copy: implementação da extensão
EXT_image_drm_format_modifier para um layout de superfície eficiente.
22 de abril
- Revisão da arquitetura do driver: após revisar a arquitetura do driver, foram feitas otimizações, alcançando 100 milhões de chamadas de draw por segundo no teste
vkoverhead.
24 a 25 de abril
- Suporte a YCbCr: adição da funcionalidade YCbCr com uso do código NVK de Mohamed Ahmed.
- Cópia de consultas: implementação da função de copiar consultas da GPU.
26 de abril
- Cor de borda: implementação da extensão
EXT_custom_border_color para compatibilidade com Direct3D, resolvendo problemas de cor de borda.
27 de abril
- Teste final: todos os testes aprovados, com 686.930 aprovados e 0 falhas.
Planos futuros
- Suporte a DXVK e vkd3d-proton: implementação planejada de recursos adicionais para camadas de compatibilidade Direct3D.
- Execução de jogos Windows: plano de executar jogos Windows no Asahi Linux usando Wine e um emulador x86 de código aberto.
Opinião do GN⁺
- Desafio técnico: implementar Vulkan 1.3 no M1 é um trabalho tecnicamente muito desafiador. Isso se deve à arquitetura única do hardware da Apple.
- Benéfico para desenvolvedores de jogos: quando o driver Vulkan estiver concluído, os desenvolvedores de jogos poderão rodar seus jogos em mais plataformas, o que será vantajoso.
- Necessidade de otimização de desempenho: no estágio inicial, pode ser necessário otimizar o desempenho. Em especial, será preciso resolver o problema de sobrecarga de CPU causado pelo tratamento de estado dinâmico.
- Contribuição da comunidade: como projeto de código aberto, a contribuição da comunidade é importante. São necessários testes e feedback em diversos ambientes de hardware e software.
- Produtos concorrentes: além de DXVK e vkd3d-proton, há outras camadas de compatibilidade, como o Wine. É importante comparar os prós e contras de cada produto antes de escolher.
1 comentários
Comentários do Hacker News
Um trabalho impressionante que comprova o valor de componentes compartilhados, iterativos e abertos. Fico me perguntando quanto tempo vai levar para portar o Proton. Há uma boa chance de muitos jogos não rodarem direito por causa das diferenças de arquitetura de GPU e da sobrecarga da tradução para ARM. Ainda assim, há uma visão otimista de que, com SoCs se tornando mais comuns, mais jogos vão mirar em memória unificada e ARM.
Fico me perguntando se o esforço de adicionar Vulkan ao Linux e traduzir DirectX no Asahi Linux vai impactar o sonho da Apple de levar jogos AAA da Apple para o Apple Silicon. A Apple quer que desenvolvedores AAA portem seus jogos para Metal para rodarem em iPhone, iPad, Mac e Vision Pro. Também existe a possibilidade de gamers de Mac instalarem Asahi Linux para jogar títulos AAA de PC.
Se você não conhece bem o Vulkan 1.3, mas tem interesse em trabalhar com APIs gráficas de baixo nível, vale a pena conferir. Depois de superar os obstáculos iniciais, trabalhar com ele fica prazeroso. Todo o estado dinâmico e os render passes sem presets tornam o trabalho muito mais fácil. Está disponível em todas as plataformas desktop com GPUs de até 10 anos ou menos. Só que não existe um framework de "padrões razoáveis", embora haja muitas bibliotecas auxiliares úteis em várias linguagens.
Eu queria ter habilidade de programação nem que fosse metade da dela. É realmente incrível.
A magia impressionante de código da Alyssa. Não sei como ela faz isso, mas fico feliz que ela esteja travando essa boa luta.
Bugs de compilador nunca acontecem. Mas, na prática, era mesmo um bug de compilador. Nunca vivi isso uma vez sequer na carreira, mas em níveis de abstração assim isso pode ser menos raro.
Acabei de fazer uma atualização de suporte a ES 3.2, e o M1 parece ter sido feito para o Asahi. O macOS só foi inicializado uma vez, na instalação. Fico me perguntando se o navegador oferece suporte a 'renderização zero-copy'. Lembro de ter ficado preso em um problema em que o transform feedback do WebGL2 disparava operações de leitura.
Existe uma estrutura de shader peculiar. A condição é sempre falsa, mas o compilador não sabe disso. Fico me perguntando qual é o objetivo dessa estrutura.
Se pode ser usado dentro de VM. Desenvolvo no macOS e uso uma imagem do VMware para testar Ubuntu. Desenvolvo apps gráficos 3D, mas não sei quão bom é o passthrough do VMware. Fico me perguntando se a GPU do Apple Silicon é virtualizada dentro da VM e se seria possível rodar essa distribuição para obter melhor desempenho gráfico.
Fico me perguntando se alguém poderia explicar a relação com o MoltenVK. Não sei se esse trabalho elimina a necessidade do MoltenVK, ou se é um driver nativo.