Monday, January 4, 2010

Force your nVidia card to send digital (DVI-D) output to your Viewsonic monitors

I have two Viewsonic monitors -- a VP2030b and VP2000s -- and an nVidia Geforce 7600 graphics card.  The Geforce graphics card has dual DVI outputs so that you can drive two monitors with it. Each video output can either generate DVI-D (a digital signal) or DVI-A (an analog signal).  The digital is much sharper, but unfortunately, there's no obvious way to force the nVidia drivers into digital mode.  By default, the card tries to auto-detect, and often gets it wrong, driving my digital monitors with analog signals (and driving me crazy).  For years. I'd dread rebooting my computer, wondering if it would come back up with dual-digital or not.

I tried to solve this problem on and off for more than a year; many people seem to experience the same thing when attaching an nVidia card to a Viewsonic monitor.  Finally, I found a solution buried in this thread -- one of many discussing the problem.  All the information is there, but it's a little hard to understand, so I thought I'd blog a set of step-by-step instructions.

There's a secret registry entry that will tell your nVidia card to go into digital mode, so if you're willing to fire up regedit, here's how to fix it.  Note this only works with nVidia drivers!
  • Start regedit.  (You need administrator access under Windows 7.)
  • Navigate to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video
  • Under Video you'll see a number of sub-folders with long names like {B1E0FF3B-2B31-4B0D-8B9C-B09BBB60CB07}.  Each of those has a sub-folder called 0000.  Most of the 0000 folders will be nearly empty, but one of the 0000 folders contains hundreds of entries that have names of programs in them (e.g. _3DMark05.exe, playNow.exe, etc.).  Find that one.
  • In the 0000 folder you found in the previous step, right-click, and from the context menu, select New, then Binary Value.
  • When the new key is created, change its name to DevicesConnected
  • Right-click on the new key and click Modify...
  • A dialog box will pop up that says "0000" -- it's waiting for you to type data.
  • Type "00 00 03 00", then click OK.  According to the posters in that thread, you can actually type 4 different values depending on your monitor configuration:
    • 2x digital monitors -> "00 00 03 00" (0x30000)
    • 2x analog monitors -> "03 00 00 00" (0x3)
    • digital/analog -> "02 00 01 00" (0x10002)
    •  analog/digital -> "01 00 02 00" (0x20001)
  • Click OK, exit RegEdit and reboot.
This worked for me; my monitors now reliably go into digital mode on each reboot.  In fact -- even better -- I can now safely put my Viewsonic monitors into "autodetect input" mode.  They go into analog mode during boot, allowing me to see the BIOS boot screen, then change to digital automatically once Windows gets to the point in the boot process where it starts the video drivers.