When converting a legacy application to Direct3D 9, you must add a call to either IDirect3DDevice9::SetFVF to use the fixed function pipeline, or IDirect3DDevice9::SetVertexDeclaration to use a vertex shader before you make any Draw calls.
Hier geht es zwar grad nur um das Vertexformat, das aber abhängig davon ob Vertexshader oder Fixed Function Pipeline genutzt werden soll unterschiedlich gesetzt wird, was ich so verstehe, dass entweder mit ffp oder vs gerendert werden muss, aber nicht ohne. Ob die Vertices die gerendert werden noch transformiert werden müssen oder nicht ist ja ziemlich egal, das kann ich im Shader beliebig machen.
Weshalb wird hier eigentlich mit DrawPrimitiveUP gerendert? Das scheint ja eher ein Überbleibsel aus DX8 zu sein. Und gerade bei tendenziell eher statischen Dingen wie 2D Elementen bieten sich doch Vertexbuffer an, oder nicht (oder auch dynamische Vertexbuffer)?
Ich habe leider keine AMD Karte um die Probleme die Shadermodel 3 Postprocessing Effekte machen genauer zu Recherchieren, aber meine Vermutung ist das Mischen von FFP und PS3.0, was auf NVIDIA Karten kein Problem ist, auf AMD Karten aber schon. Auf AMD Karten funktioniert lediglich VS3.0 und PS3.0, VS2.0 und PS3.0 und ähnliches dagegen nicht.