PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [OpenGL] NV GeforceFX series - NPOT performance


liquid
2008-08-02, 13:47:36
Hallo!

Um was soll es hier gehen. Zuerst einmal: Es geht darum ein Performanceproblem im D3D Teil von Wine zu lösen.

Die Hardware welche Problem macht: nVidia Geforce FX 5xxx series
Wir haben momentan Berichte mit einer FX 5900 und einer FX 5700, die Treiberversion scheint keinen (großen) Einfluss auf das Problem zu haben.

Gleich an der Stelle ein paar Links zu den Bugreports:
http://bugs.winehq.org/show_bug.cgi?id=14038
http://bugs.winehq.org/show_bug.cgi?id=14724

Der erste Report ist der ursprüngliche, dann fiel mir aber auf dass das Problem anscheinend sehr viel komplexer ist als ursprünglich angemommen. Zudem hängt es sehr von den Wine settings und auch von den Ingame settings ab.

Der Kern des Problems scheint der Support der FX Serie für NPOT (non power of two) Texturen zu sein. Wie im Report beschrieben kündigt der Treiber zwar OpenGL 2.0 Support an, aber er hat die ARB_texture_npot Extension nicht explizit im Extensionstring gelistet. Das einzige was gelistet wird ist die ARB_texture_rectangle Extension, was unter D3D dem conditional NP2 support gleichkommt.

Stefan Dösinger vermutet dass die FX Serie dies deshalb macht, um die Verwendung von unconditional NP2 möglichst zu unterbinden. Anscheinend bekommt man sofort einen software fallback geliefert sobald man unconditional NP2 nutzt, was natürlich Ingame Performance vollkommen zerstört.
Allerdings ist ja ARB_texture_npot in OpenGL 2.0 core, und brauch deshalb auch nicht mehr explizit im ExtString stehen. Wine hält sich seit einigen Versionen an die Versionsnummer welche der Treiber meldet und aktiviert so das unconditional NP2.

Leider finde ich keine Dokumentation die explizit beschreibt welche Art von Performanceproblemen man auf der FX bei Verwendung derartiger Texturen bekommt.

Meine erste Frage hier wäre also:
Hat jemand Erfahrung mit der Entwicklung (in OpenGL) auf der FX Serie und könnte das bestätigen (oder auch widerlegen), dass wir da einen software fallback treffen?

Genauer: Wie gut unterstützt die FX Serie die ARB_texture_npot Extension und wie gut tut sie es für die ARB_texture_rectangle Extension?

Hat die FX vielleicht noch andere Macken die man dort beachten muss?

Wer sich die Bugreports durchliest, der wird feststellen dass ausschließlich die Teile des Spiels (Max Payne 2) betroffen sind, welche Postprocessing Effekte verwenden. Das trifft sowohl auf den Bullettime Modus zu, als auch auf Cutscenes die mit einem MotionBlur-artigen Effekte versehen sind.

Weiterhin treten die meisten Probleme auf sobald wine für das OffscreenRendering FBOs nutzt. Im backbuffer Modus gibts es ähnliche Probleme, dort kommen aber noch zusätzliche andere Bugs hinzu, um die es hier erstmal nicht gehen soll.

Ich sollte betonen dass das Problem anscheinend nicht nur Max Payne 2 betrifft (damit wurde es aber bis zum Umfallen in allen Einzelheiten getestet). Auch Morrowind hat mittlerweile Probleme mit der Performance, ich führe das auf denselben Patch zurück.

Wäre nett wenn sich der ein oder andere erfahrene Programmier das mal ansieht. Danke!

Gruß,
liquid

liquid
2008-08-02, 16:47:37
OK, sry. Ich hätte wohl doch etwas genauer suchen sollen.

Dieser Link hier (http://www.opengl.org/wiki/index.php/NPOT_Textures) beantwortet meine Frage eigentlich schon hinreichend.
Ich wäre aber dennoch an den Antworten der Experten interessiert, zumal es ja immer noch Probleme mit der texture_rectangle Extension gibt.

Gruß,
liquid

Coda
2008-10-18, 11:19:25
Ich glaube das hatten wir hier schon einmal. Die GeForce FX kann in der Tat keine conditional NPOT-Texturen mit Mipmapping in Hardware verwenden. Der Treiber geht also tatsächlich in einen Software-Fallback.