xLoMx schrieb:
@35)aths
ich frage hiermit, kannst du mir das erklären?
Ob 8x1 oder 4x2 ist beim Pixelshading fast belanglos. Diese Angabe ist eigentlich nur für das Multi-Texturing interessant.
Leider ist so eine Angabe ungefähr so hilfreich wie "4x Anti-Aliasing". Bei 4x Anti-Aliasing weiß man ja, 4 Subpixel pro Pixel. Aber nicht ob Multi- oder Supersampling, bzw. welche Anordnungen die Subpixel haben.
Genauer wäre in unserem Fall: 8x1 bilinear bzw. 4x2 bilinear. Dazu muss man wissen, dass Pixel nicht als einzelne Pixel die Pipelines durchlaufen, sondern als Quad. Ein Quad ist ein 2x2 großer Pixel-Block. Streng genommen hat die GeForce dann auch keine 4 Pipelines, sondern 1 Pipeline mit 4x SIMD. Aber "Pipeline" zu sagen, hat sich nun mal eingebürgert.
Außerdem hat GeForce2, 3, 4 Ti, FX 5800, 5900 und 5950 insgesamt 8 bilineare TMUs. Davon können pro Pixel 2 gleichzeitig genutzt werden.
Radeon9700 und 9800 haben immer 2 Quads drin (um die 8 "Pipelines" vollzukriegen.) Hier steht pro Pixel nur 1 bilineare TMU zur Verfügung, dafür sind doppelt so viele in der Pipeline.
Sofern trilinear oder anisotrop gefiltert wird, sind ohnehin mehr als ein bilineares Sample pro Pixel und Textur notwendig. Dann ist es für die Multitexturing-Performance völlig nebensächlich, ob 8x1 oder 4x2. Sowohl für bessere Filterung als bilinear, als auch für Multitexturing ansich, wird Loop Back gemacht. Er speichert das Ergebnis-Register, und nutzt dieselbe TMU für den nächsten Sampling-Schritt gleich noch mal.
Beide Designs haben 8 TMUs. Ob man nun eine TMU 2x nutzt, oder 2 TMUs gleichzeitig nutzt, ist dann auch egal.
Die Unterschiede sind hier beim Pixelshading zu finden. Für DirectX9 gilt, wenn man das etwas vereinfacht: Jede Pipe des P300 kann pro Takt eine große und eine kleine Rechnung machen, oder eine sehr große. Jede Pipe des NV35 kann pro Takt zwei sehr große Rechnungen machen. Damit hebt sich der Vorteil von 8 vs. 4 Pipes wieder auf. Nur kann CineFX solche "sehr großen" Recheneinheiten eben nicht in "große+kleine" aufsplitten. Sofern diese nämlich paarweise auftreten, kann auch R300 pro Pipe und Takt gleich 2 Rechungen machen.
Zum Multitexturing sei noch zu sagen, dass sich in den Pipes ohnehin immer mehrere Quads gleichzeitig befinden. Erst wird die erste Charge gesampelt (die TMUs sind am Werk) und dann verrechnet (mit den Combinern.) Während die erste Charge verrechnet wird, wird die zweite Charge gesampelt. So kann man sich auch das Pixelshading beim R300 vorstellen, nur dass dort pro Shader 4 Phasen möglich sind, also 4x erst gesampelt und dann verrechnet werden kann.
Das Pixelshading mit CineFX ist das etwas komplizierter, weil dort noch viel mehr Quads gleichzeitig verarbeitet werden. Demirug hat hierzu auf 3dcenter einen tollen Artikel geschrieben:
http://www.3dcenter.de/artikel/cinefx/ (der Artikel beschäftigt sich überwiegend mit NV30, während ich gleich den NV35 genommen habe. Zu dem kann man dort aber auch was lesen. Meine Infos zum CineFX-Pixelshading stammen vor allem aus jenem Artikel.)