How to disable "force full gpu scaling" in 304.64?

I have a Zotac Ion board on a computer running Linux ad I had the driver version 295.xx.

I was trying to run a 1080 video on XBMC and, because playback was a bit sluggish, part of my (unsuccessful) attempt at making it run smoothly was to upgrade the Nvidia driver.

The problem is that the computer is connected by HDMI to a Pioneer A/V system - which in turn is connected to the TV (also through HDMI). When I created this set up I didn’t get any image on my tv until I Unchecked “force full gpu scaling” in “Flat Panel Scaling”.

After upgrading the Nvidia driver to 304.64 I lost image on my tv. Upon investigating, I saw on the release changelog:

  • Removed Flat Panel Scaling configurability in nvidia-settings. Any desired scaling can be configured through the new “ViewPortIn” and “ViewPortOut” MetaMode attributes.

I know very little about this, however, I don’t know what the equivalent configuration is. What would the correct configuration be with these new ViewPortIn/Out options to achieve the same result as “unchecking force full gpu scalling”?

Thank you very much for your answer!

What modes are available if you run “xrandr” ? The modes listed by that utility in 304.* and higher are the actual mode timings that the TV reports itself as capable of. You can switch between them with “xrandr --output HDMI-0 --mode [modename] --refresh [refresh rate]” or by using nvidia-settings.

You can also run “sudo xrandr --mode-debug” and restart the X server to get more verbose mode validation logging in /var/log/Xorg.0.log. This will help you determine which mode the X driver is choosing automatically and why. If the default doesn’t light up your TV, then it’s likely that there is a bug in the TV’d EDID that is causing the driver to think the TV prefers a mode that it can’t actually handle.

@aplattner - what shoud I do with the information reported by the xrandr command?

Below [1] are the reported modes with the 295.xx version of the driver.

I don’t know if it’s relevant or not that I have the Pioneer vsx-s300 between the TV and the computer.

So, if I upgrade the driver to 304.xx version of the plugin I will:

  1. Lose image if I turn the computer on with the setup TV-A/V-Computer
  2. Have image if I shutdown, change cable configuration to TV-Computer and boot the computer.

In short, with the Pioneer A/C the Unchecked “force full gpu scaling” in “Flat Panel Scaling” made the configuration work. I didn’t really understand how knowing the information with xrandr would help. Could you further explain it?

Thanks a lot!

[1] Reported modes with 295.xx

xrandr: Failed to get size of gamma for output default
Screen 0: minimum 320 x 175, current 1920 x 1080, maximum 1920 x 1080
default connected 1920x1080+0+0 0mm x 0mm
   1920x1080      50.0     51.0     52.0     53.0     54.0     55.0     56.0     57.0* 
   1680x1050      58.0     59.0  
   1600x1024      60.0  
   1440x900       61.0  
   1400x1050      62.0     63.0     64.0  
   1360x768       65.0     66.0     67.0  
   1280x1024      68.0     69.0     70.0  
   1280x960       71.0     72.0  
   1280x768       73.0  
   1280x720       74.0     75.0     76.0  
   1152x864       77.0     78.0     79.0     80.0     81.0     82.0     83.0  
   1024x768       84.0     85.0     86.0     87.0     88.0     89.0  
   960x720        90.0     91.0  
   960x600        92.0  
   960x540        93.0  
   928x696        94.0     95.0  
   896x672        96.0     97.0  
   840x525        98.0     99.0    100.0    101.0    102.0  
   832x624       103.0  
   800x600       104.0    105.0    106.0    107.0    108.0    109.0    110.0    111.0    112.0    113.0  
   800x512       114.0  
   720x576       115.0    116.0  
   720x480       117.0  
   720x450       118.0  
   720x400       119.0  
   700x525       120.0    121.0    122.0    123.0  
   680x384       124.0    125.0  
   640x512       126.0    127.0    128.0  
   640x480       129.0    130.0    131.0    132.0    133.0    134.0    135.0  
   640x400       136.0  
   640x350       137.0  
   576x432       138.0    139.0    140.0    141.0    142.0    143.0    144.0  
   512x384       145.0    146.0    147.0    148.0    149.0  
   416x312       150.0  
   400x300       151.0    152.0    153.0    154.0    155.0  
   360x200       156.0  
   320x240       157.0    158.0    159.0    160.0  
   320x200       161.0  
   320x175       162.0

With older drivers, the mode reported by xrandr was really just the size of the current metamode. The actual mode timings being sent to the monitor was one of either the “native” or “best fit” timings determined by the driver internally. Checking and unchecking the “force full GPU scaling” checkbox toggled between the native and best-fit timings. You’ll have to check /var/log/Xorg.0.log with the ModeDebug option enabled to see what those timings were and how the driver was choosing them. In your case, it sounds like the “native” timings don’t actually work and make your TV turn off.

