PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : FrameBuffer


Man_In_Blue
2003-08-01, 00:57:16
Hi.

Da ich mich sehr für GraKas interessire will Ich meine Wissenslücken in Sachen GraKas nun endgültig schließen...

Und zwar hab ich follgende Frage: Was ist eingendlich nen FrameBuffer?

Wenn ich mir das richtig vorstelle ist das eine Art zwischenspeicher... aber wozu genau dient er?

Bin für jede Hilfe dankbar.

mfg

Man In Blue

zeckensack
2003-08-01, 03:08:39
Framebuffer ist denglisch für "Bildspeicher". Alles was der Grafikchip so zeichnet gelangt dorthin. Weil Rendering ein serielles Verfahren ist, die genaue Reihenfolge der Anweisungen aber nicht vorhersehbar ist, braucht's einen solchen Sammelspeicher.

Erst wenn ein Frame ("Einzelbild") fertig ist, kann der Inhalt des Framebuffers vom RAMDAC ausgelesen, und so an den Monitor weitergereicht werden.

Damit man nicht mittendrin halbfertige Bilder sieht, wird double (oder triple) buffering eingesetzt. Dabei wird der 'front buffer' vom RAMDAC angezeigt, während der Chip in den 'back buffer' zeichnet. Nach Fertigstellen des Frames werden die beiden vertauscht.

Modulor
2003-08-01, 13:25:43
Zum noch besseren Verständnis hier eine Grafik aus einer Arbeit an der TU Chemnitz (http://www.tu-chemnitz.de/informatik/RA/kompendium/vortr_2000/3d_fkt/index.htm) über 3D Grafikkarten:
http://www.tu-chemnitz.de/informatik/RA/kompendium/vortr_2000/3d_fkt/images/3dpipe.gif

Man_In_Blue
2003-08-01, 13:39:01
Also wenn ich das nun richtig verstanden hab Rechnet die VPU/GPU das Bild ned als ganzes sondern schiebt die fertigen berechnungen erstmal in den Buffer wo das Bild quasi zusammengepusselt wird und erst als fertiges Bild an die Ramdacs weitergegeben wird...

Hab ich das richtig verstanden?

Demirug
2003-08-01, 13:44:11
Ja die Grafikchips rechnen eigentlich Pixelweise. Wenn man das Direkt auf dem Bildschirm ausgeben würde wäre es zwar durchaus lustig aber spielen könnte man so wohl kaum noch. Deswegen werden die ganzen Pixel erst mal im Framebuffer gespeichert bis der Chip der Meinung ist das jetzt alle Pixel die zu diesem Frame gehören gerechnet wurden.

Man_In_Blue
2003-08-01, 13:55:02
*g

Ich danke euch...

*Kerbe in Wand mach* Eine Wissenslücke weniger.

mfg

Man In Blue

Savini
2003-08-02, 15:00:03
Wozu braucht man Triple Buffering?

zeckensack
2003-08-02, 15:31:25
Original geschrieben von Savini
Wozu braucht man Triple Buffering? Triple buffering braucht man in Verbindung mit VSync. Grundlagen siehe oben.

Wenn ein Frame fertig ist, werden Front- und Backbuffer vertauscht, und damit auch der RAMDAC, der das Bild an den Monitor ausgibt, auf das neue Bild umgeklappt. Wenn das dann passiert, während der RAMDAC gerade die Bildmitte an den Monitor 'sendet', dann tritt dort ein Bruch zwischen altem und neuem frame auf. Das nennt man tearing.

Um tearing zu beseitigen muß man VSync aktivieren, dadurch wird das 'Umklappen' solange verzögert, bis der RAMDAC das aktuelle Bild fertig ausgegeben hat.

Dann hat man aber das Problem daß die Framerate
1)nicht mehr höher als die Bildwiederholfrequenz des Monitors sein kann
2)nur ganzzahlige Teile möglich sind.
zB bei 85Hz können die fps nur 85, 42.5, 28,3 ... sein.

Das liegt daran, daß man nicht ein neues Bild anfangen kann zu zeichnen, weil der Speicher der dafür vorgesehen ist noch gebraucht wird (da steht das letzte fertige Frame drin). Man muß warten, bis einer der beiden Puffer wieder frei wird.

