A empresa Collabora Novo driver Gallium para Mesa, implementando uma camada para possibilitar o funcionamento das APIs OpenCL 1.2 e OpenGL 3.3 sobre drivers que suportam DirectX 12 (D3D12). Código sob a licença MIT.
O driver proposto permite usar Mesa em dispositivos que inicialmente não suportam OpenCL e OpenGL, além de servir como ponto de partida para a portabilidade de aplicativos OpenGL/OpenCL para operação sobre D3D12. Para os fabricantes de GPU, o subsistema oferece a possibilidade de fornecer suporte a OpenCL e OpenGL, na presença de drivers apenas com suporte a D3D12.
Nos planos mais próximos, destaca-se a obtenção da completa passagem nos testes de compatibilidade OpenCL 1.2 e OpenGL 3.3, verificação de compatibilidade com aplicativos e inclusão dos desenvolvimentos no núcleo principal da Mesa. O desenvolvimento está sendo realizado em conjunto com engenheiros da Microsoft. um conjunto de ferramentas para a tradução de jogos de D3D11 para D3D12 e a biblioteca , implementando primitivas gráficas típicas sobre D3D12.
A implementação inclui driver Gallium, compilador OpenCL, runtime OpenCL e um compilador de shaders NIR-to-DXIL, que transforma a representação intermediária dos shaders NIR utilizada na Mesa em um formato binário DXIL (DirectX Intermediate Language), suportado no DirectX 12 e baseado em bytecode LLVM 3.7 ( da Microsoft, que é essencialmente um fork avançado do LLVM 3.7). O compilador OpenCL foi preparado com base nas contribuições do projeto LLVM e ferramentas .
Os códigos-fonte com extensões OpenCL são compilados usando clang para pseudo-código intermediário LLVM (LLVM IR), que é então convertido na representação intermediária de núcleos OpenCL no formato SPIR-V. Os núcleos na representação SPIR-V são enviados para a Mesa, traduzidos para o formato NIR, otimizados e enviados ao NIR-to-DXIL para a geração de shaders computacionais no formato DXIL, adequado para execução em GPU utilizando runtime baseado em DirectX 12.
Em vez do Clover, aplicado na implementação do OpenCL na Mesa, foi proposto um novo runtime OpenCL, permitindo mais conversões diretas na API DirectX 12.
Os drivers OpenCL e OpenGL foram preparados usando a interface Gallium fornecida na Mesa, permitindo que, ao criar drivers, não seja necessário se aprofundar nos detalhes específicos do OpenGL e traduzir chamadas OpenGL em entidades mais próximas das primitivas gráficas com as quais GPUs modernas operam. O driver Gallium recebe comandos OpenGL e, com a ajuda do tradutor NIR-to-DXIL.
forma buffers de comandos que são executados na GPU, usando o driver D3D12.
Fonte: opennet.ru
