metamodes not available in games or wine full screen aka impossible to do GPU scaling

Hi,

I’m on 390.87 with an ultrawide monitor (3440x1440) with an EDID (in DP) with only one true resolution/timing available:
From the Xorg debug log

[  1357.596] (--) NVIDIA(GPU-0): --- EDID for Acer X34A (DP-0) ---
[  1357.596] (--) NVIDIA(GPU-0): EDID Version                 : 1.4
[  1357.596] (--) NVIDIA(GPU-0): Manufacturer                 : ACR
[  1357.596] (--) NVIDIA(GPU-0): Monitor Name                 : Acer X34A
[  1357.596] (--) NVIDIA(GPU-0): Product ID                   : 0x0450
[  1357.596] (--) NVIDIA(GPU-0): 32-bit Serial Number         : 0xffffffff
[  1357.596] (--) NVIDIA(GPU-0): Serial Number String         : XXXXXXXXXXXXX
[  1357.596] (--) NVIDIA(GPU-0): Manufacture Date             : 2016, week 255
[  1357.596] (--) NVIDIA(GPU-0): DPMS Capabilities            :
[  1357.596] (--) NVIDIA(GPU-0): Input Type                   : Digital
[  1357.596] (--) NVIDIA(GPU-0): Prefer first detailed timing : Yes
[  1357.596] (--) NVIDIA(GPU-0): Supports Continuous Frequency: No
[  1357.596] (--) NVIDIA(GPU-0): EDID 1.4 YCbCr 422 support   : No
[  1357.596] (--) NVIDIA(GPU-0): EDID 1.4 YCbCr 444 support   : No
[  1357.596] (--) NVIDIA(GPU-0): Maximum Image Size           : 800 mm x 340 mm
[  1357.596] (--) NVIDIA(GPU-0): Valid HSync Range            : 73.0 kHz - 151.0 kHz
[  1357.596] (--) NVIDIA(GPU-0): Valid VRefresh Range         : 30.0 Hz - 100.0 Hz
[  1357.596] (--) NVIDIA(GPU-0): EDID maximum pixel clock     : 540.0 MHz
[  1357.596] (--) NVIDIA(GPU-0): G-Sync capable               : Yes
[  1357.596] (--) NVIDIA(GPU-0): G-Sync minimum refresh rate  : 1 Hz
[  1357.596] (--) NVIDIA(GPU-0): CEA-861 extension block #    : 0
[  1357.596] (--) NVIDIA(GPU-0): 
[  1357.596] (--) NVIDIA(GPU-0):  CEA-861 revision            : 3
[  1357.596] (--) NVIDIA(GPU-0): 
[  1357.596] (--) NVIDIA(GPU-0):   IEEE Vendor Registration ID: 00-04-4b
[  1357.596] (--) NVIDIA(GPU-0):   Supports YCbCr 4:4:4       : No
[  1357.596] (--) NVIDIA(GPU-0):   Supports YCbCr 4:2:2       : No
[  1357.596] (--) NVIDIA(GPU-0):   Supports Basic Audio       : Yes
[  1357.596] (--) NVIDIA(GPU-0):   Audio Descriptor           : 0
[  1357.596] (--) NVIDIA(GPU-0):    Audio Format              : PCM
[  1357.596] (--) NVIDIA(GPU-0):    Maximum Channels          : 2
[  1357.596] (--) NVIDIA(GPU-0):    Sample Rates              : 32KHz, 44KHz, 48KHz
[  1357.596] (--) NVIDIA(GPU-0):    Sample Sizes              : 16-bits
[  1357.596] (--) NVIDIA(GPU-0):   Speaker Allocation Data    :
[  1357.596] (--) NVIDIA(GPU-0):    Front Left + Front Right
[  1357.596] (--) NVIDIA(GPU-0): EDID bits per component      : 8
[  1357.596] (--) NVIDIA(GPU-0): 
[  1357.596] (--) NVIDIA(GPU-0): Detailed Timings:
[  1357.596] (--) NVIDIA(GPU-0):   3440 x 1440 @ 60 Hz
[  1357.596] (--) NVIDIA(GPU-0):     Pixel Clock      : 319.75 MHz
[  1357.596] (--) NVIDIA(GPU-0):     HRes, HSyncStart : 3440, 3488
[  1357.596] (--) NVIDIA(GPU-0):     HSyncEnd, HTotal : 3520, 3600
[  1357.596] (--) NVIDIA(GPU-0):     VRes, VSyncStart : 1440, 1443
[  1357.596] (--) NVIDIA(GPU-0):     VSyncEnd, VTotal : 1453, 1481
[  1357.596] (--) NVIDIA(GPU-0):     H/V Polarity     : +/-
[  1357.596] (--) NVIDIA(GPU-0):     Image Size       : 798 mm x 335 mm
[  1357.596] (--) NVIDIA(GPU-0):     RGB 444 bpcs     : 8
[  1357.596] (--) NVIDIA(GPU-0): 
[  1357.596] (--) NVIDIA(GPU-0): Established Timings:
[  1357.596] (--) NVIDIA(GPU-0):   640  x 480  @ 60 Hz
[  1357.596] (--) NVIDIA(GPU-0):   800  x 600  @ 60 Hz
[  1357.596] (--) NVIDIA(GPU-0):   1024 x 768  @ 60 Hz
[  1357.596] (--) NVIDIA(GPU-0): 
[  1357.596] (--) NVIDIA(GPU-0): Extension Block Detailed Timings:
[  1357.596] (--) NVIDIA(GPU-0):   3440 x 1440 @ 50 Hz
[  1357.596] (--) NVIDIA(GPU-0):     Pixel Clock      : 265.25 MHz
[  1357.596] (--) NVIDIA(GPU-0):     HRes, HSyncStart : 3440, 3488
[  1357.596] (--) NVIDIA(GPU-0):     VRes, VSyncStart : 1440, 1443
[  1357.596] (--) NVIDIA(GPU-0):     VSyncEnd, VTotal : 1453, 1474
[  1357.596] (--) NVIDIA(GPU-0):     H/V Polarity     : +/-
[  1357.596] (--) NVIDIA(GPU-0):     Image Size       : 798 mm x 335 mm
[  1357.596] (--) NVIDIA(GPU-0):     RGB 444 bpcs     : 8
[  1357.596] (--) NVIDIA(GPU-0):   3440 x 1440 @ 100 Hz
[  1357.596] (--) NVIDIA(GPU-0):     Pixel Clock      : 531.52 MHz
[  1357.596] (--) NVIDIA(GPU-0):     HRes, HSyncStart : 3440, 3448
[  1357.596] (--) NVIDIA(GPU-0):     HSyncEnd, HTotal : 3480, 3520
[  1357.596] (--) NVIDIA(GPU-0):     VRes, VSyncStart : 1440, 1496
[  1357.596] (--) NVIDIA(GPU-0):     VSyncEnd, VTotal : 1504, 1510
[  1357.596] (--) NVIDIA(GPU-0):     H/V Polarity     : +/-
[  1357.596] (--) NVIDIA(GPU-0):     Image Size       : 798 mm x 335 mm
[  1357.596] (--) NVIDIA(GPU-0):     RGB 444 bpcs     : 8
[  1357.596] (--) NVIDIA(GPU-0):   3440 x 1440 @ 95 Hz
[  1357.596] (--) NVIDIA(GPU-0):     Pixel Clock      : 515.00 MHz
[  1357.596] (--) NVIDIA(GPU-0):     HRes, HSyncStart : 3440, 3488
[  1357.596] (--) NVIDIA(GPU-0):     HSyncEnd, HTotal : 3520, 3600
[  1357.596] (--) NVIDIA(GPU-0):     VRes, VSyncStart : 1440, 1443
[  1357.596] (--) NVIDIA(GPU-0):     VSyncEnd, VTotal : 1453, 1506
[  1357.596] (--) NVIDIA(GPU-0):     H/V Polarity     : +/-
[  1357.596] (--) NVIDIA(GPU-0):     Image Size       : 798 mm x 335 mm
[  1357.596] (--) NVIDIA(GPU-0):     RGB 444 bpcs     : 8
[  1357.596] (--) NVIDIA(GPU-0):   3440 x 1440 @ 90 Hz
[  1357.596] (--) NVIDIA(GPU-0):     Pixel Clock      : 486.75 MHz
[  1357.596] (--) NVIDIA(GPU-0):     HRes, HSyncStart : 3440, 3488
[  1357.596] (--) NVIDIA(GPU-0):     HSyncEnd, HTotal : 3520, 3600
[  1357.596] (--) NVIDIA(GPU-0):     VRes, VSyncStart : 1440, 1443
[  1357.596] (--) NVIDIA(GPU-0):     VSyncEnd, VTotal : 1453, 1503
[  1357.596] (--) NVIDIA(GPU-0):     H/V Polarity     : +/-
[  1357.596] (--) NVIDIA(GPU-0):     Image Size       : 798 mm x 335 mm
[  1357.596] (--) NVIDIA(GPU-0):     RGB 444 bpcs     : 8
[  1357.596] (--) NVIDIA(GPU-0):   3440 x 1440 @ 85 Hz
[  1357.596] (--) NVIDIA(GPU-0):     Pixel Clock      : 458.50 MHz
[  1357.596] (--) NVIDIA(GPU-0):     HRes, HSyncStart : 3440, 3488
[  1357.596] (--) NVIDIA(GPU-0):     HSyncEnd, HTotal : 3520, 3600
[  1357.596] (--) NVIDIA(GPU-0):     VRes, VSyncStart : 1440, 1443
[  1357.596] (--) NVIDIA(GPU-0):     VSyncEnd, VTotal : 1453, 1499
[  1357.596] (--) NVIDIA(GPU-0):     H/V Polarity     : +/-
[  1357.596] (--) NVIDIA(GPU-0):     Image Size       : 798 mm x 335 mm
[  1357.596] (--) NVIDIA(GPU-0):     RGB 444 bpcs     : 8
[  1357.596] (--) NVIDIA(GPU-0):   3440 x 1440 @ 80 Hz
[  1357.596] (--) NVIDIA(GPU-0):     Pixel Clock      : 430.75 MHz
[  1357.596] (--) NVIDIA(GPU-0):     HRes, HSyncStart : 3440, 3488
[  1357.596] (--) NVIDIA(GPU-0):     HSyncEnd, HTotal : 3520, 3600
[  1357.596] (--) NVIDIA(GPU-0):     VRes, VSyncStart : 1440, 1443
[  1357.596] (--) NVIDIA(GPU-0):     VSyncEnd, VTotal : 1453, 1496
[  1357.596] (--) NVIDIA(GPU-0):     H/V Polarity     : +/-
[  1357.596] (--) NVIDIA(GPU-0):     Image Size       : 798 mm x 335 mm
[  1357.596] (--) NVIDIA(GPU-0):     RGB 444 bpcs     : 8
[  1357.596] (--) NVIDIA(GPU-0): 
[  1357.597] (--) NVIDIA(GPU-0): --- End of EDID for Acer X34A (DP-0) ---