Lösung: triple buffering.
Man hat jetzt drei framebuffer, einen zum Anzeigen, einen zum Zeichnen, und einen den man benutzen kann während die anderen beiden durch "warten auf VSync" blockiert sind.

Gast
2003-08-02, 15:39:54
[B]
Lösung: triple buffering.
Man hat jetzt drei framebuffer, einen zum Anzeigen, einen zum Zeichnen, und einen den man benutzen kann während die anderen beiden durch "warten auf VSync" blockiert sind.


Das heißt also: Wenn man - so wie ich - tearing abgrundtief haßt und daher VSync einschaltet, sollte man auch gleichzeitig triple buffering einschalten, da sich sonst u.U die Framerate gleich mal halbiert?

Doch wie ist es mit der Performance? Kostet Triple Buffering nicht Performance, so dass man dann doch nicht mehr Frames bekommt, als wenn man Triple Buffering nicht aktiviert?

Ganz konkret: Ich benutze einen TFT, der mit 60Hz angesteuert wird. Würdest Du mir also empfehlen VSync (hab ich eh immer an) UND Triple Buffering (hab ich nicht immer an) zu verwenden, um möglichst hohe Frameraten (also nahe an 60) ohne tearing zu bekommen?

Und wieso ist VSync für DirectX in den Detos versteckt und man muss es erst mit einem Zusatzprogramm freischalten?

zeckensack
2003-08-02, 15:50:29
Triple buffering kostet keine Performance. Dadurch daß die VSync-Bremse aufgehoben wird, ist es eigentlich sogar schneller (wenn man VSync aktiviert hat - sonst tut sich nichts).

Man verliert aber den Speicherplatz, den der dritte Puffer belegt. 1024x768x32bit macht knapp über 3MB Speicher, bei AA entsprechend mehr. Deswegen auch das "eigentlich", wenn dadurch Texturen aus dem Grafik-RAM verdrängt werden, kann TB sogar langsamer sein.

Ganz konkret: Ich benutze einen TFT, der mit 60Hz angesteuert wird. Würdest Du mir also empfehlen VSync (hab ich eh immer an) UND Triple Buffering (hab ich nicht immer an) zu verwenden, um möglichst hohe Frameraten (also nahe an 60) ohne tearing zu bekommen?Wenn du auf VSync nicht mehr verzichten kannst, dann ja. Absolut.

Es kommt aber auch darauf an, ob du dir das (vom Speicherverbrauch) leisten kannst. Bei Notebooks ist der Grafikspeicher ja meistens ziemlich knapp. Aber den Versuch ist's IMO auf jeden Fall wert.

Demirug
2003-08-02, 15:59:04
Original geschrieben von zeckensack
Man verliert aber den Speicherplatz, den der dritte Puffer belegt. 1024x768x32bit macht knapp über 3MB Speicher, bei AA entsprechend mehr. Deswegen auch das "eigentlich", wenn dadurch Texturen aus dem Grafik-RAM verdrängt werden, kann TB sogar langsamer sein.

Kleine Anmerkung:

Beim AA steigt der Bedarf aber nur dann stärker wenn Filter@Scanout benutzt wird.

Ansonsten:
1. FrontBuffer (keine MS-Buffer)
2. Zwischenbuffer (keine MS-Buffer)
3. Backbuffer (MS-Buffer je nach AA Einstellung)

Bevor der Backbuffer wieder freigegben wird erfolgt der Downfilter in den Zwischenbuffer.

Savini
2003-08-02, 16:02:45
Original geschrieben von zeckensack
Triple buffering kostet keine Performance. Dadurch daß die VSync-Bremse aufgehoben wird, ist es eigentlich sogar schneller (wenn man VSync aktiviert hat - sonst tut sich nichts).

Man verliert aber den Speicherplatz, den der dritte Puffer belegt. 1024x768x32bit macht knapp über 3MB Speicher, bei AA entsprechend mehr. Deswegen auch das "eigentlich", wenn dadurch Texturen aus dem Grafik-RAM verdrängt werden, kann TB sogar langsamer sein.

Wenn du auf VSync nicht mehr verzichten kannst, dann ja. Absolut.