Since that was super confusing, newer drivers report the actual mode timings being sent to the monitor through the xrandr command, and you can switch between them with the commands I gave above. If you can figure out what the best-fit timings were with the old driver, you can either change it manually with xrandr or add a MetaModes option to /etc/X11/xorg.conf to make it choose that mode automatically.

Thanks Aaron,

I might have solved it!

A recent automatic update has upgraded Nvidia, so I’m back with no screen.

What I did:

  1. Switched the cable to a direct pc-tv hdmi connection. Restarted and had image. xrandr yields:
Screen 0: minimum 8 x 8, current 1920 x 1080, maximum 8192 x 8192
VGA-0 disconnected (normal left inverted right x axis y axis)
DVI-D-0 disconnected (normal left inverted right x axis y axis)
HDMI-0 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 700mm x 390mm
   1920x1080      59.9*+   60.0     59.9     50.0     30.0     25.0     24.0     30.0     25.0  
   1360x768       59.8  
   1280x1024      60.0  
   1280x720       59.9     59.7     50.0  
   1024x768       75.0     70.1     60.0  
   800x600        75.0     60.3  
   720x576        50.0     25.0  
   720x480        59.9  
   640x480        75.0     60.0     59.9     59.9
  1. Without restarting, I switched the HDMI to the PC - AV receiver - TV. No image.

  2. Restarted with PC - AV receiver - TV. No image. Xrandr yields:

Screen 0: minimum 8 x 8, current 1920 x 1080, maximum 8192 x 8192
VGA-0 disconnected (normal left inverted right x axis y axis)
DVI-D-0 disconnected (normal left inverted right x axis y axis)
HDMI-0 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 1000mm x 550mm
   1920x1080      59.9*+   60.0     59.9     50.0     30.0     25.0     24.0     30.0     25.0  
   1360x768       59.8  
   1280x1024      60.0  
   1280x720       59.9     59.7     50.0  
   1024x768       75.0     70.1     60.0  
   800x600        75.0     60.3  
   720x576        50.0     25.0  
   720x480        59.9  
   640x480        75.0     60.0     59.9     59.9

I changed modes with xrandr to --output HDMI-0 --mode 1920x1080 --refresh 60.0. Presto, image!

So apparently the A/V receiver doesn’t like the 59.9 Hz mode. After saving the configuration to xorg.conf (via running nvidia-settings as sudo and saving it there) the image survived a restart.

I’ll keep you posted if I run into more issues.

On a side note, xrandr 1.3.5 doesn’t seem to have --mode-debug.

Cheers

Edit: not so lucky after all. The image is lost when I toggle the HDMI input on the AV receiver. I.e.:

  1. xrandr --output HDMI-0 --mode 1920x1080 --refresh 60.0. Presto, image!
  2. Change the HDMI input on the receiver to another device (playstation, set top box) on the remote controler
  3. Change back to the PC HDMI input. No image. I have to re-run the xrandr command in 1) to have image again . Below is the xrandr output immediately after changing back to the PC-hdmi input on the a/v remote control, then changing the mode and finally running xrandr again to check the modes. Only difference seems to be on the HDMI-0 line.
miguel@servidor:~$ xrandr --current
Screen 0: minimum 8 x 8, current 1920 x 1080, maximum 8192 x 8192
VGA-0 disconnected (normal left inverted right x axis y axis)
DVI-D-0 disconnected (normal left inverted right x axis y axis)
HDMI-0 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 700mm x 390mm
   1920x1080      59.9*+   60.0     59.9     50.0     30.0     25.0     24.0     30.0     25.0  
   1360x768       59.8  
   1280x1024      60.0  
   1280x720       59.9     59.7     50.0  
   1024x768       75.0     70.1     60.0  
   800x600        75.0     60.3  
   720x576        50.0     25.0  
   720x480        59.9  
   640x480        75.0     60.0     59.9     59.9  
miguel@servidor:~$ xrandr --output HDMI-0 --mode 1920x1080 --refresh 60
miguel@servidor:~$ xrandr --current
Screen 0: minimum 8 x 8, current 1920 x 1080, maximum 8192 x 8192
VGA-0 disconnected (normal left inverted right x axis y axis)
DVI-D-0 disconnected (normal left inverted right x axis y axis)
HDMI-0 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 518mm x 324mm
   1920x1080      59.9 +   60.0*    59.9     50.0     30.0     25.0     24.0     30.0     25.0  
   1360x768       59.8  
   1280x1024      60.0  
   1280x720       59.9     59.7     50.0  
   1024x768       75.0     70.1     60.0  
   800x600        75.0     60.3  
   720x576        50.0     25.0  
   720x480        59.9  
   640x480        75.0     60.0     59.9     59.9

Do you have any idea how to solve this? Having to log into a shell to run the xrand command everytime I change the input on the a/v receiver is not really an option!
Thanks

You should be able to configure a MetaMode to make the X driver prefer the 60 Hz mode at startup:

