ATi Radeon X800 - grafická (r)evoluce
10.5.2004, Zdeněk Kabát, článek
Přibližně 3 týdny po vypuštění GeForce 6800 vrací kanadská ATi Technologies úder - Radeon X800 vyvíjený pod kódovým označením Loki je na světě. V jádru je čip sice podobný předchozím, ale přichází navíc s masivním paralelismem (až 16 pixel pipeline), novou technologií 3Dc a úpravami v paměťovém řadiči a FSAA. V článku najdete detaily o nové "tajné zbrani" ATi.
Kapitoly článku:
Vertex pipeline
A nyní si již rozeberme pipeline část po části. První, co se v grafickém čipu po přijetí dat po sběrnici děje, je ustanovení geometrie. To provádí část zvaná Vertex pipeline, u Radeonu X800 následovaná jednotkami pro Backface Culling a Clipping (ořezává části scény, které nejsou vidět – jsou mimo obraz nebo překryté jinými objekty), Perspective Divide a Viewport Transform. Nakonec putují data do enginu pro ustanovení trojúhelníků (Triangle Setup).
Obr. 4 – Detailní pohled na vertex pipeline
Radeon X800 obsahuje celkem 6 vertex pipeline, které dokáží zpracovat až 1,5 trojúhelníku za takt. Celkem je to tedy u „XT“ verze až 780 milionů trojúhelníků, o 90% více než u Radeonu 9800XT. V každé pipeline se nachází ještě Vertex Shader, který zůstává prakticky stejný jako u R300. Bohužel proto zůstává jen u podpory Shaderů 2.0 a na rozdíl od GeForce 6800 nemůže pracovat s texturami (potřebné pro HW Displacement Mapping) a je omezen na konstantní proměnné.
Vertex shader se skládá z vektorové ALU, která obsahuje 4 komponenty, a ze skalární ALU. Jednotky pracují v 32-bitové FP hloubce. Novinkou je možnost provádět trigonometrické operace (sin a cos) během jednoho cyklu.
Na konci Vertex pipeline, po ořezání nepotřebných částí scény a několika transformacích se celý obraz převede na trojúhelníky a každému se přiřadí souřadnice textur, barva a Z-hodnota. Následuje rozdělení do dlaždice, které jsou dále zpracovávány v jednotlivých čtveřicích pixel pipeline.
Pixel pipeline
Zde se podívejte, jak vypadá celý segment pipeline, který má na starosti renderování:
Obr. 5 – 16 renderovacích pipeline v Radeonu X800
Skládá se tedy z 16 pixel pipeline, které jsou rozděleny do čtveřic. Jak jsem zmiňoval, u různých verzí Radeonu X800 bude aktivován různý počet čtveřic. Připadají tak v úvahu možnosti 16x1, 12x1 a 8x1. V podstatě jde o stejnou architekturu jako u GeForce 6800, ale jako první se objevila u Radeonu 9700 (2x quad-pipeline).
Zde je samostatný blok, zvaný quad-pipeline. Jeho části se rozebereme dále:
Obr. 6 – Jedna ze čtveřic renderovacích pipeline
HyperZ HD
Ještě před samotnými pipeline se podívejme na součást každé quad-pipeline zvanou HyperZ HD. Tato technologie opět nezapře podobnost s předchozí HyperZ III u R300. HyperZ HD se skládá z hierarchického Z-bufferu, který spolupracuje s Early Z testem, dále obsahuje samotnou Z/Stencil Cache a nakonec se stará o Z kompresi a rychlé vyčištění bufferu.
Obr. 7 – Součást každé quad-pipeline – HyperZ HD engine
První část, tedy hierarchické Z + Early Z Test, má za úkol vypustit bloky pixelů, které nebudou v závěrečné scéně vidět. Aby se ušetřil čas a výkon, jsou kontrolovány celé bloky pixelů, které jsou v případě quad-pipeline stejně velké jako vstupní bloky ze Setup Enginu. Pokud je při ověření zjištěno, že blok nebude viditelný, není dále zpracováván a nastupuje další. V opačném případě se blok rozdělí na 4 menší segmenty, které jsou opět ověřovány zvlášť. Early Z Test ale nepostihne všechny pixely, takže je dále před zápisem do frame bufferu provedena ještě jedna kontrola viditelnosti.
Hierarchický Z-buffer má tu výhodu, že dokáže pojmout až 4 megapixely dat, a proto pracuje bez problémů s vysokými rozlišením (až 1920x1080). Ale ani v případě, že renderovaná scéna přesáhne velikost Z-bufferu, není to neštěstí. V tomto případě je zpracováváno takové procento scény, které se do bufferu vejde a jen zbytek je nechán nezpracován.
A ještě nám zbývá poslední část HyperZ enginu. Patří do ní Z komprese, která dokáže u R420 nově pracovat až v poměru 8:1 (bezztrátově). Navíc je škálovatelná s použitím FSAA, takže při 6x AA zvládá komprimovat Z-hodnoty až v poměru 48:1. Posledním bodem je Fast Z Clear, nebo-li rychlé vyčištění Z-bufferu. To používá způsob vyprazdňování po blocích a ušetří tak určitý počet cyklů.
A nyní si již rozeberme pipeline část po části. První, co se v grafickém čipu po přijetí dat po sběrnici děje, je ustanovení geometrie. To provádí část zvaná Vertex pipeline, u Radeonu X800 následovaná jednotkami pro Backface Culling a Clipping (ořezává části scény, které nejsou vidět – jsou mimo obraz nebo překryté jinými objekty), Perspective Divide a Viewport Transform. Nakonec putují data do enginu pro ustanovení trojúhelníků (Triangle Setup).
Obr. 4 – Detailní pohled na vertex pipeline
Radeon X800 obsahuje celkem 6 vertex pipeline, které dokáží zpracovat až 1,5 trojúhelníku za takt. Celkem je to tedy u „XT“ verze až 780 milionů trojúhelníků, o 90% více než u Radeonu 9800XT. V každé pipeline se nachází ještě Vertex Shader, který zůstává prakticky stejný jako u R300. Bohužel proto zůstává jen u podpory Shaderů 2.0 a na rozdíl od GeForce 6800 nemůže pracovat s texturami (potřebné pro HW Displacement Mapping) a je omezen na konstantní proměnné.
Vertex shader se skládá z vektorové ALU, která obsahuje 4 komponenty, a ze skalární ALU. Jednotky pracují v 32-bitové FP hloubce. Novinkou je možnost provádět trigonometrické operace (sin a cos) během jednoho cyklu.
Na konci Vertex pipeline, po ořezání nepotřebných částí scény a několika transformacích se celý obraz převede na trojúhelníky a každému se přiřadí souřadnice textur, barva a Z-hodnota. Následuje rozdělení do dlaždice, které jsou dále zpracovávány v jednotlivých čtveřicích pixel pipeline.
Pixel pipeline
Zde se podívejte, jak vypadá celý segment pipeline, který má na starosti renderování:
Obr. 5 – 16 renderovacích pipeline v Radeonu X800
Skládá se tedy z 16 pixel pipeline, které jsou rozděleny do čtveřic. Jak jsem zmiňoval, u různých verzí Radeonu X800 bude aktivován různý počet čtveřic. Připadají tak v úvahu možnosti 16x1, 12x1 a 8x1. V podstatě jde o stejnou architekturu jako u GeForce 6800, ale jako první se objevila u Radeonu 9700 (2x quad-pipeline).
Zde je samostatný blok, zvaný quad-pipeline. Jeho části se rozebereme dále:
Obr. 6 – Jedna ze čtveřic renderovacích pipeline
HyperZ HD
Ještě před samotnými pipeline se podívejme na součást každé quad-pipeline zvanou HyperZ HD. Tato technologie opět nezapře podobnost s předchozí HyperZ III u R300. HyperZ HD se skládá z hierarchického Z-bufferu, který spolupracuje s Early Z testem, dále obsahuje samotnou Z/Stencil Cache a nakonec se stará o Z kompresi a rychlé vyčištění bufferu.
Obr. 7 – Součást každé quad-pipeline – HyperZ HD engine
První část, tedy hierarchické Z + Early Z Test, má za úkol vypustit bloky pixelů, které nebudou v závěrečné scéně vidět. Aby se ušetřil čas a výkon, jsou kontrolovány celé bloky pixelů, které jsou v případě quad-pipeline stejně velké jako vstupní bloky ze Setup Enginu. Pokud je při ověření zjištěno, že blok nebude viditelný, není dále zpracováván a nastupuje další. V opačném případě se blok rozdělí na 4 menší segmenty, které jsou opět ověřovány zvlášť. Early Z Test ale nepostihne všechny pixely, takže je dále před zápisem do frame bufferu provedena ještě jedna kontrola viditelnosti.
Hierarchický Z-buffer má tu výhodu, že dokáže pojmout až 4 megapixely dat, a proto pracuje bez problémů s vysokými rozlišením (až 1920x1080). Ale ani v případě, že renderovaná scéna přesáhne velikost Z-bufferu, není to neštěstí. V tomto případě je zpracováváno takové procento scény, které se do bufferu vejde a jen zbytek je nechán nezpracován.
A ještě nám zbývá poslední část HyperZ enginu. Patří do ní Z komprese, která dokáže u R420 nově pracovat až v poměru 8:1 (bezztrátově). Navíc je škálovatelná s použitím FSAA, takže při 6x AA zvládá komprimovat Z-hodnoty až v poměru 48:1. Posledním bodem je Fast Z Clear, nebo-li rychlé vyčištění Z-bufferu. To používá způsob vyprazdňování po blocích a ušetří tak určitý počet cyklů.