Es kommt aber auch darauf an, ob du dir das (vom Speicherverbrauch) leisten kannst. Bei Notebooks ist der Grafikspeicher ja meistens ziemlich knapp. Aber den Versuch ist's IMO auf jeden Fall wert.


Wieso Notebook? Ist ein 18Zoll TFT, der an einer Geforce 3 Ti 200 hängt. Jetzt muss ich aber mal ganz dumm fragen: Deine Rechnung von oben stimmt: 1024x768x32bit macht knapp über 3MB Speicher.

Das ganze mal drei sind 9MB. Eventuell höhere Auflösung und wir sind bei 15MB.

Wieso haben dann aktuelle Grakas 64MB oder gar 128MB???

Und was soll die Sache mit der Auslagerung von Grafikdaten über den AGP Port ins Ram? Mit 64MB sollte man dies nach obiger Rechnung doch gar nicht brauchen, oder? Und falls doch: Was ist eigentlich die "richtige" AGP Aperture Size?

Gast
2003-08-02, 16:05:25
Original geschrieben von Demirug
Kleine Anmerkung:

Beim AA steigt der Bedarf aber nur dann stärker wenn Filter@Scanout benutzt wird.

Ansonsten:
1. FrontBuffer (keine MS-Buffer)
2. Zwischenbuffer (keine MS-Buffer)
3. Backbuffer (MS-Buffer je nach AA Einstellung)

Bevor der Backbuffer wieder freigegben wird erfolgt der Downfilter in den Zwischenbuffer.


Wieso ist dann "Triple Buffering" nicht bei allen Spielen Default bzw. wird schon vom Treiber eingestellt? Wenn es weder Performance Einbußen noch mehr Speicherbedarf bringt?

zeckensack
2003-08-02, 16:09:38
Original geschrieben von Savini
Wieso Notebook? Ist ein 18Zoll TFT, der an einer Geforce 3 Ti 200 hängt.Whoops :)
Jetzt muss ich aber mal ganz dumm fragen: Deine Rechnung von oben stimmt: 1024x768x32bit macht knapp über 3MB Speicher.

Das ganze mal drei sind 9MB. Eventuell höhere Auflösung und wir sind bei 15MB.

Wieso haben dann aktuelle Grakas 64MB oder gar 128MB???Ja dann ... :)
Mit soviel Speicher brauchst du dir natürlich keine Gedanken mehr zu machen. Wenn das stimmt, was Demirug eben schrieb (wovon ich eigentlich ausgehe :D), dann wird's durch AA auch nicht mehr schlimmer als mit DB.
Und was soll die Sache mit der Auslagerung von Grafikdaten über den AGP Port ins Ram? Mit 64MB sollte man dies nach obiger Rechnung doch gar nicht brauchen, oder? Und falls doch: Was ist eigentlich die "richtige" AGP Aperture Size? Die 'richtige' Aperture size gibt es leider nicht. Normalerweise sollte man davon ausgehen, daß groß=gut ist, 256MB würde ich vorschlagen.

Es gibt aber leider einige Spiele, die ganz besonders clever mit ihrem Ressourcen-Management sind (wie zB GTA3). Da ist's dann meist am besten, sie vor ihrer eigenen Dummheit zu schützen, und die aperture auf so klein wie möglich zu stellen.

Deswegen kann ich dir eine in allen Fällen korrekte Pauschalantwort leider nicht geben. Wie bei so vielen Dingen im Leben: es kommt darauf an ;)

zeckensack
2003-08-02, 16:11:42
Original geschrieben von Gast
Wieso ist dann "Triple Buffering" nicht bei allen Spielen Default bzw. wird schon vom Treiber eingestellt? Wenn es weder Performance Einbußen noch mehr Speicherbedarf bringt? IMO Probleme mit der D3D-Spezifikation, das geht hier aber wohl etwas zu sehr ins Detail :naughty:

Btw, TB braucht schon mehr Speicher. Dieser Mehrverbrauch ist nur unabhängig von AA.

Gast
2003-08-02, 16:15:34
Original geschrieben von zeckensack

Deswegen kann ich dir eine in allen Fällen korrekte Pauschalantwort leider nicht geben. Wie bei so vielen Dingen im Leben: es kommt darauf an ;)


