Dieser Blog-Beitrag, den John erwähnt, ist ein ziemlich guter Anfang (wenn ich das selbst sage!), Aber es gibt ein paar zusätzliche Details, die hilfreich sein könnten.
Für die PowerVR-Architektur wird die Zwischendatenstruktur - im Folgenden als primitive Liste oder Parameterpuffer (PB) bezeichnet -, in der die Daten pro Kachel gespeichert werden, nachdem alle Schattierungen der Scheitelpunkte und der Kachelungsprozess abgeschlossen sind, hauptsächlich von generiert und verwaltet die Hardware, anstatt der Treiber.
Die In-Memory-Strukturen des PB sind physikalisch in zwei Teile aufgeteilt. Zunächst Blöcke transformierter Scheitelpunktdaten, einschließlich Scheitelpunktattributen. Die Blöcke sind komprimiert, und wie Sie sich vorstellen können, handelt es sich größtenteils nur um gepackte und komprimierte Gleitkommadaten. Die zweite speicherinterne Struktur sind die Kacheldaten, die effektiv eine Liste von Listen sind.
Die Liste der obersten Ebene in dieser Datenstruktur wird als Region bezeichnet und kann für einen bestimmten primitiven Block eine Reihe von Kacheln anstelle einzelner Kacheln gleichzeitig codieren. Eine Region ist daher eine Reihe von Positionen für Bildschirmkacheln, Kachelzustände und dann eine Liste der komprimierten Blöcke, die die Geometrie in dieser Region enthalten. Mit Regionen arbeitet der Rasterer, und Sie können sich vorstellen, dass leere Kacheln nur automatisch übersprungen werden, obwohl es in einigen Fällen einen guten Grund gibt, dass der Rasterer leere Regionen besucht.
Der von der GPU für das PB verwendete Speicher wird in allen modernen PowerVR-Implementierungen dynamisch zugewiesen. Ein Zeiger auf diesen Speicher wird vom Treiber bereitgestellt, und der Treiber passt die Größe mithilfe der GPU nach Bedarf an. Dieser Mechanismus ist ein Kompromiss zwischen einer häufigen Neuzuweisung und der Minimierung des zugewiesenen PB-Speicherplatzes.
Moderne GPUs sind sehr bemüht, die Indirektion des Arbeitsspeichers zu minimieren, aber es ist einer der Fälle, in denen es wirklich schwierig ist und es keine andere Wahl gibt, die PB zu durchlaufen, um die Rasterisierungsstufe zu speisen. Zum Glück schließt die Zeigerjagd große Blöcke ab, die gut zwischengespeichert und in den Kern gestreamt werden.
Andere Architekturen funktionieren nicht genau so wie PowerVR, da der PB zum Teil so ist, wie er in unserer Architektur ist, um das vollständig verzögerte Pixelschattierungskonzept zu unterstützen, das wir implementieren. Das allgemeine Konzept gilt jedoch für alle anderen Kacheln in der Mobiler Raum, den ich kenne.