Ao escrever o artigo sobre o primeiro driver para GPU Apple Silicon, me deparei com uma descrição interessante feita pelos desenvolvedores do Asahi Linux sobre a anatomia de um driver para GPU.
GPUs modernas são modulares e sua construção é constituída por basicamente três camadas:
- Uma unidade de gerenciamento de memória em conjunto com uma interface que submete o mapeamento da memória para as outras camadas;
- Um hardware com funções fixas de modelagem 3D, como rasterizar triângulos e testar a profundidade dos elementos;
- Um conjunto de “núcleos shader” programáveis, que são como dezenas, centenas ou milhares de pequenos processadores, que trabalham em conjunto com o hardware de funções fixas.
Sendo assim, um driver de GPU também deve trabalhar de forma modular:
- Uma camada contendo o Kernel, capaz de mapear a memória e submeter o mapeamento para o hardware;
- Um driver capaz de traduzir as chamadas do OpenGL, ou do Vulkan, dentro da memória de vídeo, para as estruturas específicas do hardware;
- Um compilador que traduz linguagens de programação de shading, como GLSL, para as instruções do hardware.
É claro que esta é uma visão superficial e dentro de cada setor existem vários módulos. Esta estrutura modular permite que atualizações, portes e novos drivers sejam produzidos com mais facilidade.
Você já conhecia a anatomia de um driver de GPU?