Jetzt hast Du meine eigentliche Frage aber nicht beantwortet: Wie kann es bei einer gängigen 64MB Karte überhaupt vorkommen, dass etwas ins Ram ausgelagert werden muss, wenn ein 1024*768 Frame gerade mal 3 MB braucht und man beim Triple Bufferung dann auf 9MB kommt?

Und ist es nicht so, dass diese ganzen AGP 4fach/8fach Angaben nichts anderes bedeuten als wie schnell die Daten von der Karte in den Speicher bzw. zurück gelangen?

Wer braucht also AGP 4fach oder gar 8fach, wenn die Datenmenge in den 3 Buffern seiner Graka gerade mal 9MB beträgt und somit gar nichts ausgelagert werden muss???

Demirug
2003-08-02, 16:47:25
Original geschrieben von Gast
Jetzt hast Du meine eigentliche Frage aber nicht beantwortet: Wie kann es bei einer gängigen 64MB Karte überhaupt vorkommen, dass etwas ins Ram ausgelagert werden muss, wenn ein 1024*768 Frame gerade mal 3 MB braucht und man beim Triple Bufferung dann auf 9MB kommt?

Und ist es nicht so, dass diese ganzen AGP 4fach/8fach Angaben nichts anderes bedeuten als wie schnell die Daten von der Karte in den Speicher bzw. zurück gelangen?

Wer braucht also AGP 4fach oder gar 8fach, wenn die Datenmenge in den 3 Buffern seiner Graka gerade mal 9MB beträgt und somit gar nichts ausgelagert werden muss???

Neben den Speicher für die Bildschirmbuffer müssen ja auch noch die Texturen und Vertexdaten(statisch) in den Speicher der Grafikkarte.

Eine 512*512 32 Bit RGBA Texture ohne Mip-Map braucht auch schon 1 MB. Und 512*512 sind heute schon wenig. Bei 1024*1024 sind es dann schon 4 MB. Benutzt man dann noch Mip-Mapping wird es noch mehr.

Demirug
2003-08-02, 16:50:12
Original geschrieben von Gast
Wieso ist dann "Triple Buffering" nicht bei allen Spielen Default bzw. wird schon vom Treiber eingestellt? Wenn es weder Performance Einbußen noch mehr Speicherbedarf bringt?

Wie Zeckensack schon sagte kostet es schon mehr Speicher und zwar genauso viel wie man braucht um einmal den Bildschirminhalt zu sichern:

Höhe*Breite*Byte Pro Pixel.

Bei 1024*768* 32 Bit sind das dann 768K * 4 Byte = 3 MB

Gast
2003-08-02, 16:56:18
Original geschrieben von Demirug
Neben den Speicher für die Bildschirmbuffer müssen ja auch noch die Texturen und Vertexdaten(statisch) in den Speicher der Grafikkarte.

Eine 512*512 32 Bit RGBA Texture ohne Mip-Map braucht auch schon 1 MB. Und 512*512 sind heute schon wenig. Bei 1024*1024 sind es dann schon 4 MB. Benutzt man dann noch Mip-Mapping wird es noch mehr.


So, jetzt oute ich mein 3D Unwissen komplett und frage ganz dumm:

1) Was ist ein Vertex?

2) Was ist Mip-Mapping?

3) Ist es also doch sinnvoll, eine Graka mit 128Mb zu kaufen, um damit die Auslagerung zu verhindern?

Man_In_Blue
2003-08-02, 22:12:00
Hmmm.

Hab mir das mit dem Tripple Buffer nochmal durch den Kopf gehen lassen...

Und ich hab follgende Schlussfolgerung gezogen: Wenn man den Tripple Buffer aktivirt müsste eigendlich eine verzögerung bei der Ausgabe des Bildes endstehen... sprich die Szenerie läuft (wahrscheinlich minimal) zeitfersetzt ab.

Stimmt das? Wenn ja: Ist das eine (unter Umständen) merkliche verzögerung?

Aquaschaf
2003-08-03, 00:38:16
Original geschrieben von Gast
So, jetzt oute ich mein 3D Unwissen komplett und frage ganz dumm:

1) Was ist ein Vertex?

2) Was ist Mip-Mapping?

3) Ist es also doch sinnvoll, eine Graka mit 128Mb zu kaufen, um damit die Auslagerung zu verhindern?

