Dadas as suas necessidades, parece-me provável que você não precise escrever seu próprio driver. Você pode usar o llvmpipe , que acredito estar de acordo com suas necessidades. Em particular, é um "driver real" por alguns significados da palavra, e não requer que X11 seja executado.
O llvmpipe cria o que pode ser chamado de GPU virtual que interpreta os shaders do OpenGL, convertendo-os dinamicamente para a linguagem de máquina para o seu processador e o executa. Ele usa partes da infra-estrutura LLVM para realizar isso.
No entanto, pode não atender às suas necessidades, pois o que está realmente acontecendo é que o llvmpipe está vinculado pelos binários que o chamam. Em outras palavras, este não é um driver real, ativo, em execução no kernel. Em vez disso, ele cria uma alternativa libGL.so
que interpreta seus shaders OpenGL.
Se você não conseguir compilar seu programa acelerado de gráficos 3D a partir do código-fonte, provavelmente não conseguirá usar o llvmpipe com bons resultados. (Mas você quer que isso ajude com a depuração de seus próprios programas, então isso não deve ser um problema.)
Você pode fornecer mais informações sobre o que precisa em sua pergunta. Em particular: Por que você precisa depurar seu código do lado do driver ? Por que você não pode colocar o código de depuração necessário em seu próprio programa (ou em seus próprios programas)? As bibliotecas X e as bibliotecas OpenGL fornecem informações sobre o que deu errado, quando uma chamada falha. Por que você não pode usar essa informação - além de mensagens do kernel - no seu programa para facilitar a depuração? E por que você esperaria que as informações de depuração obtidas no lado do driver, com um driver virtual implementado no kernel, correspondessem ao que realmente acontece em computadores reais? Mais importante, por que você presumiria que, se seu programa produz problemas de baixo nível, esses problemas seriam os mesmos para GPUs e drivers diferentes quando for executado no mundo real? Você pode ter respostas perfeitamente boas para essas perguntas (e talvez eu esteja perdendo alguma coisa), mas acho que seria mais fácil responder à sua pergunta se você explicasse isso.
(A propósito, uma aplicação interessante do llvmpipe é permitir que as interfaces gráficas do usuário sejam gravadas apenas em versões aceleradas em 3D, mas ainda executadas em computadores sem aceleração 3D. Teoricamente isso deve facilitar a execução do GNOME Shell sem aceleração 3D, embora algum trabalho de desenvolvimento pode ser necessário para que realmente funcione, eu acho que o GNOME Shell faz algumas suposições relacionadas à composição que podem não ser automaticamente atendidas.Além disso, há aparentemente alguns problemas de desempenho . Uma instância real disso que realmente funciona é Unity, que no Ubuntu 12.10 vai em apenas uma versão , e será capaz de rodar em cima do llvmpipe ao invés de existir um separado " Unity 2D "implementação.)