Autor Thema: Framebuffer der Grafikkarte ansprechen  (Gelesen 7195 mal)

Dezimiert

  • Beiträge: 19
    • Profil anzeigen
Gespeichert
« am: 06. August 2012, 22:55 »
Nachdem ich mehrere Test "OS" geschreiben habe um z.b. etw. wie Irqs, Keyboarddriver sowie Paging und andere Themen zu verstehen.
Nun würde ich gerne etw. Grafik auf meinen Bildschirm zaubern, da ich öfters lese das VBE rotz der hohen unterstützten auflösung sehr langsam sein soll. Nun frage ich mich ob ich nicht direkt in den VRAM schreiben kann oder ob es auf irgend eine weise eine schnellere Methode gibt. Außerdem wäre es mal interessant zu wissen wie man den gpu benutzen kann, macht ja keinen Sinn ne gute Grafikkarte zu haben wenn die CPU sowieso alles macht.
MfG

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 06. August 2012, 23:45 »
Mit VBE kannst du direkt auf den Framebuffer zugreifen. Das ist vermutlich genauso effizient wie mit einem anderen Treiber. Das was bei VBE langsam ist, sind komplexere Operationen als einzelne Pixel setzen. Also einfache Dinge wie Rechtecke ausfüllen, Bitmaps kopieren und alles weitere, was vermutlich unter das von dir angesprochene "GPU benutzen" fällt. (Weil sie nicht vorhanden sind und manuell durch das Setzen einzelner Pixel gemacht "emuliert" werden müssen.) Wenn es dir ums Prinzip geht, kannst du dir ja mal den Artikel zur Cirrus Logic anschauen. Einen Treiber dafür zu schreiben, sollte verglichen mit nvidia-, Intel- oder AMD-Chips relativ einfach sein. Wenn du hingegen einen Treiber für diese Grafikkartem schreiben willst, dann solltest du dir die entsprechenden Open Source Treiber anschauen.
« Letzte Änderung: 07. August 2012, 00:52 von Jidder »
Dieser Text wird unter jedem Beitrag angezeigt.

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 07. August 2012, 01:25 »
Hallo,

extrem langsam sind auch Aktionen, die den Framebuffer auslesen müssen (Fenster verschieben, Mauszeiger malen, (Halb-)Transparenz). Dagegen hilft als Beschleunigung nur ein "ShadowFB", also eine Arbeitskopie des Grafikspeichers im RAM. Nur was sich dort ändert, wird in die Grafikkarte übertragen.

Alles, was über VBE hinausgeht, erfordert einen "echten", für die Grafikkarte passenden Treiber. Vermutlich dürfte es bei 3D-Karten einfacher/sinnvoller sein, die Open-Source-Infrastruktur (DRI, KMS (DDX), Gallium3D und Mesa) in das eigene OS zu integrieren, als eigene Treiber zu schreiben. "Echte" 2D-Karten (S3 Trio, Cirrus Logic, C&T, ...) findet man eigentlich nur noch in Emulatoren oder historischer Hardware.

Gruß,
Svenska

Dezimiert

  • Beiträge: 19
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 07. August 2012, 01:28 »
Vielen Dank für die Antworten ich werde mich damit mal beschäftigen ;)

Dezimiert

  • Beiträge: 19
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 07. August 2012, 01:30 »
Allerdings noch eine Frage der Framebuffer liegt ja in dem RAM allerdings hat directX sowie OpenGL die Möglichkeit direkt in den VRAM zu schreiben, wäre es nicht sinnvoller den Framebuffer in den VRAM zu legen, damit der virtuelle Speicher keinen RAM für den Framebuffer aufwenden muss?

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 07. August 2012, 02:04 »
Der Framebuffer ist in den physischen Adressraum gemappt. Das heißt wenn die CPU einen Zugriff auf einen bestimmten Adressbereich macht, wird direkt auf den Framebuffer ("VRAM") statt auf den RAM zugegriffen. Der Zugriff wird einfach auf die Grafikkarte umgeleitet.

Mit virtuellem Speicher hat der Zugriff auf den Framebuffer übrigens nichts zu tun. Das läuft alles über den physischen Adressraum. Aber wenn du Paging aktiviert hast, muss dein Kernel/Treiber natürlich den Framebuffer in den virtuellen Adressraum gemappt haben. (Wie jede andere physische Adresse, auf die du zugreifen willst, auch.)
Dieser Text wird unter jedem Beitrag angezeigt.

Dezimiert

  • Beiträge: 19
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 07. August 2012, 08:42 »
So vielen Dank,das wusste ich nicht

 

Einloggen