<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
		<id>https://wiki.delphigl.com/index.php?action=history&amp;feed=atom&amp;title=Vertex_Cache</id>
		<title>Vertex Cache - Versionsgeschichte</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.delphigl.com/index.php?action=history&amp;feed=atom&amp;title=Vertex_Cache"/>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Vertex_Cache&amp;action=history"/>
		<updated>2026-04-21T11:16:49Z</updated>
		<subtitle>Versionsgeschichte dieser Seite in DGL Wiki</subtitle>
		<generator>MediaWiki 1.27.4</generator>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Vertex_Cache&amp;diff=18434&amp;oldid=prev</id>
		<title>Lyr am 19. Juli 2006 um 10:45 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Vertex_Cache&amp;diff=18434&amp;oldid=prev"/>
				<updated>2006-07-19T10:45:47Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Vor allem bei [[Vertexgebunden]]en Applikationen sollte man darauf achten den Vertex Cache möglichst effektiv zu nützen. Der Vertex Cache - oder Transform &amp;amp; Lighting Cache - wird unterteilt in Pre- und Post-T&amp;amp;L-Cache.&lt;br /&gt;
&lt;br /&gt;
==Pre-T&amp;amp;L-Cache==&lt;br /&gt;
Der Pre-T&amp;amp;L-Cache ist vergleichbar mit dem Cache der CPU. Wenn wir mit der CPU auf ein Byte im RAM zugreiffen, so wird ja bekanntlich der gesamte Block (in dem sich das gesuchte Byte befindet) im Cache abgelegt. Wenn nun auf Bytes im selben Block zugegriffen wird, so befinden sich diese bereits im Cache und dieser erlaubt einen schnellen Zugriff. Auf sehr ähnliche Weise funktioniert der Pre-T&amp;amp;L-Cache. Wenn wir einen größeren Array von [[Vertex|Vertices]] besitzen und über eine Index-Liste darauf zugreifen, so bewirkt ein Zugriff auf einen [[Vertex]] nicht nur das holen des gesuchten Vertex, sondern der gesamte Block in dem sich der [[Vertex]] befindet wird in den Pre-T&amp;amp;L-Cache geladen. Wird nun solange dieser Block im Cache liegt ein Index angegeben, welcher einen [[Vertex]] im selben Block referenziert, so kann dieser [[Vertex]] sehr schnell aus dem Cache ausgelesen werden.&lt;br /&gt;
&lt;br /&gt;
===Cache-Größe===&lt;br /&gt;
Der Pre-T&amp;amp;L-Cache ist üblicherweise verhältnismäßig groß. Einige Beispiele:&lt;br /&gt;
* GeForce FX 3000: ~8,000 [[Vertex|Vertices]]&lt;br /&gt;
* GeForce FX 6800: ~64,000 [[Vertex|Vertices]]&lt;br /&gt;
&lt;br /&gt;
===Hinweise zur Performance===&lt;br /&gt;
Bei diesem Cache können nur begrenzt allgemein gültige Hinweise zur Performance gegeben werden, da verschiedene Grafikkarten unterschiedliche Strategien und Implementierungen besitzen können. Üblicherweise sollten jedoch folgende Punkte beachtet werden:&lt;br /&gt;
* Verhältnismäßig sequenzielle Zugriffe auf einen [[Vertex]]-Array sind wünschenswert.&lt;br /&gt;
* [[Vertex]]-Array-Blöcke die zu groß für den Cache sind können sich negativ auswirken, vor allem bei eher wenigen sequenziellen Zugriffen.&lt;br /&gt;
* Mehrere [[Vertex]]-Daten-Streams können sich negativ auswirken, wodurch meistens verschachtelte Streams (siehe [[glInterleavedArrays]]) vorzuziehen sind. Wenn jedoch beispielsweise die [[Vertex]]-Daten statisch sind jedoch die Farbwerte oder Texturcoordinaten dynamisch, so ist es natürlich dennoch besser wenn die [[Vertex]]-Daten getrennt im GPU-Speicher abgelegt werden.&lt;br /&gt;
* Vor allem bei eher nicht sequenziellen Zugriffen ist es üblicherweise hilfreich wenn die Daten für einen [[Vertex]] eine &amp;quot;gut handhabbare&amp;quot; Größe besitzen (üblicherweise 32 Byte).&lt;br /&gt;
&lt;br /&gt;
==Post-T&amp;amp;L-Cache==&lt;br /&gt;
Der Post-T&amp;amp;L-Cache dient dazu um Ergebnisse der [[Feste Funktionspipeline#Vertex Pipeline|Vertex-Pipeline]] zu speichern. Wenn ein vor kurzem berechneter [[Vertex]] identisch ist mit dem zu berechnenden [[Vertex]], so wird das gespeicherte Ergebnis verwendet und somit muss dieser [[Vertex]] die [[Feste Funktionspipeline#Vertex Pipeline|Vertex-Pipeline]] nicht mehr durchlaufen. Zu beachten ist, dass dieser Cache üblicherweise als FIFO (First in first out) realisiert ist und nicht der für Cache-Systeme gängigere LRU (Least recently used) Algorithmus verwendet wird.&lt;br /&gt;
&lt;br /&gt;
===Cache-Größe===&lt;br /&gt;
Die größe dieses Caches ist üblicherweise stark begrenzt. Einige Beispiele:&lt;br /&gt;
* GeForce 1&amp;amp;2: 16 [[Vertex|Vertices]]&lt;br /&gt;
* GeForce 3: 24 [[Vertex|Vertices]]&lt;br /&gt;
&lt;br /&gt;
===Hinweise zur Performance===&lt;br /&gt;
Hier sollte man nur darauf achten, dass gleiche [[Vertex|Vertices]] möglichst schnell hintereinander verwendet werden. Das typische Beispiel hierfür ist ein 2 dimensionales Gitternetz (beispeilsweise eine [[Heightmap]]) bei dem immer ein Streifen mit einem Triangle-Strip gezeichnet wird. Besitzen wir beispielsweise einen Vertex-Cache mit 16 Einträgen, so ist die optimale größe für einen Triangle-Strip 7 Vierecke (wofür wir genau 16 Eckpunkte benötigen). Zeichen wir nun den darunter liegenden Streifen, wo die Hälfte der Punkte mit dem oberen Streifen geteilt werden, so wird für jeden zweiten Punkt der Vertex-Cache verwendet. Werden hingegen 8 Vierecke je Streifen gezeichnet, so wird der Vertex-Cache überhaupt nicht verwendet. Wenn man also mehr als 7 Vierecke je Streifen besitzt, so ist es besser man zeichnet den ersten Streifen von links nach rechts und den zweiten Streifen von rechts nach links usw., wodurch wenigstens ein Teil der Punkte noch im Vertex-Cache zu finden ist.&lt;br /&gt;
&lt;br /&gt;
==Referenzen==&lt;br /&gt;
* [http://www.ati.com/developer/dx9/ATI-DX9_Optimization.pdf Performance Optimization Techniques for ATI Graphics Hardware with DirectX® 9.0]&lt;/div&gt;</summary>
		<author><name>Lyr</name></author>	</entry>

	</feed>