Welche Schritte sind erforderlich, um einen GPU-Treiber zu erstellen, der Pixel auf einem Display rendert? Im Grunde nur das einfachste „Hallo Welt“-Beispiel zum Erstellen eines GPU-Treibers, z. B. den Bildschirm rot färben oder nur ein einzelnes Pixel anzeigen. Wo fängst du an?
Ich würde gerne direkt auf die GPU hacken, ohne C- oder OpenGL-Abstraktion oder dergleichen. Ich verwende Mac OSX, und ich glaube, ich habe die Intel HD i7-Grafikkarte, also diese Dokumente schien gut zu passen:
- Band 1 Teil 1: Grafikkern
- Band 1 Teil 2: Grafikkern – MMIO, Medienregister und Programmierumgebung
- Band 1 Teil 3: Grafikkern – Speicherschnittstelle und Befehls-Render-Engine
- Band 1 Teil 4: Grafikkern – Video-Codec-Engine
- Band 1 Teil 5: Grafikkern – Blitter Engine
- Band 2 Teil 1: 3D/Medien – 3D-Pipeline
- Band 2 Teil 2: 3D/Medien – Medien
- Band 3 Teil 1: Anzeigeregister – VGA-Register
- Band 3 Teil 2: Anzeigeregister – CPU-Register
- Band 3 Teil 3: PCH-Anzeigeregister
- Band 4 Teil 1: Subsystem und Kerne – Gemeinsame Funktionen
- Band 4 Teil 2: Subsystem und Kerne – Message Gateway, URB, Video Motion und IS
Das Mesa3D-Projekt sagt, dass es eine Reihe von Open-Source-Grafiktreibern gibt, und Wikipedia sagt, dass Intel diese Dokumente erstellt, damit Sie einen Open-Source-Treiber schreiben können, wenn Sie möchten, aber erklären Sie nicht, wie.
Ich bin auch darauf gestoßen Michael Abrashs Schwarzbuch zur Grafikprogrammierungwas einiges erklärt.
Allerdings ist das ein bisschen viel auf einmal abzubeißen. Und es scheint keine Informationen darüber zu geben, wie man mit dem Hacken eines GPU-Treibers, einem „Hello World“-Projekt, beginnen kann.
Zum Beispiel:
- Um Montage zu lernen, können Sie einfach
brew install nasm
schreiben Sie eine Assembly, kompilieren Sie sie und führen Sie sie aus, um “Hallo Welt” zu drucken. - Um Arduino zu lernen, können Sie ein Arduino-Board über ein USB-Kabel an Ihren Computer anschließen, die Software installieren und C-Code direkt auf das Board hochladen und ausführen, um ein blinkendes LED-Licht anzuzeigen.
Wie macht man sowas bei der Grafikkarte?
Das Hallo-Welt-Beispiel muss nicht unbedingt funktionieren (obwohl es cool wäre, wenn es funktionieren würde!); Es wäre hilfreich, nur zu skizzieren, was in einem höheren/praktischen Sinne erforderlich wäre. Wenn es auf einem Mac oder sogar unter Linux nicht möglich ist, wäre das gut zu wissen. Aber selbst dann bleibt die Frage, wo fängt man an, einen Grafiktreiber zu schreiben?
Es hängt davon ab, auf welche Plattform Sie abzielen. Sind Sie froh, nur eine Grafikausgabe in einen Puffer zu haben, die Sie dann in eine Datei ausgeben können, aber keine tatsächliche Anzeigeausgabe? (Anzeige und Grafik sind getrennte Dinge). Für keine Anzeigeausgabe können Sie einfach einen primitiven ioctl-Treiber schreiben, der die GPU-Register angreift und zunächst die grundlegenden Operationen ausführt. Sie können wahrscheinlich einfach einen riesigen Speicherblock statisch zuweisen, um damit zu spielen, sodass Sie keine Zeit für die Speicherverwaltung aufwenden müssen. Es gibt nicht wirklich einen Hallo-Welt-Treiber, imo, ein Treiber hat viele Anforderungen, nur um ein Pixel zu machen oder zu löschen.
– djgandy
8. Januar 2015 um 11:47 Uhr
Haben Sie das „Hallo Welt“-Beispiel gefunden? Ich wäre sehr interessiert. Vielen Dank.
– Yakumo Fujii
21. April 2017 um 14:12 Uhr
Vielleicht Dies nützt etwas.
– Lanze
8. Dezember 2019 um 23:57 Uhr