PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : OpenGL-Anwendung und SLI


Asmodeus
2005-03-16, 12:40:41
Auf der GDC hielt Nvidia auch einen Vortrag zum Thema OpenGL und SLI mit einigen Richtlinien, die beim Einsatz von OpenGL und SLI zu beachten sind.

Link zum PDF (http://download.nvidia.com/developer/presentations/2005/GDC/OpenGL_Day/OpenGL_SLI.pdf)

Unter anderem wird dort auf folgendes hingewiesen:


Request pixel format with
PFD_SWAP_EXCHANGE
– tells driver that app doesn’t need the back buffer contents after SwapBuffers()


Beim normalen PixelFormatDescriptor funktioniert das auch wunderbar. Wenn ich aber einen ARB-PixelFormatDescriptor erzeugen will (wird ja für AA benötigt) dann findet er keinen. Und so "exotisch" sind meine PixelFormat Anforderungen nun sicher nicht:


int iAttributes[] =
{
WGL_DRAW_TO_WINDOW_ARB,GL_TRUE,
WGL_SUPPORT_OPENGL_ARB,GL_TRUE,
WGL_DOUBLE_BUFFER_ARB,GL_TRUE,
WGL_SAMPLE_BUFFERS_ARB,GL_TRUE,
WGL_SWAP_EXCHANGE_ARB,GL_TRUE,
WGL_ACCELERATION_ARB,WGL_FULL_ACCELERATION_ARB,
WGL_COLOR_BITS_ARB,24,
WGL_ALPHA_BITS_ARB,8,
WGL_DEPTH_BITS_ARB,24,
WGL_STENCIL_BITS_ARB,0,
WGL_ACCUM_BITS_ARB,0,
WGL_SAMPLES_ARB,4,
0,0
};


Jemand eine Idee, wie man das Problem umgehen könnte. Oder gibts ne andere Möglichkeit, oder hab ich vielleicht auch nur etwas übersehen?

Gruss, Carsten.

zeckensack
2005-03-16, 12:52:52
Mach mal 8 Stencil-Bits (oder lass das Attribut komplett weg).

Edit:
Du hast nicht zufällig im Treiber das AA komplett abgeschaltet (!=applikationsgesteuert)?

Asmodeus
2005-03-16, 13:01:48
Mach mal 8 Stencil-Bits (oder lass das Attribut komplett weg).

Edit:
Du hast nicht zufällig im Treiber das AA komplett abgeschaltet (!=applikationsgesteuert)?

Die Sache mit den Stencil-Bits hat leider nix gebracht.
Ich hab im Treiber AA natürlich auf "Anwendungsgesteuert" stehen. :wink:
Es liegt wirklich nur an der Zeile:

WGL_SWAP_EXCHANGE_ARB,GL_TRUE,

Erst, als ich diese Zeile inzugefügt habe, gab es kein passendes Pixelformat mehr.

Gruss, Carsten.

zeckensack
2005-03-16, 13:08:18
Die Sache mit den Stencil-Bits hat leider nix gebracht.
Ich hab im Treiber AA natürlich auf "Anwendungsgesteuert" stehen. :wink:
Es liegt wirklich nur an der Zeile:

WGL_SWAP_EXCHANGE_ARB,GL_TRUE,

Erst, als ich diese Zeile inzugefügt habe, gab es kein passendes Pixelformat mehr.

Gruss, Carsten.Die Zeile ist ja auch falsch, sehe ich gerade :redface:
Korrekt:WGL_SWAP_METHOD_ARB,WGL_SWAP_EXCHANGE_ARB,

Asmodeus
2005-03-16, 13:17:38
Die Zeile ist ja auch falsch, sehe ich gerade :redface:
Korrekt:WGL_SWAP_METHOD_ARB,WGL_SWAP_EXCHANGE_ARB,

*Grrr* Hast natürlich recht, beim normalen PFD heisst es zwar einfach nur "PFD_SWAP_EXCHANGE" aber beim ARB_PFD ist "WGL_SWAP_EXCHANGE_ARB" ja nur der Wert von "WGL_SWAP_METHOD_ARB". :rolleyes:

Naja, danke, das wir mal drüber geredet haben. :wink:

Gruss, Carsten.

Xmas
2005-03-16, 23:36:34
Unter anderem wird dort auf folgendes hingewiesen:

Request pixel format with
PFD_SWAP_EXCHANGE
– tells driver that app doesn’t need the back buffer contents after SwapBuffers()

:confused:
Die Aussage ist schlicht falsch. (EDIT: Obwohl sie dann im AFR-Kontext wieder Sinn macht. Und ja, streng genommen ist es dann nicht der Backbuffer-Content. Aber der Frontbuffer-Content.)
PFD_SWAP_EXCHANGE
Specifies the content of the back buffer in the double-buffered main color plane following a buffer swap. Swapping the color buffers causes the exchange of the back buffer's content with the front buffer's content. Following the swap, the back buffer's content contains the front buffer's content before the swap. PFD_SWAP_EXCHANGE is a hint only and might not be provided by a driver.

Tatsächlich sollte man eher GL_SWAP_UNDEFINED_ARB mit der ARB_PDF-Extension verwenden.

WGL_SWAP_METHOD_ARB
If the pixel format supports a back buffer, then this indicates
how they are swapped. If this attribute is set to
WGL_SWAP_EXCHANGE_ARB then swapping exchanges the front and back
buffer contents; if it is set to WGL_SWAP_COPY_ARB then swapping
copies the back buffer contents to the front buffer; if it is
set to WGL_SWAP_UNDEFINED_ARB then the back buffer contents are
copied to the front buffer but the back buffer contents are
undefined after the operation.

Asmodeus
2005-03-17, 10:23:17
Naja, ich werd die Sache so bald wie möglich mal mit den unterschiedlichen SWAP Methoden testen, wenn wir endlich unser SLI System bekommen. Standardmäßig wird die Anwendung immer versuchen, den AFR Modus zu setzen. Und vielleicht muss aber bei einem Wechsel zum SFR Modus auch die SWAP Methode geändert werden. Aber grundsätzlich klingt die Definition hinter WGL_SWAP_UNDEFINED_ARB besser geeignet für das, was Nvidia in dem Paper mit WGL_SWAP_EXCHANGE_ARB eigentlich erreichen will.

Gruss, Carsten.

Asmodeus
2005-03-31, 08:29:48
Ich hatte nun etwas Zeit mit unserem SLI-System und meiner OpenGL Anwendung herumzuexperimentieren. Leider ohne die gewünschten Ergebnisse.
Das Hauptproblem ist, sobald ich SLI in meiner Anwendung aktiviere, habe ich keine "saubere" Fullscreendarstellung mehr.

Der Ablauf ist folgender:

Der Desktop ist auf 1920 x 1200 eingestellt:
Die Anwendung initialisiert sich Fullscreen mit einer Auflösung von 1024 x 768.
Dabei wird der Bildschirm komplett ausgefüllt, und die Auflösung beträgt auch wirklich 1024 x 768.
Jetzt aktiviere ich den SLI-Modus mit folgenden Befehlen:

NvCplSetDataInt(NVCPL_API_SLI_MULTI_GPU_RENDERING_MODE,(NVCPL_API_SLI_ENABLED | NVCPL_API_SLI_RENDERING_MODE_AFR)

oder

NvCplSetDataInt(NVCPL_API_SLI_MULTI_GPU_RENDERING_MODE,(NVCPL_API_SLI_ENABLED | NVCPL_API_SLI_RENDERING_MODE_SFR)


Dadurch wechselt die Auflösung wieder auf 1920 x 1200, im Hintergrund ist wieder der Desktop zu sehen und ich habe links oben mein Anwendungsfenster mit 1024 x 768, aber ohne einen Fensterrahmen. Und ohne irgend eine SLI-Beschleunigung. Auch eine Load-Balancing Anzeige wurde dabei noch nie eingeblendet, obwohl im Treiber aktiviert. Also gehe ich davon aus, dass es irgendwie nicht richtig funktioniert.

Hat jemand eine Idee, woran es liegen könnte?

Gruss, Carsten.

Asmodeus
2005-03-31, 16:52:36
Ok, entweder mache ich etwas vollkommen falsch, oder von Nvidia Seite läuft irgend etwas nicht ganz richtig beim Thema SLI und OpenGL.

Zuerst mal folgender Ausschnitt aus der Nvidia SLI-FAQ:


Will my game or application just run on NVIDIA's SLI technology?

Yes.
Developers are not required to make changes to make their application work on NVIDIA's SLI solution. In fact, developers are not even required to make changes to enable the speed-boost available on a multi-GPU system.

What do I, as a developer, have to do to accelerate my application on a multi-GPU system?

Nothing:
NVIDIA's SLI technology accelerates applications automatically. The same guidelines as for maximizing performance on single-GPU systems apply. The NVIDIA GPU Programming Guide (available on developer.nvidia.com) discusses these guidelines; it also includes a chapter to specifically discuss multi-GPU considerations.

What are the major Do's and Don'ts for maximizing performance on a multi-GPU system?

The same guidelines as for maximizing performance on single-GPU systems apply. The NVIDIA GPU Programming Guide (available on developer.nvidia.com) discusses these guidelines; it also includes a chapter to specifically discuss multi-GPU considerations.

Does NVIDIA's SLI solution work under OpenGL?

Yes.
SLI supports up to OpenGL 1.5 and all future releases.


Also, ich habe mir ein kleines Programm geschrieben, um die verschiedenen SLI Varianten mit OpenGL Programmen auszuprobieren. Zum Testen habe ich neben meiner eigenen Anwendung noch eine Teapot-Demo von Nvidia genommen Link (http://download.developer.nvidia.com/developer/SDK/Individual_Samples/DEMOS/OpenGL/simple_soft_shadows.zip) . Beim Herumprobieren kam ich dann zu folgenden tollen Ergebnissen:

Modus: SLI_AFR:

Demo von Nvidia hängt sich beim Initialisieren auf, BlueScreen nach einiger Zeit

Modus: SLI_SFR:

Antialiasing deaktiviert: Demo von Nvidia läuft ohne Probleme
Antialiasing aktiviert: Demo von Nvidia läuft eine Weile, nach Maximierung des Fensters friert der Rechner ein, vom OpenGL Fensterinhalt sind nur noch Artefakte zu sehen.

Das gleiche Verhalten zeigt sich auch bei meiner eigenen Anwendung im Fullscreenmodus.

Was läuft da nun so gegen den Baum, dass die Sache sogar in einem Bluescreen enden kann?

Nebenbei habe ich noch festgestellt, dass Nvidia in seinem OpenGL-SLI Paper von der GDC zwar den PFD_SWAP_EXCHANGE oder WGL_SWAP_EXCHANGE_ARB Pixelformatparameter fordert, es bei der Quadro FX 4400 beim Treiber 71.84 aber überhaupt kein gültiges Pixelformat mit diesem Parameter gibt (ganz toll).

Gruss, Carsten.

Asmodeus
2005-04-01, 13:49:42
Ich habe jetzt mal Doom 3 installiert und damit etwas herumgetestet. Es stellte sich heraus, dass Doom 3 in der Kombination mit SLI durch 2x FX 4000 überhaupt nicht von SLI profitiert, es ist mit 2 Karten im SLI-Betrieb genauso schnell wie mit einer Karte. Nun ist Doom 3 ja aber nachweisbar ein Spiel, dass vom Treiber her SLI unterstützt und auf SLI Systemen mit 2x Geforce Karten davon auch spürbar profitiert. Könnte es also sein, dass im Zusammenhang mit zwei FX 4400 Karten der OpenGL SLI Part des Treibers irgendwie gar nicht funktioniert? Falls noch nicht erwähnt, DirectX Anwendungen, z.B. 3DMark2005 laufen auch auf den FX 4400 Karten wunderbar mit SLI Beschleunigung, nur unter OpenGL tut sich irgendwie nichts oder produziert Abstürze. Aber andererseits kann ich mir nicht vorstellen, dass gerade Karten, die für die professionelle Nutzung mit OpenGL ausgelegt sind, dann ein solches Manko aufweisen? :confused:

Gruss, Carsten.

micki
2005-04-01, 14:20:41
also ich würde vermuten das windowed anwendungen erstmal nicht laufen, man muss versuchen sie fullscreen zu haben, denn AFAIK ist die sli verbindung zwischen zwei grakas dafür da, dass der framebuffer zum DAC durchgeschleift wird, das heißt wiederrum, dass die eine graka eigentlich nicht weiß was die andere darstellt, deswegen müßte dann entweder dein desktop SLI fähig sein, dein desktop die ganze zeit flackern oder der treiber deaktiviert das.

versuch einfach mal fullscreen... bin mir da zwar nicht sicher, aber wäre meine vermutung.

(oder hab ich mich verlesen oder du dich vertippt dass du 1920*1200 fährst aber sli mit 1024*768 versuchst?)

MfG
micki

Asmodeus
2005-04-01, 14:37:34
also ich würde vermuten das windowed anwendungen erstmal nicht laufen, man muss versuchen sie fullscreen zu haben, denn AFAIK ist die sli verbindung zwischen zwei grakas dafür da, dass der framebuffer zum DAC durchgeschleift wird, das heißt wiederrum, dass die eine graka eigentlich nicht weiß was die andere darstellt, deswegen müßte dann entweder dein desktop SLI fähig sein, dein desktop die ganze zeit flackern oder der treiber deaktiviert das.

versuch einfach mal fullscreen... bin mir da zwar nicht sicher, aber wäre meine vermutung.

(oder hab ich mich verlesen oder du dich vertippt dass du 1920*1200 fährst aber sli mit 1024*768 versuchst?)

MfG
micki

Im Grunde habe ich alles probiert. Einige DirectX Demos von Nvidia laufen mit SLI, egal ob AFR oder SFR im Fenstermodus und auch im Fullscreenmodus ohne Probleme. Dabei wird das Load-Balancing im SFR Modus sowohl im Fullscreenmodus als auch im Fenstermodus angezeigt. Und treiberseitig SLI-unterstützte DirectX Sachen wie 3DMark2005 laufen sowieso ohne Probleme. Bei OpenGL habe ich auch alles ausprobiert, Nvidia-Demos, eigene Applikation, Doom 3, alles im Fenstermodus, sowie im Fullscreenmodus. Dabei reichten die Ergebnisse, wie schon berichtet von keinem SLI Effekt bis hin zu reproduzierbaren Blue Screens durch die Aktivierung von SLI.

Oder meinst Du, um SLI nutzen zu können muss die Auflösung des Desktop und die Auflösung der Fullscreenanwendung gleich sein? Und was meinst Du genau, mit Flackern des Desktops? Wenn ich einen SLI-Modus aktiviere, dann wird der gesamte Monitorbild kurz komplett schwarz und dann wird mir der bestimmte SLI Modus als aktiviert angezeigt.

Gruss, Carsten.

Asmodeus
2005-04-01, 14:47:51
Ok, hat sich zum Glück erledigt, oder eher gesagt verschoben, ein Anruf von Nvidia hat das "merkwürdige" Verhalten aufgeklärt.

Gruss, Carsten.