Quali sono i passaggi necessari per creare un driver GPU che esegue il rendering dei pixel su un display? Fondamentalmente solo il più semplice esempio di "ciao mondo" per creare un driver GPU, come ad esempio girare lo schermo in rosso o mostrare solo un singolo pixel. Da dove inizi?Esempio di driver grafico "ciao mondo"?
Mi piacerebbe hackerare direttamente sulla GPU, senza alcuna astrazione C o OpenGL o altro. Sto usando Mac OSX, e penso di avere la scheda grafica i7 Intel HD, in modo da these docs sembrava una buona misura:
- Volume 1 Part 1: Graphics Core
- Volume 1 Part 2: Graphics Core – MMIO, Media Registers & Programming Environment
- Volume 1 Part 3: Graphics Core – Memory Interface and Commands Render Engine
- Volume 1 Part 4: Graphics Core – Video Codec Engine
- Volume 1 Part 5: Graphics Core – Blitter Engine
- Volume 2 Part 1: 3D/Media – 3D Pipeline
- Volume 2 Part 2: 3D/Media – Media
- Volume 3 Part 1: Display Registers – VGA Registers
- Volume 3 Part 2: Display Registers – CPU Registers
- Volume 3 Part 3: PCH Display Registers
- Volume 4 Part 1: Subsystem and Cores – Shared Functions
- Volume 4 Part 2: Subsystem and Cores – Message Gateway, URB, Video Motion, and IS
Il progetto Mesa3D dice che ci sono un certo numero di driver grafici open source, e Wikipedia dice che Intel produce questi documenti in modo che tu possa scrivere un driver open source se vuoi, ma non spiegare come.
Mi sono imbattuto anche in Michael Abrash's Graphics Programming Black Book, il che spiega molto.
Tuttavia questo è un po 'troppo da mordere tutto in una volta. E non sembrano esserci informazioni su come iniziare a hackerare su un driver GPU, un progetto "ciao mondo".
Ad esempio:
- Per saperne di assemblaggio, si può semplicemente
brew install nasm
, scrivere qualche assemblaggio, compilare ed eseguirlo per stampare "ciao mondo". - Per imparare Arduino, è possibile collegare una scheda Arduino al computer tramite un cavo USB, installare il loro software e caricare un codice C direttamente sulla scheda ed eseguirlo, per visualizzare una luce LED lampeggiante.
Come si esegue lo stesso tipo di operazione per la scheda grafica?
L'esempio di ciao mondo non deve necessariamente funzionare (anche se sarebbe bello se lo facesse!); Sarebbe utile anche solo delineare ciò che sarebbe necessario in un senso pratico/di livello superiore. Se non è possibile su un Mac o anche su Linux, sarebbe bene saperlo. Ma anche allora la domanda rimane, dove inizi a scrivere un driver grafico?
Dipende dalla piattaforma scelta. Sei contento di avere solo un output grafico su un buffer che puoi poi riversare su un file, ma nessun output di visualizzazione reale? (display e grafica sono cose separate). Per nessun output di visualizzazione è sufficiente scrivere un driver ioctl primitivo che colpisce i registri GPU e fa le operazioni di base per l'avvio. Probabilmente puoi semplicemente assegnare un enorme blocco di memoria in modo statico per giocare, in modo da non dover perdere tempo nella gestione della memoria. Non c'è davvero un buon driver del mondo, un driver ha un sacco di requisiti solo per fare un pixel o chiaro. – djgandy
Hai trovato quell'esempio di "ciao mondo"? Sarei molto interessato Grazie. –