I tried (hard) to build an alternative EDID with more resolutions but only got to make work two more (1920x1080 and 1280x720 @60hz activating the TV EDID video modes )
Any attempt to build a custom 2560x1440 has failed and when applied the screen goes black.

I tried custom modelines but They don’t work either (Possibly related with another bug apparently fixed in the upcoming version but the 2560x1440 didn’t work in EDID so i don’t expect to work in modeline either)

So, then I tried to play with the scaling to make the games start in the desired resolution but they only detect the native resolution and not the scaling.
To put an example. If I open HITMAN the only resolution available is 3440x1440 so even if I apply

Option         "metamodes" "nvidia-auto-select +0+0 {viewportin=2560x1440,viewportout=2560x1440+440+0}"

The image is compressed from 3440x1440 and the game doesn’t give me other options to play than 3440x1440

So, my questions:

Is there a way to make the game think i have other resolutions apart from the native?

Is there a way to make a custom 2560x1440 modeline or EDID that works with this monitor (in win obviously i have the options and it works as expected (even considering the EDID doesn’t provide the timings for that resolution) ?

I already tricked some games to think i have this resolutions with the nonworking EDID 2560x1440 resolution and playing in windows or (HITMAN) allows me to select that resolution and it doesn’t try to change the desktop resolution so in that case, with a metamode scaling, i can play.

In wine i can play in virtual screen and it matches the metamode(but it has other problems in this mode) but if i try plain wine and try the non working resolution it changes the desktop res and I get a black screen.

Well, i hope there’s something it can be done cause I’m all about gaming in linux from now on and this is a real gaming blocker in some scenarios.

Edit1: adding other case

I saw other related post (kind of angry user…)
https://devtalk.nvidia.com/default/topic/907961/linux/340-96-gpu-aspect-ratio-scaling-problem/

But it ends more or less in the same scenario.

I wonder if Wouldn’t be possible for the driver to hijack the xrandr resolutions system call and offer the available scaling ? same way to hijack the xrandr call to change resolution and replace it with GPU scaling instead? Like a Forced Full GPU Scaling control of the resolution?

nvidia-bug-report.log.gz (155 KB)

I know that situation, this is especially noticeable with Feral games only offering xrandr 1.2 resolutions though often using scaled resolutions, anyway. Don’t know if someone ever opened an issue report on their github repository.

The only solution that comes to my mind is to enable the intel gpu on your mainboard, connect the monitor to that (if it has a DisplayPort) and then use PRIME to use the Nvidia gpu for rendering. Downside of this is that g-sync doesn’t work.

Feral’s Hitman is scaled and not “true” resolution indeed. I “faked” a 1440p res in a EDID and it works if I scale the desktop as well.
It has to be a way to produce a “native” 1440 custom timing In the edid that works with this display…
Actually. Doing experiments with the EDID I found a timing that shows 2560x1440P but… part of the desktop overlap itself. Nasty stuff. Probably risking the whole display… so not recommending that.

I don’t have any display port in the MB unfortunately . And losing Gsync considering the FPS I’m losing gaming in Linux… I rather keep it.

I’ll try to dig it in the timing thing. I found a functional 1920x1080p not available in the Xrandr 1.2 so… maybe there’s a way.
I’ll write ACER as well in case they provide some help with the custom EDID.

I opened an issue (not sure if in the right place) in Feral’s Github.

Let’s see if they thought about it…