Empresa Colabora
O driver proposto permite que você use o Mesa em dispositivos que não suportam nativamente OpenCL e OpenGL, e também como ponto de partida para portar aplicativos OpenGL/OpenCL para execução em D3D12. Para fabricantes de GPU, o subsistema permite fornecer suporte para OpenCL e OpenGL, desde que apenas drivers com suporte D3D12 estejam disponíveis.
Entre os planos imediatos estão a obtenção de aprovação integral nos testes de compatibilidade do OpenCL 1.2 e OpenGL 3.3, verificação de compatibilidade com aplicações e inclusão de desenvolvimentos na composição principal do Mesa. O desenvolvimento é realizado em conjunto com engenheiros da Microsoft que desenvolvem
A implementação inclui o driver Gallium, o compilador OpenCL, o tempo de execução OpenCL e o compilador de shader NIR-to-DXIL, que converte a representação intermediária dos shaders NIR usados no Mesa no formato binário DXIL (DirectX Intermediate Language), suportado no DirectX 12 e baseado em Código de bits LLVM 3.7 (
Fontes com extensões OpenCL são compiladas usando clang em pseudocódigo intermediário LLVM (LLVM IR), que é então convertido em uma representação intermediária de kernels OpenCL no formato SPIR-V. Os núcleos na representação SPIR-V são passados para o Mesa, traduzidos para o formato NIR, otimizados e passados para NIR para DXIL para gerar shaders de computação no formato DXIL, adequados para execução em GPUs usando tempo de execução baseado em DirectX 12.
Em vez do Clover, a implementação OpenCL usada no Mesa, é proposto um novo tempo de execução OpenCL, permitindo conversões mais diretas para a API DirectX 12.
Os drivers OpenCL e OpenGL são preparados usando a interface Gallium fornecida no Mesa, que permite criar drivers sem entrar em detalhes específicos do OpenGL e traduzir as chamadas OpenGL em essência mais próximas das primitivas gráficas nas quais as GPUs modernas operam. Driver Gallium, aceita comandos OpenGL e ao usar o tradutor NIR para DXIL
gera buffers de comando que são executados na GPU usando o driver D3D12.
Fonte: opennet.ru