Search code examples
directxnvapi

Nvidia 3D vision on GeForce using DirectX9 and NVAPI calls


I have developed an application using DirectX9 that displays a scene in stereo, using calls to NVAPI, based on pages 14-15 on this PDF:

http://www.nvidia.com/docs/IO/40505/WP-05482-001_v01-final.pdf

My application runs fine on a machine with a Quadro card, but will not work on a machine with a GeForce card. On a machine with GeForce, the emitter light doesn't turn a bright green at all. However, the Nvidia 3D viewer program still works fine on the machine with a GeForce.

Any idea what I could be doing wrong? My understanding was that OpenGL quad-buffered stereo would only work on a Quadro, but that if I used NVAPI with DirectX then it should work on a GeForce as well.

I have also tried doing the blit method (adding in the special stereo header on the last row of the image) according to this document:

http://developer.download.nvidia.com/presentations/2009/GDC/GDC09-3DVision-The_In_and_Out.pdf

but I couldn't get that to work at all, neither on the Quadro nor the GeForce.

Any help greatly appreciated, thanks!


Solution

  • Update: I figured out a solution to this problem, in-case anyone is interested.

    First make sure drivers are up to date.

    Next, get and run the following application

    http://www.geeks3d.com/20100528/manage-your-sli-profiles-with-nvidia-geforce-sli-profile-tool/

    Click the "export" button to create a text file with application "profiles"

    Search for the profile for "Google Earth", and make a copy of it, but change the value for "Executable" to the name of your executable. For example, if your application file was "myapp.exe", it might look like this:

    Profile "My Application"
    ShowOn All
    ProfileType Application
    Executable "myapp.exe"
        Setting ID_0x0092f4de = 0x37605846
        Setting ID_0x1034cb89 = 0x00000000
        Setting ID_0x106d5cff = 0x00000000
        Setting ID_0x10a879cf = 0x00000001
        Setting ID_0x10f9dc81 = 0x00000011
        Setting ID_0x10f9dc84 = 0x00000100
        Setting ID_0x20568533 = 0x00000001
        Setting ID_0x205f7e3b = 0x00000000
        Setting ID_0x701eb457 = 0x2241ab21 InternalSettingFlag=V0
        SettingString ID_0x7049c7ec = "2.0"
        SettingString ID_0x704d456e = "Some objects render at wrong depth"
        SettingString ID_0x7051e5f5 = "2"
        SettingString ID_0x705fafec = "2009-01-01 00:00:00"
        Setting ID_0x708db8c5 = 0x561dde75 InternalSettingFlag=V0
        Setting ID_0x709a1ddf = 0x4b1cd969 InternalSettingFlag=V0
        SettingString ID_0x70b5603f = "D3D"
        Setting ID_0x70edb381 = 0x2420efa8 InternalSettingFlag=V0
        Setting ID_0x80303a19 = 0x00000000
        Setting ID_0x80857a28 = 0x00000000
        Setting ID_0x809d5f60 = 0x00000000
    EndProfile
    

    After adding that profile, save the txt file, then go back to the profile manager, and click import and select the txt file you just saved. Then try opening your app again.

    You may want on the initial export to keep a backup of the original profiles incase you mess things up.

    Also, this will probably have to be done each time you update your drivers (haven't confirmed though, but I imagine the profiles will get overwritten)