Option "MetaModes" "HDMI-0: 1920x1080_60"

Thanks for the help, I really appreciate it!

I’ve tried that metamode and it didn’t work. I tried a 50 hz mode and I got the following results:

  1. I get image when I restart the computer, and the following line in xrandr
1920x1080      59.9 +   60.0     59.9     50.0*    30.0     25.0     24.0     30.0     25.0
  1. If I toggle input in my A/C to another input (e.g. playstation) and then back to the pc input, image doesn’t appear. xrandr line changes to:
1920x1080      59.9*+   60.0     59.9     50.0     30.0     25.0     24.0     30.0     25.0

Naturally I regain image if I manually run the xrandr command from a remote shell.

So it seems that the frequency is changing by the simple fact of toggling the hdmi input on the a/v receiver. Do you know why and how to prevent this? Could it be that the 59.9Hz is a valid mode for the receiver but not for the tv? It would explain why the mode appears (it’s the receiver that is connected to the pc), but it doesn’t explain why it changes without me telling to.

Below is my current xorg.conf file, if it helps.
Thanks a lot!

Section "ServerLayout"
    Identifier     "Layout0"
    Screen      0  "Screen0" 0 0
    InputDevice    "Keyboard0" "CoreKeyboard"
    InputDevice    "Mouse0" "CorePointer"
    Option         "Xinerama" "0"
EndSection

Section "InputDevice"
    Identifier     "Keyboard0"
    Driver         "kbd"
EndSection

Section "InputDevice"
    Identifier     "Mouse0"
    Driver         "mouse"
    Option         "Protocol" "auto"
    Option         "Device" "/dev/psaux"
    Option         "Emulate3Buttons" "no"
    Option         "ZAxisMapping" "4 5"
        # generated from default
EndSection

Section "Monitor"
    Identifier     "Monitor0"
    VendorName     "Unknown"
    ModelName      "Pioneer Electronic Corporation VSX-S300"
    HorizSync       31.0 - 84.0
    VertRefresh     57.0 - 75.0
    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "ION"
EndSection
Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "FlatPanelProperties" "Scaling = Native"
    Option         "NoLogo" "True"
    Option         "Stereo" "0"
    Option         "nvidiaXineramaInfoOrder" "DFP-1"
    Option         "metamodes" "1920x1080_50 +0+0"
#    Option         "metamodes" "HDMI-0: 1920x1080_60"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

It’s likely that you have some sort of daemon process running that is responding to hotplug events by changing to what it think the mode should be. Typically it’s gnome-settings-daemon, but something else might be the culprit too.

You can try to work around the problem by disabling hotplug events:

Option "<a target='_blank' rel='noopener noreferrer' href='"http://http.download.nvidia.com/XFree86/Linux-x86/313.18/README/xconfigoptions.html#UseHotplugEvents"'>UseHotplugEvents</a>" "off"

This will stop the driver from sending events when the connected state of a monitor changes, though you’ll still get events when an X client (such as the “xrandr” command-line tool) queries the status of an output and it notices that it has changed.

[Edit: Syntax highlighting makes it hard to tell that UseHotplugEvents above is a link to the README]

I tried the UseHotplugEvents “off” without success. First I added it to the Screen section (restarted, same behaviour as described in the last post). Then I also added it to the Device section (below line 37 of the previous xorg.conf post), same result.

Bottom line: when I toggle hdmi input I still get 59.9 Hz when I activate the PC HDMI. What else can I try to fix this? It’s the only thing keeping me from a fully functional 304.x driver.

Cheers

We ended up solving this over IRC.

Here are the main ideas:

  • Pioneer A/V receiver seems to be copying the EDID from the tv it’s connected to, just changing the device name
  • The receiver probably doesn’t handle the 59.9 Hz frequency
  • xorg.conf was stripped down to [1] to force the Pioneer A/V receiver not to use that frequency (which is being marked as the preferred one by the EDID)
  • gnome-settings-daemon was kicking in every time the HDMI input was toggled on the receiver, and setting the resolution to the preferred 59.9 when the receiver’s input was set back to the pc. This had to be changed with:
gsettings set org.gnome.settings-daemon.plugins.xrandr active false

[1]

Section "Monitor"
    Identifier     "Pioneer"
    ModeLine       "working" 148.50  1920 2008 2052 2200  1080 1084 1089 1125  +HSync +Vsync
EndSection
 
Section "Device"
    Identifier     "nvidia"
    Driver         "nvidia"
    Option         "ModeDebug"
    Option         "ModeValidation" "NoEDIDModes,NoXServerModes,NoPredefinedModes,NoVESAModes,AllowNonEDIDModes"
    Option         "NoLogo"
    Option         "MetaModes" "working"
EndSection
 
Section "Screen"
    Identifier     "nvidia"
    Device         "nvidia"
    Monitor        "Pioneer"
EndSection