Ein Vertex ist sozusagen das kleinste Bauteil der Geometrie, die ja im Grafikspeicher gespeichert werden muss.

Um Aliasing zu verhindern und um Leistung zu sparen, werden von Texturen "Mipmaps" generiert, im Grunde sind das niedriger aufgelöste Versionen der Texturen, abhängig von der Distanz zum Betrachter werden solche Mipmaps dann verwendet, je weiter weg, desto niedriger ausfgelöst.

Das kommt auf die Karte an, einer Geforce 4 MX z.b. nützen 128MB praktisch gar nichts, sie kann aufgrund mangelnder Bandbreite die 128MB gar nicht oft genug auslesen und schreiben um einen Nutzen daraus zu ziehen.

aths
2003-08-03, 06:44:26
Original geschrieben von Gast
So, jetzt oute ich mein 3D Unwissen komplett und frage ganz dumm:

1) Was ist ein Vertex?Ein Eckpunkt (eines Polygons.)
Original geschrieben von Gast
2) Was ist Mip-Mapping?Wird hier erklärt: http://www.3dcenter.org/artikel/grafikfilter/index2.php (vor allem auf der Folgeseite.)
Original geschrieben von Gast
3) Ist es also doch sinnvoll, eine Graka mit 128Mb zu kaufen, um damit die Auslagerung zu verhindern? Grundsätzlich ja. Es gibt allerdings wichtigere Graka-Leistungsparameter als die Speichergröße.

aths
2003-08-03, 06:45:49
Original geschrieben von Man_In_Blue
Hmmm.

Hab mir das mit dem Tripple Buffer nochmal durch den Kopf gehen lassen...

Und ich hab follgende Schlussfolgerung gezogen: Wenn man den Tripple Buffer aktivirt müsste eigendlich eine verzögerung bei der Ausgabe des Bildes endstehen... sprich die Szenerie läuft (wahrscheinlich minimal) zeitfersetzt ab.

Stimmt das? Wenn ja: Ist das eine (unter Umständen) merkliche verzögerung? Ja, die Latenz vergrößert sich um ein weiteres Frame. Die Zeitversetzung ist in der Praxis (bei 60 fps z.B.) jedoch minimal.

Savini
2003-08-03, 13:19:49
Gibt es eine Möglichkeit, im laufenden Spiel herauszubekommen, ob Daten in den Hauptspeicher ausgelagert werden? Wäre ja ganz sinnvoll, zu wissen ob bei den persönlichen Qualitätseinstellungen, Auflösungen etc. dies nötig ist. Danach könnte man sich überlegen, ob man zur Steigerung der Performance eine Graka mit mehr Speicher oder ein Board mit AGP nfach wählt. Oder man könnte Auflösung, Quali etc. so lange tunen, bis das Auslagern nicht mehr stattfindet. Das müßte doch einen deutlichen Performance Sprung bringen, oder?

Xmas
2003-08-06, 23:53:05
Original geschrieben von Savini
Gibt es eine Möglichkeit, im laufenden Spiel herauszubekommen, ob Daten in den Hauptspeicher ausgelagert werden? Wäre ja ganz sinnvoll, zu wissen ob bei den persönlichen Qualitätseinstellungen, Auflösungen etc. dies nötig ist. Danach könnte man sich überlegen, ob man zur Steigerung der Performance eine Graka mit mehr Speicher oder ein Board mit AGP nfach wählt. Oder man könnte Auflösung, Quali etc. so lange tunen, bis das Auslagern nicht mehr stattfindet. Das müßte doch einen deutlichen Performance Sprung bringen, oder?
Teste die Performance bei verschiedenen Auflösungen. Wenn die Leistung bei höheren Auflösungen stark überproportional fällt, werden höchstwahrscheinlich Daten in den Hauptspeicher ausgelagert.
Wenn die Leistung dann nicht den Ansprüchen genügt, ist es immer sinnvoller eine bessere Grafikkarte denn ein Board mit schnellerem AGP-Port zu kaufen.

Gast
2003-08-15, 23:30:29
Seid ihr so freundlich und schaut mal in den folgenden Thread und gebt euren Senf dazu ab? Er ergänzt die Sache mit Double/Triple Buffering:

http://www.forum-3dcenter.org/vbulletin/showthread.php?threadid=88232