opengl works but directx hangs with geforce gtx 570

Panda3d is working fine in opengl mode but it’s hanging when I try to run it in directx mode.

However, this is only the case when using my geforce gtx 570 (I have two in SLI but I’ve tested with SLI disabled). When I switch my bios settings so I’m using my integrated graphics (Intel HD 3000) then panda3d directx works fine.

No problems with the geforce with other directx applications, for example I can run ogre in directx just fine.

I’ve tested this with a simple test I wrote but also with the Asteroids sample. Anyway it’s not even returning from ShowBase.init() as you’ll see below.

I’ve tried panda3d 1.7.2, 1.8.0 and also built from the cvs repository within the past week.

I’ve tried a few nvidia driver versions from 275.33 up to 306.22.

I just get the following and then it hangs, no error and no window opens:

E:\Programming\Projects\test\src> ppython main.py
Known pipe types:
  wdxGraphicsPipe9
(all display modules loaded.)

For more detail here’s a debug session with verbose logging turned on. This is with panda3d 1.7.2 on Windows 7:

E:\Programming\Projects\test\src>ppython -m pdb main.py
> e:\programming\projects\test\src\main.py(7)<module>()
-> from direct.showbase.ShowBase import ShowBase
(Pdb) b 31
Breakpoint 1 at e:\programming\projects\test\src\main.py:31
(Pdb) c
> e:\programming\projects\test\src\main.py(31)__init__()
-> ShowBase.__init__(self)
(Pdb) s
--Call--
> e:\programming\panda3d-1.7.2\direct\showbase\showbase.py(57)__init__()
-> def __init__(self, fStartDirect = True, windowType = None):
(Pdb) b 491
Breakpoint 2 at e:\programming\panda3d-1.7.2\direct\showbase\showbase.py:491
(Pdb) c
:pgraph(debug): Constructing 00427834, hidden
:pgraph(debug): Constructing 00427C44, render
:pgraph(debug): Constructing 00427E0C, render2d
:pgraph(debug): Constructing 00428034, aspect2d
:pgraph(debug): Constructing 00428204, a2dBackground
:pgraph(debug): Constructing 00428374, a2dTopCenter
:pgraph(debug): Constructing 004284E4, a2dTopCenterNS
:pgraph(debug): Constructing 0042867C, a2dBottomCenter
:pgraph(debug): Constructing 0042881C, a2dBottomCenterNS
:pgraph(debug): Constructing 004289CC, a2dLeftCenter
:pgraph(debug): Constructing 00428B3C, a2dLeftCenterNS
:pgraph(debug): Constructing 00428D04, a2dRightCenter
:pgraph(debug): Constructing 00428E74, a2dRightCenterNS
:pgraph(debug): Constructing 00428FE4, a2dTopLeft
:pgraph(debug): Constructing 004291CC, a2dTopLeftNS
:pgraph(debug): Constructing 0042933C, a2dTopRight
:pgraph(debug): Constructing 004294AC, a2dTopRightNS
:pgraph(debug): Constructing 0042961C, a2dBottomLeft
:pgraph(debug): Constructing 0042978C, a2dBottomLeftNS
:pgraph(debug): Constructing 004298FC, a2dBottomRight
:pgraph(debug): Constructing 00429A6C, a2dBottomRightNS
:pgraph(debug): Constructing 00429BDC, pixel2d
:pgraph(debug): Constructing 00429D5C, dataRoot
:pgraph(debug): Constructing 00429EBC, dataUnused
:pgraph(debug): Constructing 0042A01C, render2dp
:pgraph(debug): Constructing 0042A17C, aspect2dp
:pgraph(debug): Constructing 0042A2FC, a2dpTopCenter
:pgraph(debug): Constructing 0042A46C, a2dpBottomCenter
:pgraph(debug): Constructing 0042A5DC, a2dpLeftCenter
:pgraph(debug): Constructing 0042A74C, a2dpRightCenter
:pgraph(debug): Constructing 0042A8BC, a2dpTopLeft
:pgraph(debug): Constructing 0042AA2C, a2dpTopRight
:pgraph(debug): Constructing 0042AB9C, a2dpBottomLeft
:pgraph(debug): Constructing 0042AD0C, a2dpBottomRight
:pgraph(debug): Constructing 0042AE7C, pixel2dp
:display: loading display module: libpandadx9.dll
:display(debug): symbol of get_pipe_type_pandadx9 = 06D31120
:display(debug): pipe_type_index = 663
:display(debug): pipe_type = wdxGraphicsPipe9
Known pipe types:
  wdxGraphicsPipe9
(all display modules loaded.)
> e:\programming\panda3d-1.7.2\direct\showbase\showbase.py(491)makeDefaultPipe()

-> self.pipe = selection.makeDefaultPipe()
(Pdb) s
:display:windisplay: OS version: 6.1.2.7601
:display:windisplay:   Service Pack 1
:display:windisplay: max Mhz 3401000000, current Mhz 3401000000
:display:wdxdisplay9: DX 9.0c GetAvailableVidMem (including AGP) returns Total:
4256473088, Free: 4248178688 for device #0
:display:wdxdisplay9: GetAvailableVidMem (no AGP) returns Total: 2646016000, Free: 2637721600 for device #0

(I have two of the special evga edition of the 570 with 2560mb vram each in case you’re wondering about the end of the output)

In opengl the next line executed is line 492 “if not self.pipe:” but in directx it never returns from selection.makeDefaultPipe()

Any insight would be great. Has anyone else run into this issue? Anyone with a geforce 500 series graphics card that can confirm panda3d directx is working for them with the latest nvidia drivers?

The reason I’m trying to use directx is because I’m trying to do something in stereo 3d and unfortunately nvidia expects you to get a workstation graphics card to support 3d vision with opengl (quad buffer support required).