Re: Anti-Jammer-Thread
Verfasst: 09.05.2013, 18:45
Das zeigt, dass es technisch möglich ist, die 24 ungenutzten Bits intern zu ignorieren. Dann würde es mich wundern, wenn Nvidia es nicht täte.
Die deutsche Spieleentwickler-Community (seit 1999).
https://zfx.info/
Vielleicht mal ein Update davon machen. Hier oeffnet LibreOffice das alles problemlos :!:Niki hat geschrieben:Und OpenOffice kann die PPSX-Datei scheinbar nicht öffnen, weshalb ich das nicht lesen kann ohne erst einen PowerPoint-Viewer zu installieren. Werde ich wohl nachher tun.Krishty hat geschrieben:P.S.: Es ist eine Pest, dass diese Dokumente alle im PowerPoint-Format vorliegen. Echt mal, WTF?! Dass OpenOffice fürn Arsch ist weiß ich ja, aber zumindest PDF als de-facto-Standard könnte man benutzen …
Dass der konservative depth output nicht die Early-Z-Optimierungen reaktiviert, liegt daran, dass man die Tiefenwerte im Pixelshader beliebig setzen kann, solange man die konservativen Bedingungen (beispielsweise SV_DEPTH_GREATER_EQUAL) einhält; ein Late-Z-Test ist somit immer notwendig, und ein Early-Z-Test könnte im Allgemeinen falsche Ergebnisse liefern.CodingCat hat geschrieben:Woher kommt das?eXile hat geschrieben:Bevor ihr alle losrennt, und eure z-Buffer umstellt: Der konservative depth output reaktiviert nur die Hierarchical-Z-, nicht aber Early-Z-Optimierungen. [...] Um diesen Post noch etwas mit interessanten Sachen zu unterfuttern:[...]
Ich glaube, Z-Cull ist Nvidia-Slang (grün) für AMDs Hi-Z (rot). Ich hatte leider vergessen, die Quelle anzugeben. Siehe Krishtys Post. Auch noch einmal Dank dafür.CodingCat hat geschrieben:Wo liegt der Unterschied zwischen Z-Cull und Early Depth?
Kann man. Deswegen steht [earlydepthstencil] auch in einer anderen Zeile, nämlich über der Zeile, in welcher UAVs oder konservativer depth output angegeben sind. Wenn man [earlydepthstencil] angibt, landet man in jedem Falle ganz links.CodingCat hat geschrieben:Wieso benutzen die bei UAVs und/oder konservativen Tiefen kein [earlydepthstencil]?
Nein, Zeilenumbrüche in den Zellen der Abbildung sind als logische Oder-Operation zu deuten. ;)CodingCat hat geschrieben:Wieso nutzen die ausgerechnet im Standardfall [earlydepthstencil], wo ich eine Erkennung desselben vollautomatisch erwarten würde? Beziehen die sich ausgerechnet da auf Stenciloperationen?!
Dass ein Late-Z-Test zusätzlich erforderlich ist, ist klar. Aber die konservative Bedingung wird doch genau dafür aufgestellt, dass durch die Bedingung definitiv verdeckte Geometrie bereits im Vorhinein ausgeschlossen werden kann. Eine Early-Z-Optimierung zusätzlich zum Late-Z-Test würde im Allgemeinen jedenfalls keine Fragmente fälschlicherweise ausschließen. Insofern erschließt sich mir der Aussagegehalt eines "deaktivierten Early-Z" nicht ganz - mir scheint eher, hier fliegen willkürlich gewählte Marketingbegriffe durcheinander, bei denen die Bedeutung überhaupt nicht mehr klar ist. Was sollten konservative Tiefen anderes bringen als ein vorzeitiges Ausschließen von Sichtbarkeit; unabhängig davon, ob es nun Hi-Z/Z-Cull oder Early-Z heißt?eXile hat geschrieben:Dass der konservative depth output nicht die Early-Z-Optimierungen reaktiviert, liegt daran, dass man die Tiefenwerte im Pixelshader beliebig setzen kann, solange man die konservativen Bedingungen (beispielsweise SV_DEPTH_GREATER_EQUAL) einhält; ein Late-Z-Test ist somit immer notwendig, und ein Early-Z-Test könnte im Allgemeinen falsche Ergebnisse liefern.
Die Clip Spaces sehen je nach API zwar leicht unterschiedlich aus, dennoch funktionieren beide analog. Bei OpenGl folgt nach der Projektion eben noch ein typisches Bias der Tiefenwerte von [-1, 1] auf [0, 1]. Tatsächlich erlaubt glDepthRange in der aktuellen OpenGl-API wie es aussieht sogar ein direktes Umkehren des Tiefenpuffers per State, ohne sonstige Eingriffe in den Render-Ablauf.Niki hat geschrieben:Ich benutze zwar Direct3D, aber es sieht wohl so aus, dass ein Vertauschen der Planes in OpenGL nix bringt, da -w < z < +w. Also ist die logarithmische Variante für OpenGL-User wohl die einzige Wahl, sofern man denn eine solche Wahl überhaupt treffen muss.
Ich glaube dann reden wir über unterschiedliche Dinge. So wie ich es verstanden habe, gibt es die ganzen drei Optimierungen (aus erstens Hi-Z/ZCull, zweitens early z-test und drittens late z-test) einmal als Test mit dem bestehenden Depth-Buffer, und einmal die letzten beiden (early z-test und late z-test) als Test mit anderen Fragmente "in flight" eines Pixels, der gerade berechnet wird. Beim ersten (dem Test mit dem Depth-Buffer) gibt es keine Probleme, da stimme ich dir voll und ganz zu. Beim zweiten (Test der in flight fragments) kann es sehr wohl Probleme geben. Wenn wir beispielsweise einen Pixel haben, auf dem zwei Fragmente gerade berechnet werden, und SV_DEPTH_GREATER_EQUAL annehmen, sieht die Situation ungefähr so aus:CodingCat hat geschrieben:Eine Early-Z-Optimierung zusätzlich zum Late-Z-Test würde im Allgemeinen jedenfalls keine Fragmente fälschlicherweise ausschließen.
Ja, diese Probleme habe ich auch. Aber wo deutet die Präsentation derenCodingCat hat geschrieben:Nachtrag 2: Jetzt habe ich auch endlich die entsprechende Quell-Powerpoint-Präsentation gesehen, die dies bestätigt. Mein Hauptproblem mit derlei Präsentationen ist übrigens nicht das Dateiformat, sondern die unglaubliche Streueung derselben sowie die oftmals extrem knappen und nichtssagenden Stichworte, nicht selten ohne jede weitere Erläuterung in den Notizen.
zusammen mit dem echt Bände sprechenden Kommentar „Conservative oDepth not well documented in DX11 API.“DirectX11 Performance Reloaded hat geschrieben:
- DX11 supports conservative depth output
- Allows programmer to specify that depth output will only be GREATEREQUAL or LESSEQUAL than current depth buffer depth
- E.g. geometric decals, depth conversion etc.
- In this case EarlyZ is still disabled
- Because it relies on knowing actual fragment depth
- But Hi-Z/ZCull can be leveraged for early acceptance or rejection
Gibt es denn Anlass zur Vermutung, dass Pixel in-flight gegeneinander getestet werden? Von sowas habe ich bisher nirgends gelesen, habe mich allerdings auch nicht im Detail damit beschäftigt. Bisher ging ich davon aus, dass alle Tiefentests immer "atomar" gegen den bestehenden Z-Buffer stattfänden (atomar in dem Sinne, dass derlei Operationen pro Pixel sequenzialisiert würden).eXile hat geschrieben:So wie ich es verstanden habe, gibt es die ganzen drei Optimierungen (aus erstens Hi-Z/ZCull, zweitens early z-test und drittens late z-test) einmal als Test mit dem bestehenden Depth-Buffer, und einmal die letzten beiden (early z-test und late z-test) als Test mit anderen Fragmente "in flight" eines Pixels, der gerade berechnet wird.
Gegen vorläufige Tiefen in-flight zu testen ist ohne Frage unsinnig. Rein theoretisch weniger unsinnig wäre hingegen, konservative Eingabetiefen auch pixelweise gegen den bestehenden Tiefenpuffer zu testen ...eXile hat geschrieben:Beim ersten (dem Test mit dem Depth-Buffer) gibt es keine Probleme, da stimme ich dir voll und ganz zu. Beim zweiten (Test der in flight fragments) kann es sehr wohl Probleme geben. Wenn wir beispielsweise einen Pixel haben, auf dem zwei Fragmente gerade berechnet werden, und SV_DEPTH_GREATER_EQUAL annehmen, sieht die Situation ungefähr so aus: [...]
... sofern es die Hardware zuließe und dies auch in der Praxis Gewinn brächte. Momentan wird nach Präsentation auf diese Weise nur das grobe Z-Culling vorgeschaltet, mehr findet sich dort dazu auch nicht.eXile hat geschrieben:Ja, diese Probleme habe ich auch. Aber wo deutet die Präsentation derenFaulheitWeglassen von Transistor-verschwendenden Tests an?
Tja, da kann ich auch mit keiner Quelle antworten.CodingCat hat geschrieben:Gibt es denn Anlass zur Vermutung, dass Pixel in-flight gegeneinander getestet werden? Von sowas habe ich bisher nirgends gelesen, habe mich allerdings auch nicht im Detail damit beschäftigt. Bisher ging ich davon aus, dass alle Tiefentests immer "atomar" gegen den bestehenden Z-Buffer stattfänden (atomar in dem Sinne, dass derlei Operationen pro Pixel sequenzialisiert würden).
WAAS? Soweit gehen doch nicht mal die Slides, Hi-Z/Z-Cull ist laut Slides bei konservativem Depth-Output nach wie vor aktiviert. ;) Ganz sicher deaktiviert ist hingegen offensichtlich der pixelweise Early-Z-Test, d.h. Early-Z-Rejection passiert mit konservativem Depth-Output nur grob auf Tile-Basis.eXile hat geschrieben:Moral von der Geschicht: Der Hierarchical-Z-Test ist bei konservativen Depth-Output deaktiviert (sagen die Slides), die Begründungen, warum das so ist, ergeben keinen Sinn, und es sind keine Gründe ersichtlich, warum man ihn nicht aktivieren könnte. ¯\_(ツ)_/¯