Escrevendo um driver para enganar os sistemas * nix sobre ter uma GPU

5

Eu estou pensando em escrever um "driver Mock GPU" para sistemas baseados em * nix. O que quero dizer é que, simplesmente eu quero escrever um driver (Behind X-server, obviamente) para responder às chamadas de API do X com algumas mensagens de depuração.

Em outras palavras, quero enganar o sistema * nix sobre ter uma GPU real. Então, eu posso fazer um test-bed para pacotes acelerados por GUI em sistemas baseados em console.

Neste momento, se eu executar um pacote acelerado por GUI em sistemas baseados em console * nix; ele simplesmente morre devido à falta de um GPU real (ou um driver de GPU melhor, eu diria).

Então, quero saber:

  • É possível? (Escrevendo um driver de GPU para enganar * nix sobre ter uma GPU real)
  • Quais recursos você recomenda antes de sujar as mãos no código?
  • Existe algum projeto semelhante em toda a rede?

PS: Sou um programador ANSI-C experiente, mas não tenho nenhuma pista sobre o desenvolvimento real de Kernel / Driver em * nix (leia alguns tutoriais sobre o desenvolvimento de driver USB), portanto, quaisquer recursos sobre essas áreas serão muito apreciado também. Agradecemos antecipadamente.

    
por sepehrl 26.07.2012 / 18:02

1 resposta

6

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.)

    
por 30.08.2012 / 11:00