[PATCH xserver] xwayland: Add Xfree86-VidModeExtension to Xwayland
Olivier Fourdan
ofourdan at redhat.com
Thu Oct 29 02:37:56 PDT 2015
Hi Krzysztof,
Quick question, as I haven't heard back from you, do you plan to follow
up on these patches or should I fix them?
Cheers,
Olivier
On 14/10/15 18:24, Olivier Fourdan wrote:
> Hi
>
> ----- Original Message -----
>> More worryingly, I tried xvidtune with that patch applied and that
>> led to a crash in Xwayland - I'll investigate further to see if this
>> is something in my tree or with the patch as I suspect.
>
> Quick follow up, the crash occurs in VidModeGetMonitor() from xf86VidMode.c because the output is NULL:
>
> Program received signal SIGSEGV, Segmentation fault.
> VidModeGetMonitor (scrnIndex=<optimized out>, monitor=monitor at entry=0x7fff4b38a828) at xf86VidMode.c:178
> 178 mon->heightmm = output->mmHeight;
> (gdb) bt
> #0 VidModeGetMonitor (scrnIndex=<optimized out>, monitor=monitor at entry=0x7fff4b38a828) at xf86VidMode.c:178
> #1 0x0000000000427077 in ProcXF86VidModeGetMonitor (client=0x2cfce10) at xf86vmode.c:1080
> #2 0x000000000043b717 in Dispatch () at dispatch.c:430
> #3 0x000000000043f603 in dix_main (argc=10, argv=0x7fff4b38aa38, envp=<optimized out>) at main.c:300
> #4 0x00007fe17c66f580 in __libc_start_main () from /lib64/libc.so.6
> #5 0x0000000000422ad9 in _start ()
> (gdb) p *mon
> $1 = {id = 0x2cdef10 "Wayland", vendor = 0x2cf3e40 "X.org", model = 0x2d218e0 "Xwayland", nHsync = 1, hsync = {{hi = 0,
> lo = 0}, {hi = 0, lo = 0}, {hi = 0, lo = 0}, {hi = 0, lo = 0}, {hi = 0, lo = 0}, {hi = 0, lo = 0}, {hi = 0,
> lo = 0}, {hi = 0, lo = 0}}, nVrefresh = 1, vrefresh = {{hi = 0, lo = 0}, {hi = 0, lo = 0}, {hi = 0, lo = 0}, {
> hi = 0, lo = 0}, {hi = 0, lo = 0}, {hi = 0, lo = 0}, {hi = 0, lo = 0}, {hi = 0, lo = 0}}, Modes = 0x0, Last = 0x0,
> gamma = {red = 0, green = 0, blue = 0}, widthmm = 0, heightmm = 0, options = 0x0, DDC = 0x0, reducedblanking = 0,
> maxPixClock = 0}
> (gdb) p output
> $2 = (RROutputPtr) 0x0
>
> The fix is pretty obvious, and xvidtune will work with this:
>
> Bool
> VidModeGetCurrentModeline(int scrnIndex, void **mode, int *dotClock)
> {
> @@ -188,8 +175,11 @@ VidModeGetMonitor(int scrnIndex, void **monitor)
> mon->nVrefresh = 1;
> mon->Modes = NULL;
> mon->Last = NULL;
> - mon->heightmm = output->mmHeight;
> - mon->widthmm = output->mmWidth;
> + if (output)
> + {
> + mon->heightmm = output->mmHeight;
> + mon->widthmm = output->mmWidth;
> + }
> *monitor = mon;
>
> return TRUE;
>
> (not saying this is the right solution, but that suffice to avoid the crash)
>
> Yet, all reported values reported for HSynv/VSync/pixel clock/etc. are wrong:
>
> Vendor: X.org, Model: Xwayland
> Num hsync: 1, Num vsync: 1
> hsync range 0: 0.00 - 0.00
> vsync range 0: 0.00 - 0.00
>
> So this implementation is really just to please apps that check for the existence of the extension, no more - Any app that would actually try to do something with it would be most likely disappointed :-)
>
> I wonder, can't we reuse more of the xrandr data to get some of these values correct (even if it's just for querying ant not changing/setting values)?
>
> xrandr --verbose gives sensible data on this exact same hardware:
>
> Screen 0: minimum 320 x 200, current 3840 x 1200, maximum 8192 x 8192
> XWAYLAND0 connected 1920x1200+1920+0 (0x24) normal (normal) 520mm x 320mm
> Identifier: 0x21
> Timestamp: 23275741
> Subpixel: unknown
> Gamma: 1.0:1.0:1.0
> Brightness: 0.0
> Clones:
> CRTC: 0
> CRTCs: 0
> Transform: 1.000000 0.000000 0.000000
> 0.000000 1.000000 0.000000
> 0.000000 0.000000 1.000000
> filter:
> 1920x1200 at 0.1Hz (0x24) 0.000MHz -HSync +VSync *current +preferred
> h: width 1920 start 1976 end 2160 total 2400 skew 0 clock 0.00KHz
> v: height 1200 start 1203 end 1209 total 1212 clock 0.00Hz
> XWAYLAND1 connected 1920x1080+0+0 (0x25) normal (normal) 310mm x 170mm
> Identifier: 0x23
> Timestamp: 23275741
> Subpixel: unknown
> Gamma: 1.0:1.0:1.0
> Brightness: 0.0
> Clones:
> CRTC: 1
> CRTCs: 1
> Transform: 1.000000 0.000000 0.000000
> 0.000000 1.000000 0.000000
> 0.000000 0.000000 1.000000
> filter:
> 1920x1080 at 0.1Hz (0x25) 0.000MHz -HSync +VSync *current +preferred
> h: width 1920 start 1976 end 2160 total 2400 skew 0 clock 0.00KHz
> v: height 1080 start 1083 end 1088 total 1091 clock 0.00Hz
>
> So there should be a way to report some of these via Xfree86-VidModeExtension.
>
> Cheers,
> Olivier
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
>
More information about the xorg-devel
mailing list