Suporte ao OpenGL 4.6 e OpenGL® ES 3.2
- O M1 por muito tempo suportou apenas OpenGL 4.1, mas agora oferece suporte completo a OpenGL® 4.6 e OpenGL® ES 3.2.
- Basta instalar o Fedora para os drivers mais recentes das séries M1/M2.
- Se já estiver instalado, é possível atualizar simplesmente com o comando
dnf upgrade --refresh.
- Diferentemente dos drivers 4.1 não padronizados de fornecedores existentes, esses drivers Linux de código aberto são certificados de acordo com versões modernas do OpenGL, prometendo ampla compatibilidade com cargas de trabalho OpenGL modernas como Blender, Ryujinx e Citra.
Certificação de drivers e suporte a padrões
- Drivers 4.6/3.2 certificados precisam passar por mais de 100.000 testes para garantir a correção.
- A lista de drivers oficialmente certificados agora inclui OpenGL 4.6 e ES 3.2.
- Os fornecedores ainda não oferecem suporte a padrões gráficos modernos como o OpenGL moderno, mas esta empresa oferece.
- A empresa expressa publicamente seu apreço por padrões abertos interoperáveis e quer dar a usuários e desenvolvedores a liberdade de executar aplicações onde quiserem, sem ports especiais.
Novidades do OpenGL 4.6
- O OpenGL 4.6 adiciona dezenas de recursos obrigatórios em comparação com o 4.1:
- Robustness (robustez)
- SPIR-V
- Clip control
- Cull distance
- Compute shaders
- Transform feedback aprimorado
Problemas de compatibilidade do M1 com padrões gráficos
- O M1 não se adapta bem a padrões gráficos mais novos que o OpenGL ES 3.1.
- O Vulkan torna alguns recursos opcionais, mas faltam recursos necessários nas camadas para DirectX e OpenGL.
- No M1, não havia solução existente que fosse além do conjunto de recursos do OpenGL 4.1.
Como superar a barreira do 4.1
- Foi necessária uma nova abordagem para implementar recursos novos sem suporte de hardware.
- Geometry shaders, tessellation e transform feedback são substituídos por compute shaders.
- Cull distance é substituído por valores interpolados transformados.
- Clip control é substituído por um epílogo de vertex shader.
Desafios da robustez
- Tradicionalmente, GPUs priorizam desempenho bruto em vez de segurança.
- Para aplicações como navegadores web, esse trade-off não é desejável.
- Recursos de robustez permitem reduzir a superfície de ataque com um pequeno custo de desempenho, possibilitando que a aplicação escolha um comportamento definido quando ocorrer acesso fora dos limites do buffer no shader.
Robustez de buffer
- Outras APIs têm definições diferentes sobre o que um carregamento fora dos limites do buffer retorna quando a robustez está ativada.
- O OpenGL faz com que carregamentos fora dos limites retornem o último elemento do buffer.
- Operações adicionais para robustez são movidas para o preâmbulo do shader, sem custo para o shader principal.
Robustez de imagem
- A robustez de imagem exige que carregamentos de imagem fora dos limites retornem 0.
- Há um único teste que falha com carregamento de imagem mipmap no GPU M1.
- Entre as soluções alternativas para robustez estão não carregar em níveis inválidos ou carregar de forma especulativa e depois usar operações de comparação e seleção.
Opinião do GN⁺
- Este artigo trata de um avanço importante no suporte ao padrão OpenGL moderno em dispositivos M1. Isso deve trazer compatibilidade mais ampla e melhor desempenho para usuários e desenvolvedores Linux.
- Os novos recursos do OpenGL 4.6 podem melhorar significativamente o desempenho e a robustez de aplicações gráficas, o que é especialmente importante em desenvolvimento de jogos e computação de alto desempenho.
- Este artigo é um bom exemplo de como drivers de código aberto podem oferecer melhor conformidade com padrões e compatibilidade do que soluções comerciais.
1 comentários
Comentários do Hacker News