zeckensack
2003-08-24, 20:02:20
Ich habe mich jetzt ein wenig mit VBOs unter OpenGL befasst, die ja ein ähnliches Nutzungsprofil aufweisen wie D3D's Vertexbuffer.
Nun ist mir aufgefallen, daß es unzählige Nutzungsmöglichkeiten gibt, die schlechter sind als Vertex Arrays im System-Speicher. Es ist beispielsweise so gut wie unmöglich, VBOs für dynamische Daten (ändern, einmal rendern, wiederholen) zu benutzen, egal ob man die korrekten usage hints benutzt, und egal ob man den Transfer von der API machen lässt, oder den Speicher "lockt". Ich erreiche bisher immer weniger Performance, als würde ich die Daten einfach im System-Speicher parken.
Das einzige was wirklich schneller wird, ist statische Geometrie.
Ist das bei D3D auch so? Weil, irgendwie denke ich könnte das glatt ein Architekturproblem sein. HW-Buffer können theoretisch System-Bandbreite sparen (mindestens ein Kopiervorgang entfällt), und bieten natürlich dem Chip eine höhere Lesebandbreite.
Nur auf der anderen Seite stehen üble Synchronisationsprobleme (wenn aus einem Puffer gelesen wird, während er geändert werden soll) und der AGP, der IMO ziemlich stark auf DMA ausgelegt ist.
Ist das ein Treiberproblem? Vielleicht, aber irgendwie kann ich mir nicht so recht vorstellen, daß ATI und NV, die sehr ähnliche Funktionalität schließlich auch für D3D zur Verfügung stellen, auf einmal damit Probleme haben sollten.
Hmmm ...
Nun ist mir aufgefallen, daß es unzählige Nutzungsmöglichkeiten gibt, die schlechter sind als Vertex Arrays im System-Speicher. Es ist beispielsweise so gut wie unmöglich, VBOs für dynamische Daten (ändern, einmal rendern, wiederholen) zu benutzen, egal ob man die korrekten usage hints benutzt, und egal ob man den Transfer von der API machen lässt, oder den Speicher "lockt". Ich erreiche bisher immer weniger Performance, als würde ich die Daten einfach im System-Speicher parken.
Das einzige was wirklich schneller wird, ist statische Geometrie.
Ist das bei D3D auch so? Weil, irgendwie denke ich könnte das glatt ein Architekturproblem sein. HW-Buffer können theoretisch System-Bandbreite sparen (mindestens ein Kopiervorgang entfällt), und bieten natürlich dem Chip eine höhere Lesebandbreite.
Nur auf der anderen Seite stehen üble Synchronisationsprobleme (wenn aus einem Puffer gelesen wird, während er geändert werden soll) und der AGP, der IMO ziemlich stark auf DMA ausgelegt ist.
Ist das ein Treiberproblem? Vielleicht, aber irgendwie kann ich mir nicht so recht vorstellen, daß ATI und NV, die sehr ähnliche Funktionalität schließlich auch für D3D zur Verfügung stellen, auf einmal damit Probleme haben sollten.
Hmmm ...