I recently had a problem where I simply couldn’t get my NV GPU to supply full range RGB (0-255) over HDMI when the resolution was either 720p or 1080p at 59.94 Hz.
Apparently this has been a known problem for years, and the only reliable solution was to edit your driver .ini files before installation.
After some digging through obscure NV support posts I managed to find the registry keys that control this behaviour, and I implemented a small tool to switch all graphics modes between full range and limited range. It’s not as convenient as a driver level toggle, but it fixed my problem and since NV hasn’t acted on this for years I don’t expect them to do so any time soon.
Here’s the binary: NV_RGBFullRangeToggle
And here’s the source for anyone interested: NV_RGBFullRangeToggle_Source
It’s a very simple program, basically it does this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
private void setFull(RegistryKey key, RegistryKey parent, string name) { try { foreach (string sub in key.GetSubKeyNames()) { setFull(key.OpenSubKey(sub), key, sub); } try { if (key.GetValue("SetDefaultFullRGBRangeOnHDMI") != null || key.GetValue("MonitorCapabilityList") != null) { // reopen for writing key.Dispose(); key = parent.OpenSubKey(name, true); key.SetValue("SetDefaultFullRGBRangeOnHDMI", 1, RegistryValueKind.DWord); report += key.ToString() + "\r\n"; } } catch (System.Security.SecurityException ex) { report += "ERROR: Could not access values on key " + key.ToString() + " (Security Exception)\r\n"; } } catch (System.Security.SecurityException ex) { } key.Dispose(); } |