Archiv verlassen und diese Seite im Standarddesign anzeigen : Wann machen heutige Grafikkarten den Z-Test?
Nasenbaer
2009-03-05, 14:45:07
Früher haben ja Grakas immer erst den Farbwert für jedes Pixel berechnet und erst dann entschieden ob dieser tatsächlich in den Framebuffer geschrieben werden soll. Was bei hohem Overdraw natürlich nicht so toll war.
Vor ein paar Jahren gabs dann ja mal Entwicklungen in der Richtung. Mich würde deshalb mal intressieren wann heutige Grafikkarten nun eingentlich den Z-Test machen und wieiviel ggf. an bereits berechneten Ergebnissen weggeschmissen wird.
GeneralHanno
2009-03-05, 14:49:32
eigentlich unterstützen alle gängigen grafikkarten "early-z". nicht zu vergleichen mit früher ;)
ansonsten kannst du dir ja bei computerbase die artikel zum R600 und G80 mal durchlesen ...
Nasenbaer
2009-03-05, 23:03:16
Hab das Artikelarchiv von Computerbase komplett durchsucht aber keinen Artikel speziell zu den Architekturen gefunden - nur Tests zu speziellen Grafikkarten. Kann mir keiner weiterhelfen?
Hab das Artikelarchiv von Computerbase komplett durchsucht aber keinen Artikel speziell zu den Architekturen gefunden - nur Tests zu speziellen Grafikkarten. Kann mir keiner weiterhelfen?
Versuch es mal mit 3dconcept.ch
Da gibt es jede Menge Infos zu den alten Karten.
Auch um die Geschichte um Tile based Rendering der Kryo Karten.
Nasenbaer
2009-03-06, 09:08:53
Ich kenne die Seite aber mir geht es ja um die aktuellen Generationen. Also ab G70 würde mir erstmal reichen. Und die Artikel, die ich zu den Architekturen gelesen hatte als sie neu waren hatten sich dazu glaube ich nicht explizit geäußert.
Vielleicht auch, weil sich da in letzter Zeit nicht soviel getan hat. Deswegen dachte ich ja, dass mir jemand weiterhelfen könnte. :)
ScottManDeath
2009-03-06, 10:27:58
Solange sich die Coverage nicht aendert, z.b. durch discard im Fragmentshader/ Alphatest und der Fragmentshader den Z-wert nicht aendert, wird der der Z-Test vor dem Fragmentshader ausgefuehrt.
Nasenbaer
2009-03-06, 10:36:59
Ah ok also direkt vor der Berechnung des Farbwertes des Pixels. Das wollte ich wissen. Danke. :)
Chris Lux
2009-03-06, 11:36:24
Solange sich die Coverage nicht aendert, z.b. durch discard im Fragmentshader/ Alphatest und der Fragmentshader den Z-wert nicht aendert, wird der der Z-Test vor dem Fragmentshader ausgefuehrt.
ich glaube mit dem discard etc. hat das nichts zu tun. ich glaube ein fragment, bei welchem durch den shader potentiell der z wert geschrieben wird kann nicht vorzeitig entfernt werden. eines bei dem der z wert im shader nicht geschrieben wird kann trotzdem alpha etc. tests durchlaufen und trotzdem vorzeitig durch den z test entfernt werden.
Chris Lux
2009-03-06, 11:38:37
Ah ok also direkt vor der Berechnung des Farbwertes des Pixels. Das wollte ich wissen. Danke. :)
jap, die pipe ist grob diese:
vertex processing -> primitive setup -> rasterization -> fragment processing -> raster operations.
der early-z wäre vor dem fragment processing und der normale z-test danach als teil der raster ops.
ich glaube mit dem discard etc. hat das nichts zu tun. ich glaube ein fragment, bei welchem durch den shader potentiell der z wert geschrieben wird kann nicht vorzeitig entfernt werden. eines bei dem der z wert im shader nicht geschrieben wird kann trotzdem alpha etc. tests durchlaufen und trotzdem vorzeitig durch den z test entfernt werden.
Das Problem ist dass der nächste Z-Test an selber Stelle wissen muss ob ein Fragment Z schreibt oder nicht. Wenn also der Z-Test immer vorgezogen wird, dann braucht die Hardware einen Mechanismus bei dem der Z-Test so lange blockiert bis alle vorherigen Fragmente, welche sich an selber Stelle befinden und bei denen die Sichtbarkeit noch nicht feststeht, die Pipeline verlassen haben.
Das ist gar nicht so einfach, weswegen etwas ältere Hardware Early-Z einfach abschaltet wenn Fragment Shader mit discard/Z-Write vorkommen.
Es gibt Möglichkeiten dies zu umgehen, beispielsweise indem man den Early-Z-Test konservativ macht und wenn nötig einen zweiten Z-Test nach dem Fragment Shader vornimmt.
Es gibt Möglichkeiten dies zu umgehen, beispielsweise indem man den Early-Z-Test konservativ macht und wenn nötig einen zweiten Z-Test nach dem Fragment Shader vornimmt.
wie meinst du das? wenn ein fragment mal verworfen ist kann man ja nicht hinterher einen erneuten Z-test machen.
Deswegen ja ein konservativer Z-Test. Konservativ bedeutet hier dass nur Fragmente verworfen werden die den Z-Test definitiv nicht bestehen. Nach dem Fragment Shader hat man dann sämtliche notwendigen Informationen und führt den finalen Z-Test aus.
Chris Lux
2009-03-06, 15:59:42
das kann man aber ohne weitere informationen nicht machen. denn man kann dem treiber vorher nicht sagen die z werte werden nur 10% oder so vom dem z-wert des ursprünglichen fragments abweichen. somit ist der early-z derzeit aus wenn der z-wert im shader angefasst wird.
das kann man aber ohne weitere informationen nicht machen. denn man kann dem treiber vorher nicht sagen die z werte werden nur 10% oder so vom dem z-wert des ursprünglichen fragments abweichen. somit ist der early-z derzeit aus wenn der z-wert im shader angefasst wird.
Das bezog sich auch eher auf discard, wobei es in DX11 Z-Writes mit Bereichsgarantie geben wird.
Deswegen ja ein konservativer Z-Test. Konservativ bedeutet hier dass nur Fragmente verworfen werden die den Z-Test definitiv nicht bestehen.
und wie will man das vorher wissen?
Chris Lux
2009-03-06, 19:54:25
bsp. relief mapping, da kann man abschätzen wie sehr sich der z-wert ändert.
und wie will man das vorher wissen?
Wenn der Shader kein Z schreibt ist das einfach.
ScottManDeath
2009-03-06, 23:29:46
bsp. relief mapping, da kann man abschätzen wie sehr sich der z-wert ändert.
Das bezog sich auch eher auf discard, wobei es in DX11 Z-Writes mit Bereichsgarantie geben wird.
Dann kann man damit auch Hierarchical Z fuer diese Faelle machen.
Wenn der Shader kein Z schreibt ist das einfach.
wenn er keinen schreibzugriff auf Z macht ist es klar, nur wenn er es macht ist es wohl keine gute idee einfach zu sagen, hoffen wir mal dass sich Z nicht stärker als den wert x ändert und verwerfen wir einfach das ganze.
Dann kann man damit auch Hierarchical Z fuer diese Faelle machen.
Natürlich, Hierarchical Z ist ja auch nur eine bestimmte Form von konservativem Z-Test.
wenn er keinen schreibzugriff auf Z macht ist es klar, nur wenn er es macht ist es wohl keine gute idee einfach zu sagen, hoffen wir mal dass sich Z nicht stärker als den wert x ändert und verwerfen wir einfach das ganze.
In dem Fall gibt es eben einfach keine Fragmente die man vor dem Fragment Shader verwerfen kann.
vBulletin®, Copyright ©2000-2024, Jelsoft Enterprises Ltd.