diff options
28 files changed, 1150 insertions, 320 deletions
diff --git a/xserver/ChangeLog b/xserver/ChangeLog index ecf0d41b5..cf67c422e 100644 --- a/xserver/ChangeLog +++ b/xserver/ChangeLog @@ -1,3 +1,547 @@ +commit 937391523eef6459d1f8b1ae25fe7e1f77b8a12a +Author: Kevin Brace <kevinbrace@gmx.com> +Date: Sat Mar 2 14:13:20 2019 -0800 + + xserver 1.19.7 + + Signed-off-by: Kevin Brace <kevinbrace@gmx.com> + +commit a93f8f74b54accfb94a8c56357e566db76c24b22 +Author: Kevin Brace <kevinbrace@gmx.com> +Date: Sat Mar 2 14:10:41 2019 -0800 + + Update configure.ac bug URL for gitlab migration + + It is based on Alan Coopersmith's commit for various fd.o projects. + + Signed-off-by: Kevin Brace <kevinbrace@gmx.com> + +commit af63efe470417cde8a64068b1e6965b2677d92d9 +Author: Kevin Brace <kevinbrace@gmx.com> +Date: Thu Dec 13 22:32:27 2018 -0600 + + Add 24-bit color support to exaGetPixmapFirstPixel + + It appears that people who developed EXA forgot that there used to be + graphics devices that used 24-bits (3 bytes) instead of 32-bits (4 bytes) + in order to display one pixel. The lack of 24-bit color support inside + exaGetPixmapFirstPixel causes SiS 6326 to crash when running Xfce since + SiS 6326 does not support 32-bit color. + + Signed-off-by: Kevin Brace <kevinbrace@gmx.com> + +commit 56547b196660e246e37132960723819972b99c8c +Author: Mario Kleiner <mario.kleiner.de@gmail.com> +Date: Mon Feb 5 11:20:41 2018 +0100 + + glx: Only assign 8 bpc fbconfigs for composite visuals. + + Commit 91c42093b248 ("glx: Duplicate relevant fbconfigs for + compositing visuals") adds many new depth 32 fbconfigs as + composite visuals. On a X-Screen running at depth 24, this + also adds bgra 10-10-10-2 fbconigs, as they also have + config.rgbBits == 32, but these are not displayable on a + depth 24 screen, leading to visually corrupted desktops + under some compositors, e.g., fdo bug 104597 "Compton + weird colors" when running compton with + "compton --backend glx". + + Be more conservative for now and only select fbconfigs with + 8 bpc red, green, blue components for composite visuals. + + Fixes: 91c42093b248 ("glx: Duplicate relevant fbconfigs for + compositing visuals") + Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104597 + Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com> + Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com> + Reviewed-by: Adam Jackson <ajax@redhat.com> + (cherry picked from commit bebcc8477c8070ade9dd4be7299c718baeab3d7a) + +commit e96bd477395af3c2c3157ebda0f55ea4b672a114 +Author: Lyude Paul <lyude@redhat.com> +Date: Tue Feb 6 12:41:47 2018 -0500 + + xwayland: Don't process cursor warping without an xwl_seat + + Unfortunately, on my machine Xwayland immediately crashes when I try to + start it. gdb backtrace: + + #0 0x00007ffff74f0e79 in wl_proxy_marshal () from target:/lib64/libwayland-client.so.0 + #1 0x0000000000413172 in zwp_confined_pointer_v1_destroy (zwp_confined_pointer_v1=0x700000000) + at hw/xwayland/Xwayland@exe/pointer-constraints-unstable-v1-client-protocol.h:612 + #2 0x0000000000418bc0 in xwl_seat_destroy_confined_pointer (xwl_seat=0x8ba2a0) + at /home/lyudess/Projects/xserver/hw/xwayland/xwayland-input.c:2839 + #3 0x0000000000418c09 in xwl_seat_unconfine_pointer (xwl_seat=0x8ba2a0) + at /home/lyudess/Projects/xserver/hw/xwayland/xwayland-input.c:2849 + #4 0x0000000000410d97 in xwl_cursor_confined_to (device=0xa5a000, screen=0x8b9d80, window=0x9bdb70) + at /home/lyudess/Projects/xserver/hw/xwayland/xwayland.c:328 + #5 0x00000000004a8571 in ConfineCursorToWindow (pDev=0xa5a000, pWin=0x9bdb70, generateEvents=1, + confineToScreen=0) at /home/lyudess/Projects/xserver/dix/events.c:900 + #6 0x00000000004a94b7 in ScreenRestructured (pScreen=0x8b9d80) + at /home/lyudess/Projects/xserver/dix/events.c:1387 + #7 0x0000000000502386 in RRScreenSizeNotify (pScreen=0x8b9d80) + at /home/lyudess/Projects/xserver/randr/rrscreen.c:160 + #8 0x000000000041a83c in update_screen_size (xwl_output=0x8e7670, width=3840, height=2160) + at /home/lyudess/Projects/xserver/hw/xwayland/xwayland-output.c:203 + #9 0x000000000041a9f0 in apply_output_change (xwl_output=0x8e7670) + at /home/lyudess/Projects/xserver/hw/xwayland/xwayland-output.c:252 + #10 0x000000000041aaeb in xdg_output_handle_done (data=0x8e7670, xdg_output=0x8e7580) + at /home/lyudess/Projects/xserver/hw/xwayland/xwayland-output.c:307 + #11 0x00007ffff50e9d1e in ffi_call_unix64 () at ../src/x86/unix64.S:76 + #12 0x00007ffff50e968f in ffi_call (cif=<optimized out>, fn=<optimized out>, rvalue=<optimized out>, + avalue=<optimized out>) at ../src/x86/ffi64.c:525 + #13 0x00007ffff74f3d8b in wl_closure_invoke () from target:/lib64/libwayland-client.so.0 + #14 0x00007ffff74f0928 in dispatch_event.isra () from target:/lib64/libwayland-client.so.0 + #15 0x00007ffff74f1be4 in wl_display_dispatch_queue_pending () from target:/lib64/libwayland-client.so.0 + #16 0x00007ffff74f200b in wl_display_roundtrip_queue () from target:/lib64/libwayland-client.so.0 + #17 0x0000000000418cad in InitInput (argc=12, argv=0x7fffffffd9c8) + at /home/lyudess/Projects/xserver/hw/xwayland/xwayland-input.c:2867 + #18 0x00000000004a20e3 in dix_main (argc=12, argv=0x7fffffffd9c8, envp=0x7fffffffda30) + at /home/lyudess/Projects/xserver/dix/main.c:250 + #19 0x0000000000420cb2 in main (argc=12, argv=0x7fffffffd9c8, envp=0x7fffffffda30) + at /home/lyudess/Projects/xserver/dix/stubmain.c:34 + + This appears to be the result of xwl_cursor_confined_to() and + xwl_screen_get_default_seat(). While not against protocol, mutter ends + up sending xdg_output before wl_seat. xwl_screen_get_default_seat() + makes the naïve assumption that we always have a valid seat, we end up + returning a pointer to the empty list itself instead of an actual seat + and causing ourselves to segfault. + + So, actually return NULL in xwl_screen_get_default_seat() if the seat + list is empty, and skip any pointer confinement processing in + xwl_cursor_confined_to() when we don't have a seat setup yet. + + Signed-off-by: Lyude Paul <lyude@redhat.com> + Reviewed-by: Adam Jackson <ajax@redhat.com> + (cherry picked from commit 98edb9a35e2cdd61355656b82975d7f2b6a9f0e6) + +commit 61d3f56877b23241757490efcdb759b905caca1d +Author: Alex Goins <agoins@nvidia.com> +Date: Mon Jan 8 18:44:25 2018 -0800 + + randr: Fix rotation check in ProcRRSetScreenSize() + + ProcRRSetScreenSize() does bounds checking to ensure that none of the CRTCs have + a viewport that extends beyond the new screen size. In doing so, it accounts for + if the CRTC is rotated 90 or 270 degrees, swapping width and height. + + However, it does so by testing if crtc->rotation is equal to RR_Rotate_90 or + RR_Rotate_270. crtc->rotation is a bit mask, and it includes reflection as well + as rotation. If a CRTC is reflected as well as rotated, it will incorrectly fail + this test, resulting in incorrect dimensions being used to verify the validity + of the new screen size. In some cases, this can cause valid uses of + ProcRRSetScreenSize() to fail with BadMatch. + + This patch fixes the issue by testing that the bits RR_Rotate_90 or + RR_Rotate_270 are set, rather than testing for equality. + + Signed-off-by: Alex Goins <agoins@nvidia.com> + Reviewed-by: Michel Dänzer <michel.daenzer@amd.com> + (cherry picked from commit 6b26a7bda9efa93440734ede0382a3e9a6761365) + +commit cb908a7840487e4b81aa16c5b3a4b609ff1153fc +Author: Jeff Smith <whydoubt@gmail.com> +Date: Fri Jan 26 06:25:22 2018 -0600 + + glamor: tidy up some gradient color formulas + + - Avoid some needlessly complex equations for calculating the color at a + point in a gradient field. + - Avoid calculating certain values multiple times. + - Use similar variable names across the two versions of the get_color + function where practical. + + Signed-off-by: Jeff Smith <whydoubt@gmail.com> + Reviewed-by: Adam Jackson <ajax@redhat.com> + (cherry picked from commit ff410c56bfd6dcdf5d252ef0ba3f4c6fde91774b) + +commit b41bb8147e706cb8e615842e08a548b7e8afd279 +Author: Jeff Smith <whydoubt@gmail.com> +Date: Fri Jan 26 06:25:21 2018 -0600 + + glamor: remove unused variables in linear gradient shader + + Signed-off-by: Jeff Smith <whydoubt@gmail.com> + Reviewed-by: Adam Jackson <ajax@redhat.com> + (cherry picked from commit 3bd17dff1ac5a4685a5da92a9982f621effee658) + +commit c715645c14ec00cd49e6bb86340351fa97ab6ea0 +Author: Jeff Smith <whydoubt@gmail.com> +Date: Fri Jan 26 06:25:20 2018 -0600 + + glamor: fix no-reflect case for gradients + + When compositing a no-reflect gradient, 'before' the gradient is empty, + but 'after' the gradient is padded with the final color. Both sides are + supposed to be empty. + + This is fixed by moving the virtual stops to match the first and last + client-supplied stops for no-reflect gradients, then causing everything + 'before' the initial virtual stop and 'after' the final virtual stop to + emit rgba(0,0,0,0). This does not impact gradients using the other + reflect modes. + + Signed-off-by: Jeff Smith <whydoubt@gmail.com> + Reviewed-by: Adam Jackson <ajax@redhat.com> + (cherry picked from commit 5815c7b5951fd46d69e5c40144b64e516c7afdbf) + +commit 38e6fb757386e2cb2c51a27e52346473d4ffb9a1 +Author: Jeff Smith <whydoubt@gmail.com> +Date: Fri Jan 26 06:25:19 2018 -0600 + + glamor: fix repeat-reflect case in linear gradient shader + + If _pt_distance is negative, it causes the final distance to be negative + in the repeat-reflect case. Moving the scaling by _pt_distance earlier + avoids this problem, and simplifies some equations as a bonus. + + Bugzilla: https://bugs.freedesktop.org/98508 + Signed-off-by: Jeff Smith <whydoubt@gmail.com> + Reviewed-by: Adam Jackson <ajax@redhat.com> + (cherry picked from commit 3e377e238f7257fd01e56a4a25dfd77e033673e4) + +commit f6cd99ed79c17e3aa04b8821d10ca95939bd8675 +Author: Olivier Fourdan <ofourdan@redhat.com> +Date: Wed Jan 24 17:45:37 2018 +0100 + + xwayland: remove dirty window unconditionally on unrealize + + This is a rare occurrence of a crash in Xwayland for which I don't have + the reproducing steps, just a core file. + + The backtrace looks as follow: + + #0 raise () from /usr/lib64/libc.so.6 + #1 abort () from /usr/lib64/libc.so.6 + #2 OsAbort () at utils.c:1361 + #3 AbortServer () at log.c:877 + #4 FatalError () at log.c:1015 + #5 OsSigHandler () at osinit.c:154 + #6 <signal handler called> + #7 xwl_glamor_pixmap_get_wl_buffer () at xwayland-glamor.c:162 + #8 xwl_screen_post_damage () at xwayland.c:514 + #9 block_handler () at xwayland.c:665 + #10 BlockHandler () at dixutils.c:388 + #11 WaitForSomething () at WaitFor.c:219 + #12 Dispatch () at dispatch.c:422 + #13 dix_main () at main.c:287 + + The crash is caused by dereferencing “xwl_pixmap->buffer” in + xwl_glamor_pixmap_get_wl_buffer() because “xwl_pixmap” is NULL. + + Reason for this is because the corresponding pixmap is from the root + window and xwayland is rootless by default. + + This can happen if the window was mapped, redirected, damaged and + unredirected immediately, before the damage is processed by Xwayland. + + Make sure to remove the dirty window from the damage list on unrealize + to prevent this from happening. + + Credit goes to Adam Jackson <ajax@nwnk.net> and Daniel Stone + <daniel@fooishbar.org> for finding the root cause the issue. + + Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> + Reviewed-by: Daniel Stone <daniels@collabora.com> + (cherry picked from commit 3362422e8413dd9f231cfac50ce0a0862525b1bf) + +commit 9cd243f75dc52e1c649178963ab22583db52cd54 +Author: Michal Srb <msrb@suse.com> +Date: Mon Nov 27 09:59:01 2017 +0100 + + os/inputthread: Force unlock when stopping thread. + + The inputthread is kept locked all the time while X server's VT is not active. + If the X server is terminated while not active, it will be stuck forever in + InputThreadFini waiting for the thread to join, but it wouldn't because it is + locked. + + Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=103782 + Signed-off-by: Michal Srb <msrb@suse.com> + Reviewed-by: Adam Jackson <ajax@redhat.com> + (cherry picked from commit 71348e99a8e6a95542e483b93839168ca8f51f81) + +commit 5c456b6e2a9a579e67ba577f9147642406f2ce99 +Author: Peter Harris <pharris@opentext.com> +Date: Thu Dec 14 12:21:19 2017 -0500 + + composite: Propagate damagedDescendants when reparented + + If a window that is fully covered by an automatic-redirected descendant + (even implicitly, eg. via BackingStores) is reparented, the automatic + updates could be broken if the new parent is not marked as having + damaged descendants. + + Fix this issue by propagating the damagedDescendants flag whenever a + window is reparented. + + Reviewed-by: Adam Jackson <ajax@redhat.com> + Signed-off-by: Peter Harris <pharris@opentext.com> + (cherry picked from commit d5c23b29487d5ff440abf5ed0beb22c00f21e387) + +commit df319f889ddc952dd065bbb3252d045b90baaf8e +Author: Michel Dänzer <michel.daenzer@amd.com> +Date: Wed Jan 24 12:28:38 2018 +0100 + + xf86XvMCScreenInit: Clear pScreenPriv->dixinfo when freeing pAdapt + + Fixes double-free later in xf86XvMCCloseScreen, which would generally + cause fireworks. + + Reviewed-by: Adam Jackson <ajax@redhat.com> + Signed-off-by: Michel Dänzer <michel.daenzer@amd.com> + (cherry picked from commit 75408f53d4e203e462b2f13ea4b06264f0e59ad2) + +commit d0d1a694f967af770fba0d36043fd5218ff20984 +Author: Michel Dänzer <michel.daenzer@amd.com> +Date: Wed Jan 24 11:40:50 2018 +0100 + + Revert "present: Only send PresentCompleteNotify events to the presenting client" + + This reverts commit 5c00e693631475679c1c2504e03177652ec7de28. + + It broke the Gallium nine state tracker, which makes PresentPixmap + requests on one display connection and processes the corresponding + events on another one. + + The issue that motivated this change is prevented on the client side by + https://cgit.freedesktop.org/mesa/mesa/commit/?id=7b0e8264dd21ae05521d08d41fecd84139401fef + + Bugzilla: https://bugs.freedesktop.org/104678 + (cherry picked from commit 76732f498f1e73fb081841a04faf068660f3d5c7) + +commit 8be1dbeacf5f29c0b538414e87d47c9d5af08d9d +Author: Martin Wilck <mwilck@suse.com> +Date: Tue Jan 9 20:33:09 2018 +0100 + + xfree86: add default modes for 16:9 and 16:10 + + Improve the user experience for users with wide screens by adding standard + 16:9 and 16:10 modes to extramodes, as suggested previously + (https://lists.x.org/archives/xorg-devel/2016-February/048866.html). + Tested successfully on my laptop. Feedback welcome. + + See also https://bugs.freedesktop.org/show_bug.cgi?id=37858. + + Signed-off-by: Martin Wilck <mwilck@suse.com> + Reviewed-by: Adam Jackson <ajax@redhat.com> + (cherry picked from commit a5e9bcad7ad0887f804905b482894b85751519fb) + +commit 71269c6e57cec82bbf81b1c99c8019098303d6a3 +Author: Adam Jackson <ajax@redhat.com> +Date: Wed Dec 13 14:53:56 2017 -0500 + + os: Fix a type error in the IPv6 XDMCP code + + Building with strict-aliasing rightly chirps here: + + ../os/xdmcp.c: In function ‘XdmcpRegisterConnection’: + ../os/xdmcp.c:489:31: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] + &((struct sockaddr_in6 *) &address)->sin6_addr.s6_addr[12]; + ^~~~~~~~~~~~ + + We have "const char *address", so &address here is a char ** (i.e., it + points to the slot on the stack containing the pointer to the character + array passed in as an argument). Casting that to a struct sockaddr_in6 * + is wrong, because it means that area of the stack will be reinterpreted + as a struct sockaddr_in6. + + Instead, cast address, not &address. + + Signed-off-by: Adam Jackson <ajax@redhat.com> + (cherry picked from commit 652913cd9474946bcb29271602bacfd98f46ad0b) + +commit 8f11ab2b475623d5c00e146a7d6108f356a16b52 +Author: Helmut Grohne <helmut@subdivi.de> +Date: Thu Dec 21 11:48:15 2017 +0100 + + build: guess availability of monotonic clock for cross compilation + + When cross compiling, the value of MONOTONIC_CLOCK would be "cross + compiling", because AC_RUN_IFELSE doesn't work. However when enabling + wayland, a monotonic clock is required and configure aborts. + + We change detection of CLOCK_MONOTONIC to degrade it gracefully from a + run check to a declaration check in case of cross compilation based on + the assumption that most systems will have a monotonic clock and those + that don't won't be able to run Xwayland anyway. The trade-off + essentially is either "always fail cross compilation" or "produce an + unusable Xwayland for unusual platform" and this commit switches to the + latter. + + Signed-off-by: Helmut Grohne <helmut@subdivi.de> + Bug-Debian: https://bugs.debian.org/882531 + Reviewed-by: Adam Jackson <ajax@redhat.com> + (cherry picked from commit c601c8faf54ff9e3bcbc653421828d71042deef7) + +commit 7cec7fb7bc34ea857e2d40ad32ead8a328dbe1a1 +Author: Peter Hutterer <peter.hutterer@who-t.net> +Date: Fri Jan 5 11:58:42 2018 +1000 + + config: fix NULL value detection for ID_INPUT being unset + + Erroneous condition caused us to keep going with all devices that didn't have + ID_INPUT set. + + Fixes: 5aad81445c8c3d6 + Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104382 + Reviewed-by: Adam Jackson <ajax@redhat.com> + Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> + (cherry picked from commit a309323328d9d6e0bf5d9ea1d75920e53b9beef3) + +commit 16896d05a6a2a91fd53cf6af56ce5e79f6abb500 +Author: Corentin Rossignon <corentin.rossignon@gmail.com> +Date: Thu Jan 4 08:34:01 2018 +0100 + + glamor: Specify GLSL version for xv shader + + SAMPLE is a GLSL keyword in newer OpenGL version. + This fix issue with gnome-shell and playing video using xv + + Signed-off-by: Corentin Rossignon <corentin.rossignon@gmail.com> + Bugzilla: https://bugs.freedesktop.org/104405 + Reviewed-by: Adam Jackson <ajax@redhat.com> + (cherry picked from commit dbfbe58b94ec07a45fd6170f96bffec55051724e) + +commit 5e83ebd76738455c443a66024b0b5eb92930b36c +Author: Adam Jackson <ajax@redhat.com> +Date: Tue Jan 9 10:54:05 2018 -0500 + + animcur: Fix transitions between animated cursors + + We weren't cancelling the old timer when changing cursors, making things + go all crashy. Logically we could always cancel the timer first, but + then we'd have to call TimerSet to re-arm ourselves, and GetTimeInMillis + is potentially expensive. + + Reported-by: https://devtalk.nvidia.com/default/topic/1028172/linux/titan-v-ubuntu-16-04lts-and-387-34-driver-crashes-badly/post/5230967/#5230967 + Signed-off-by: Adam Jackson <ajax@redhat.com> + Reviewed-by: Aaron Plattner <aplattner@nvidia.com> + Tested-by: Aaron Plattner <aplattner@nvidia.com> + (cherry picked from commit de60245e05c0d2528d4ff42557a044387e53315c) + +commit 693f0e21d55d6e9fe792d91e76e4168aa813db71 +Author: Adam Jackson <ajax@redhat.com> +Date: Thu Oct 26 15:24:39 2017 -0400 + + animcur: Run the timer from the device, not the screen + + This is very slightly more efficient since the callback now doesn't need + to walk every input device, instead we know exactly which device's + cursor is being updated. AnimCurTimerNotify() gets outdented nicely as a + result. A more important side effect is that we can stop using the + TimerAbsolute mode and just pass in the relative delay. + + In AnimCurSetCursorPosition, we no longer need to rearm the timer with + the new screen; it is enough to update the device's state. In + AnimCurDisplayCursor we need to notice when we're switching from + animated cursor to regular and cancel the existing timer. + + Reviewed-by: Robert Morell <rmorell@nvidia.com> + Tested-by: Robert Morell <rmorell@nvidia.com> + Signed-off-by: Adam Jackson <ajax@redhat.com> + (cherry picked from commit 094a63d56fbfb9e23210cc9ac538fb198af37cee) + +commit 354c48304d27f75b7c33c03a0adb050c37788ccf +Author: Adam Jackson <ajax@redhat.com> +Date: Thu Oct 26 13:53:06 2017 -0400 + + animcur: Return the next interval directly from the timer callback + + If the return value is non-zero here, DoTimer() will automatically rearm + the timer for the new (relative) delay. 'soonest' is in absolute time, + so subtract off 'now' and return that. + + Reviewed-by: Robert Morell <rmorell@nvidia.com> + Tested-by: Robert Morell <rmorell@nvidia.com> + Signed-off-by: Adam Jackson <ajax@redhat.com> + (cherry picked from commit cc3241a712684f8c7147f5688e9ee3ecb5a93b87) + +commit 26841b2c9ea03fda8b2d0da254e0344fd2a3afce +Author: Adam Jackson <ajax@redhat.com> +Date: Thu Oct 26 13:40:57 2017 -0400 + + animcur: Use fixed-size screen private + + Reviewed-by: Robert Morell <rmorell@nvidia.com> + Tested-by: Robert Morell <rmorell@nvidia.com> + Signed-off-by: Adam Jackson <ajax@redhat.com> + (cherry picked from commit 3abbdb7318018584a27220737bd92081ce8ee67c) + +commit 725b4b46ff59a8db84d8c12fec02c6b1d94b27ce +Author: Lukáš Krejčí <lskrejci@gmail.com> +Date: Sat Dec 30 23:46:45 2017 +0100 + + Xorg.wrap: Ensure correct ordering of post-install hook + + The install rule of Xorg.wrap is currently a dependency of the + install-data target instead of the install-exec target. The build also + uses install-exec-hook to change the ownership and set the SUID bit on + the Xorg.wrap binary. The problem is that install-exec-hook is only + ordered respective to the install-exec target, the rules of install-data + may or may not have been executed. + + If install-exec-hook runs before the Xorg.wrap binary is in place, + a message similar to the following will be present in the build log: + + chown: cannot access '/pkgdir/usr/lib/xorg-server/Xorg.wrap': No such file or directory + make[6]: [Makefile:1151: install-exec-hook] Error 1 (ignored) + + All that needs to be done is to change the name of the program variable + to contain 'exec' for the install rule to depend on the install-exec + target. + + Excerpt from the Automake manual, chapter 12.2 The Two Parts of Install: + "Any variable using a user-defined directory prefix with ‘exec’ in the + name (e.g., myexecbin_PROGRAMS) is installed by install-exec. All other + user-defined prefixes are installed by install-data." + + https://bugs.freedesktop.org/show_bug.cgi?id=104419 + + Signed-off-by: Lukáš Krejčí <lskrejci@gmail.com> + Acked-by: Hans de Goede <hdegoede@redhat.com> + Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> + Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> + (cherry picked from commit f615cb62d47cb24ea31718e8226df53ce6651c91) + +commit 16fd18479d2f617adf0e6de922586441be3808eb +Author: Olivier Fourdan <ofourdan@redhat.com> +Date: Fri Dec 15 16:43:47 2017 +0100 + + xwayland: avoid race condition on new keymap + + When the Wayland compositor notifies of a new keymap, for the first X11 + client using the keyboard, the last slave keyboard used might still not + be set (i.e. “lastSlave” is still NULL). + + As a result, the new keymap is not applied, and the first X11 window + will have the wrong keymap set initially. + + Apply the new keymap to the master keyboard as long as there's one. + + Bugzilla: https://bugzilla.gnome.org/show_bug.cgi?id=791383 + Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> + Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> + Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> + (cherry picked from commit 170c95978530f6373bdf4488116902b273f3abf4) + +commit a13271f2feb6e480b2e698d4efa3b94150a6808b +Author: Tapani Pälli <tapani.palli@intel.com> +Date: Tue Nov 28 09:23:29 2017 +0200 + + glx: do not pick sRGB config for 32-bit RGBA visual + + This fixes blending issues seen with kwin and gnome-shell when + 32bit visual has sRGB capability set. + + Reviewed-by: Adam Jackson <ajax@redhat.com> + Signed-off-by: Tapani Pälli <tapani.palli@intel.com> + Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=103699 + Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=103646 + Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=103655 + (cherry picked from commit c2954b16c8730c7ed8441fd8dba25900f3aed265) + commit ebfb06b11955a6c32500b7086be912ab96b753a7 Author: Adam Jackson <ajax@redhat.com> Date: Wed Dec 20 14:23:57 2017 -0500 diff --git a/xserver/Makefile.in b/xserver/Makefile.in index e7149d1c8..905de3c8e 100644 --- a/xserver/Makefile.in +++ b/xserver/Makefile.in @@ -55,7 +55,7 @@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/xorg-server.pc.in \ $(srcdir)/xserver.ent.in $(top_srcdir)/configure COPYING \ ChangeLog INSTALL config.guess config.sub depcomp install-sh \ - ltmain.sh missing ylwrap + ltmain.sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_define_dir.m4 \ $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \ diff --git a/xserver/aclocal.m4 b/xserver/aclocal.m4 index b32dc640a..ed42cb62c 100644 --- a/xserver/aclocal.m4 +++ b/xserver/aclocal.m4 @@ -19,32 +19,63 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- -# serial 1 (pkg-config-0.24) -# -# Copyright © 2004 Scott James Remnant <scott@netsplit.com>. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# PKG_PROG_PKG_CONFIG([MIN-VERSION]) -# ---------------------------------- +dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +dnl serial 11 (pkg-config-0.29.1) +dnl +dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>. +dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com> +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program; if not, write to the Free Software +dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +dnl 02111-1307, USA. +dnl +dnl As a special exception to the GNU General Public License, if you +dnl distribute this file as part of a program that contains a +dnl configuration script generated by Autoconf, you may include it under +dnl the same distribution terms that you use for the rest of that +dnl program. + +dnl PKG_PREREQ(MIN-VERSION) +dnl ----------------------- +dnl Since: 0.29 +dnl +dnl Verify that the version of the pkg-config macros are at least +dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's +dnl installed version of pkg-config, this checks the developer's version +dnl of pkg.m4 when generating configure. +dnl +dnl To ensure that this macro is defined, also add: +dnl m4_ifndef([PKG_PREREQ], +dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) +dnl +dnl See the "Since" comment for each macro you use to see what version +dnl of the macros you require. +m4_defun([PKG_PREREQ], +[m4_define([PKG_MACROS_VERSION], [0.29.1]) +m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, + [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) +])dnl PKG_PREREQ + +dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) +dnl ---------------------------------- +dnl Since: 0.16 +dnl +dnl Search for the pkg-config tool and set the PKG_CONFIG variable to +dnl first found in the path. Checks that the version of pkg-config found +dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is +dnl used since that's the first version where most current features of +dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) @@ -66,18 +97,19 @@ if test -n "$PKG_CONFIG"; then PKG_CONFIG="" fi fi[]dnl -])# PKG_PROG_PKG_CONFIG +])dnl PKG_PROG_PKG_CONFIG -# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -# -# Check to see whether a particular set of modules exists. Similar -# to PKG_CHECK_MODULES(), but does not set variables or print errors. -# -# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) -# only at the first occurence in configure.ac, so if the first place -# it's called might be skipped (such as if it is within an "if", you -# have to call PKG_CHECK_EXISTS manually -# -------------------------------------------------------------- +dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------------------------------- +dnl Since: 0.18 +dnl +dnl Check to see whether a particular set of modules exists. Similar to +dnl PKG_CHECK_MODULES(), but does not set variables or print errors. +dnl +dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +dnl only at the first occurence in configure.ac, so if the first place +dnl it's called might be skipped (such as if it is within an "if", you +dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ @@ -87,8 +119,10 @@ m4_ifvaln([$3], [else $3])dnl fi]) -# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) -# --------------------------------------------- +dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +dnl --------------------------------------------- +dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting +dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" @@ -100,10 +134,11 @@ m4_define([_PKG_CONFIG], else pkg_failed=untried fi[]dnl -])# _PKG_CONFIG +])dnl _PKG_CONFIG -# _PKG_SHORT_ERRORS_SUPPORTED -# ----------------------------- +dnl _PKG_SHORT_ERRORS_SUPPORTED +dnl --------------------------- +dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then @@ -111,19 +146,17 @@ if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then else _pkg_short_errors_supported=no fi[]dnl -])# _PKG_SHORT_ERRORS_SUPPORTED +])dnl _PKG_SHORT_ERRORS_SUPPORTED -# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], -# [ACTION-IF-NOT-FOUND]) -# -# -# Note that if there is a possibility the first call to -# PKG_CHECK_MODULES might not happen, you should be sure to include an -# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac -# -# -# -------------------------------------------------------------- +dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl -------------------------------------------------------------- +dnl Since: 0.4.0 +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES might not happen, you should be sure to include an +dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl @@ -177,16 +210,40 @@ else AC_MSG_RESULT([yes]) $3 fi[]dnl -])# PKG_CHECK_MODULES +])dnl PKG_CHECK_MODULES -# PKG_INSTALLDIR(DIRECTORY) -# ------------------------- -# Substitutes the variable pkgconfigdir as the location where a module -# should install pkg-config .pc files. By default the directory is -# $libdir/pkgconfig, but the default can be changed by passing -# DIRECTORY. The user can override through the --with-pkgconfigdir -# parameter. +dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl --------------------------------------------------------------------- +dnl Since: 0.29 +dnl +dnl Checks for existence of MODULES and gathers its build flags with +dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags +dnl and VARIABLE-PREFIX_LIBS from --libs. +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to +dnl include an explicit call to PKG_PROG_PKG_CONFIG in your +dnl configure.ac. +AC_DEFUN([PKG_CHECK_MODULES_STATIC], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +_save_PKG_CONFIG=$PKG_CONFIG +PKG_CONFIG="$PKG_CONFIG --static" +PKG_CHECK_MODULES($@) +PKG_CONFIG=$_save_PKG_CONFIG[]dnl +])dnl PKG_CHECK_MODULES_STATIC + + +dnl PKG_INSTALLDIR([DIRECTORY]) +dnl ------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable pkgconfigdir as the location where a module +dnl should install pkg-config .pc files. By default the directory is +dnl $libdir/pkgconfig, but the default can be changed by passing +dnl DIRECTORY. The user can override through the --with-pkgconfigdir +dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], @@ -197,16 +254,18 @@ AC_ARG_WITH([pkgconfigdir], AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) -]) dnl PKG_INSTALLDIR +])dnl PKG_INSTALLDIR -# PKG_NOARCH_INSTALLDIR(DIRECTORY) -# ------------------------- -# Substitutes the variable noarch_pkgconfigdir as the location where a -# module should install arch-independent pkg-config .pc files. By -# default the directory is $datadir/pkgconfig, but the default can be -# changed by passing DIRECTORY. The user can override through the -# --with-noarch-pkgconfigdir parameter. +dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) +dnl -------------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable noarch_pkgconfigdir as the location where a +dnl module should install arch-independent pkg-config .pc files. By +dnl default the directory is $datadir/pkgconfig, but the default can be +dnl changed by passing DIRECTORY. The user can override through the +dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], @@ -217,7 +276,24 @@ AC_ARG_WITH([noarch-pkgconfigdir], AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) -]) dnl PKG_NOARCH_INSTALLDIR +])dnl PKG_NOARCH_INSTALLDIR + + +dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, +dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------- +dnl Since: 0.28 +dnl +dnl Retrieves the value of the pkg-config variable for the given module. +AC_DEFUN([PKG_CHECK_VAR], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl + +_PKG_CONFIG([$1], [variable="][$3]["], [$2]) +AS_VAR_COPY([$1], [pkg_cv_][$1]) + +AS_VAR_IF([$1], [""], [$5], [$4])dnl +])dnl PKG_CHECK_VAR # Copyright (C) 2002-2012 Free Software Foundation, Inc. # @@ -1659,7 +1735,7 @@ AC_DEFUN([XORG_FONTDIR],[XORG_FONTSUBDIR([FONTDIR], [fontdir], [$1])]) dnl xorg-macros.m4. Generated from xorg-macros.m4.in xorgversion.m4 by configure. dnl -dnl Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. +dnl Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. dnl dnl Permission is hereby granted, free of charge, to any person obtaining a dnl copy of this software and associated documentation files (the "Software"), @@ -1696,7 +1772,7 @@ dnl DEALINGS IN THE SOFTWARE. # See the "minimum version" comment for each macro you use to see what # version you require. m4_defun([XORG_MACROS_VERSION],[ -m4_define([vers_have], [1.19.0]) +m4_define([vers_have], [1.19.2]) m4_define([maj_have], m4_substr(vers_have, 0, m4_index(vers_have, [.]))) m4_define([maj_needed], m4_substr([$1], 0, m4_index([$1], [.]))) m4_if(m4_cmp(maj_have, maj_needed), 0,, @@ -1774,6 +1850,17 @@ AC_DEFUN([XORG_MANPAGE_SECTIONS],[ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_PROG_SED]) +case $host_os in + solaris*) + # Solaris 2.0 - 11.3 use SysV man page section numbers, so we + # check for a man page file found in later versions that use + # traditional section numbers instead + AC_CHECK_FILE([/usr/share/man/man7/attributes.7], + [SYSV_MAN_SECTIONS=false], [SYSV_MAN_SECTIONS=true]) + ;; + *) SYSV_MAN_SECTIONS=false ;; +esac + if test x$APP_MAN_SUFFIX = x ; then APP_MAN_SUFFIX=1 fi @@ -1789,9 +1876,9 @@ if test x$LIB_MAN_DIR = x ; then fi if test x$FILE_MAN_SUFFIX = x ; then - case $host_os in - solaris*) FILE_MAN_SUFFIX=4 ;; - *) FILE_MAN_SUFFIX=5 ;; + case $SYSV_MAN_SECTIONS in + true) FILE_MAN_SUFFIX=4 ;; + *) FILE_MAN_SUFFIX=5 ;; esac fi if test x$FILE_MAN_DIR = x ; then @@ -1799,9 +1886,9 @@ if test x$FILE_MAN_DIR = x ; then fi if test x$MISC_MAN_SUFFIX = x ; then - case $host_os in - solaris*) MISC_MAN_SUFFIX=5 ;; - *) MISC_MAN_SUFFIX=7 ;; + case $SYSV_MAN_SECTIONS in + true) MISC_MAN_SUFFIX=5 ;; + *) MISC_MAN_SUFFIX=7 ;; esac fi if test x$MISC_MAN_DIR = x ; then @@ -1809,9 +1896,9 @@ if test x$MISC_MAN_DIR = x ; then fi if test x$DRIVER_MAN_SUFFIX = x ; then - case $host_os in - solaris*) DRIVER_MAN_SUFFIX=7 ;; - *) DRIVER_MAN_SUFFIX=4 ;; + case $SYSV_MAN_SECTIONS in + true) DRIVER_MAN_SUFFIX=7 ;; + *) DRIVER_MAN_SUFFIX=4 ;; esac fi if test x$DRIVER_MAN_DIR = x ; then @@ -1819,9 +1906,9 @@ if test x$DRIVER_MAN_DIR = x ; then fi if test x$ADMIN_MAN_SUFFIX = x ; then - case $host_os in - solaris*) ADMIN_MAN_SUFFIX=1m ;; - *) ADMIN_MAN_SUFFIX=8 ;; + case $SYSV_MAN_SECTIONS in + true) ADMIN_MAN_SUFFIX=1m ;; + *) ADMIN_MAN_SUFFIX=8 ;; esac fi if test x$ADMIN_MAN_DIR = x ; then @@ -2082,13 +2169,24 @@ m4_ifval([$1], fi]) # Test for the ability of xmlto to generate a text target +# +# NOTE: xmlto 0.0.27 or higher return a non-zero return code in the +# following test for empty XML docbook files. +# For compatibility reasons use the following empty XML docbook file and if +# it fails try it again with a non-empty XML file. have_xmlto_text=no cat > conftest.xml << "EOF" EOF AS_IF([test "$have_xmlto" = yes], [AS_IF([$XMLTO --skip-validation txt conftest.xml >/dev/null 2>&1], [have_xmlto_text=yes], - [AC_MSG_WARN([xmlto cannot generate text format, this format skipped])])]) + [# Try it again with a non-empty XML file. + cat > conftest.xml << "EOF" +<x></x> +EOF + AS_IF([$XMLTO --skip-validation txt conftest.xml >/dev/null 2>&1], + [have_xmlto_text=yes], + [AC_MSG_WARN([xmlto cannot generate text format, this format skipped])])])]) rm -f conftest.xml AM_CONDITIONAL([HAVE_XMLTO_TEXT], [test $have_xmlto_text = yes]) AM_CONDITIONAL([HAVE_XMLTO], [test "$have_xmlto" = yes]) @@ -3484,8 +3582,9 @@ AC_REQUIRE([PKG_PROG_PKG_CONFIG]) macros_datadir=`$PKG_CONFIG --print-errors --variable=pkgdatadir xorg-macros` INSTALL_CMD="(cp -f "$macros_datadir/INSTALL" \$(top_srcdir)/.INSTALL.tmp && \ mv \$(top_srcdir)/.INSTALL.tmp \$(top_srcdir)/INSTALL) \ -|| (rm -f \$(top_srcdir)/.INSTALL.tmp; touch \$(top_srcdir)/INSTALL; \ -echo 'util-macros \"pkgdatadir\" from xorg-macros.pc not found: installing possibly empty INSTALL.' >&2)" +|| (rm -f \$(top_srcdir)/.INSTALL.tmp; test -e \$(top_srcdir)/INSTALL || ( \ +touch \$(top_srcdir)/INSTALL; \ +echo 'failed to copy INSTALL from util-macros: installing empty INSTALL.' >&2))" AC_SUBST([INSTALL_CMD]) ]) # XORG_INSTALL dnl Copyright 2005 Red Hat, Inc @@ -3546,10 +3645,11 @@ AC_DEFUN([XORG_RELEASE_VERSION],[ # # AC_DEFUN([XORG_CHANGELOG], [ -CHANGELOG_CMD="(GIT_DIR=\$(top_srcdir)/.git git log > \$(top_srcdir)/.changelog.tmp && \ +CHANGELOG_CMD="((GIT_DIR=\$(top_srcdir)/.git git log > \$(top_srcdir)/.changelog.tmp) 2>/dev/null && \ mv \$(top_srcdir)/.changelog.tmp \$(top_srcdir)/ChangeLog) \ -|| (rm -f \$(top_srcdir)/.changelog.tmp; touch \$(top_srcdir)/ChangeLog; \ -echo 'git directory not found: installing possibly empty changelog.' >&2)" +|| (rm -f \$(top_srcdir)/.changelog.tmp; test -e \$(top_srcdir)/ChangeLog || ( \ +touch \$(top_srcdir)/ChangeLog; \ +echo 'git failed to create ChangeLog: installing empty ChangeLog.' >&2))" AC_SUBST([CHANGELOG_CMD]) ]) # XORG_CHANGELOG diff --git a/xserver/composite/compalloc.c b/xserver/composite/compalloc.c index 05ffc7e85..433dc820a 100644 --- a/xserver/composite/compalloc.c +++ b/xserver/composite/compalloc.c @@ -67,6 +67,18 @@ compBlockHandler(ScreenPtr pScreen, void *pTimeout) cs->BlockHandler = NULL; } +void +compMarkAncestors(WindowPtr pWin) +{ + pWin = pWin->parent; + while (pWin) { + if (pWin->damagedDescendants) + return; + pWin->damagedDescendants = TRUE; + pWin = pWin->parent; + } +} + static void compReportDamage(DamagePtr pDamage, RegionPtr pRegion, void *closure) { @@ -81,14 +93,7 @@ compReportDamage(DamagePtr pDamage, RegionPtr pRegion, void *closure) } cw->damaged = TRUE; - /* Mark the ancestors */ - pWin = pWin->parent; - while (pWin) { - if (pWin->damagedDescendants) - break; - pWin->damagedDescendants = TRUE; - pWin = pWin->parent; - } + compMarkAncestors(pWin); } static void diff --git a/xserver/composite/compint.h b/xserver/composite/compint.h index f05c2d8a5..89f6507b9 100644 --- a/xserver/composite/compint.h +++ b/xserver/composite/compint.h @@ -236,6 +236,8 @@ Bool compReallocPixmap(WindowPtr pWin, int x, int y, unsigned int w, unsigned int h, int bw); +void compMarkAncestors(WindowPtr pWin); + /* * compinit.c */ diff --git a/xserver/composite/compwindow.c b/xserver/composite/compwindow.c index f88238146..e74ce661a 100644 --- a/xserver/composite/compwindow.c +++ b/xserver/composite/compwindow.c @@ -432,6 +432,7 @@ compReparentWindow(WindowPtr pWin, WindowPtr pPriorParent) { ScreenPtr pScreen = pWin->drawable.pScreen; CompScreenPtr cs = GetCompScreen(pScreen); + CompWindowPtr cw = GetCompWindow(pWin); pScreen->ReparentWindow = cs->ReparentWindow; /* @@ -469,6 +470,10 @@ compReparentWindow(WindowPtr pWin, WindowPtr pPriorParent) (*pScreen->ReparentWindow) (pWin, pPriorParent); cs->ReparentWindow = pScreen->ReparentWindow; pScreen->ReparentWindow = compReparentWindow; + + if (pWin->damagedDescendants || (cw && cw->damaged)) + compMarkAncestors(pWin); + compCheckTree(pWin->drawable.pScreen); } diff --git a/xserver/config/udev.c b/xserver/config/udev.c index e198e8609..3a73189e2 100644 --- a/xserver/config/udev.c +++ b/xserver/config/udev.c @@ -135,7 +135,7 @@ device_added(struct udev_device *udev_device) #endif value = udev_device_get_property_value(udev_device, "ID_INPUT"); - if (value && !strcmp(value, "0")) { + if (!value || !strcmp(value, "0")) { LogMessageVerb(X_INFO, 10, "config/udev: ignoring device %s without " "property ID_INPUT set\n", path); diff --git a/xserver/configure b/xserver/configure index 29e575a2e..e68eead19 100644 --- a/xserver/configure +++ b/xserver/configure @@ -1,8 +1,8 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for xorg-server 1.19.6. +# Generated by GNU Autoconf 2.69 for xorg-server 1.19.7. # -# Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>. +# Report bugs to <https://gitlab.freedesktop.org/xorg/xserver/issues>. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -275,7 +275,7 @@ fi $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: https://bugs.freedesktop.org/enter_bug.cgi?product=xorg +$0: https://gitlab.freedesktop.org/xorg/xserver/issues $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do @@ -651,9 +651,9 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='xorg-server' PACKAGE_TARNAME='xorg-server' -PACKAGE_VERSION='1.19.6' -PACKAGE_STRING='xorg-server 1.19.6' -PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg' +PACKAGE_VERSION='1.19.7' +PACKAGE_STRING='xorg-server 1.19.7' +PACKAGE_BUGREPORT='https://gitlab.freedesktop.org/xorg/xserver/issues' PACKAGE_URL='' ac_unique_file="Makefile.am" @@ -2071,7 +2071,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures xorg-server 1.19.6 to adapt to many kinds of systems. +\`configure' configures xorg-server 1.19.7 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -2141,7 +2141,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of xorg-server 1.19.6:";; + short | recursive ) echo "Configuration of xorg-server 1.19.7:";; esac cat <<\_ACEOF @@ -2342,10 +2342,10 @@ Optional Packages: org.x) --with-bundle-version=VERSION Version to use for X11.app's CFBundleVersion - (default: 1.19.6) + (default: 1.19.7) --with-bundle-version-string=VERSION Version to use for X11.app's - CFBundleShortVersionString (default: 1.19.6) + CFBundleShortVersionString (default: 1.19.7) --with-sparkle-feed-url=URL URL for the Sparkle feed (default: https://www.xquartz.org/releases/sparkle/release.xml) @@ -2537,7 +2537,7 @@ Some influential environment variables: Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. -Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>. +Report bugs to <https://gitlab.freedesktop.org/xorg/xserver/issues>. _ACEOF ac_status=$? fi @@ -2600,7 +2600,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -xorg-server configure 1.19.6 +xorg-server configure 1.19.7 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2759,9 +2759,9 @@ $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ---------------------------------------------------------------------- ## -## Report this to https://bugs.freedesktop.org/enter_bug.cgi?product=xorg ## -## ---------------------------------------------------------------------- ##" +( $as_echo "## ----------------------------------------------------------------- ## +## Report this to https://gitlab.freedesktop.org/xorg/xserver/issues ## +## ----------------------------------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac @@ -3309,7 +3309,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by xorg-server $as_me 1.19.6, which was +It was created by xorg-server $as_me 1.19.7, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3657,8 +3657,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu -RELEASE_DATE="2017-12-20" -RELEASE_NAME="Lousiana Gumbo" +RELEASE_DATE="2019-03-02" +RELEASE_NAME="Clemson Hamberder" am__api_version='1.12' @@ -4137,7 +4137,7 @@ fi # Define the identity of the package. PACKAGE='xorg-server' - VERSION='1.19.6' + VERSION='1.19.7' cat >>confdefs.h <<_ACEOF @@ -11842,10 +11842,11 @@ _ACEOF -CHANGELOG_CMD="(GIT_DIR=\$(top_srcdir)/.git git log > \$(top_srcdir)/.changelog.tmp && \ +CHANGELOG_CMD="((GIT_DIR=\$(top_srcdir)/.git git log > \$(top_srcdir)/.changelog.tmp) 2>/dev/null && \ mv \$(top_srcdir)/.changelog.tmp \$(top_srcdir)/ChangeLog) \ -|| (rm -f \$(top_srcdir)/.changelog.tmp; touch \$(top_srcdir)/ChangeLog; \ -echo 'git directory not found: installing possibly empty changelog.' >&2)" +|| (rm -f \$(top_srcdir)/.changelog.tmp; test -e \$(top_srcdir)/ChangeLog || ( \ +touch \$(top_srcdir)/ChangeLog; \ +echo 'git failed to create ChangeLog: installing empty ChangeLog.' >&2))" @@ -11853,14 +11854,45 @@ echo 'git directory not found: installing possibly empty changelog.' >&2)" macros_datadir=`$PKG_CONFIG --print-errors --variable=pkgdatadir xorg-macros` INSTALL_CMD="(cp -f "$macros_datadir/INSTALL" \$(top_srcdir)/.INSTALL.tmp && \ mv \$(top_srcdir)/.INSTALL.tmp \$(top_srcdir)/INSTALL) \ -|| (rm -f \$(top_srcdir)/.INSTALL.tmp; touch \$(top_srcdir)/INSTALL; \ -echo 'util-macros \"pkgdatadir\" from xorg-macros.pc not found: installing possibly empty INSTALL.' >&2)" +|| (rm -f \$(top_srcdir)/.INSTALL.tmp; test -e \$(top_srcdir)/INSTALL || ( \ +touch \$(top_srcdir)/INSTALL; \ +echo 'failed to copy INSTALL from util-macros: installing empty INSTALL.' >&2))" +case $host_os in + solaris*) + # Solaris 2.0 - 11.3 use SysV man page section numbers, so we + # check for a man page file found in later versions that use + # traditional section numbers instead + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /usr/share/man/man7/attributes.7" >&5 +$as_echo_n "checking for /usr/share/man/man7/attributes.7... " >&6; } +if ${ac_cv_file__usr_share_man_man7_attributes_7+:} false; then : + $as_echo_n "(cached) " >&6 +else + test "$cross_compiling" = yes && + as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 +if test -r "/usr/share/man/man7/attributes.7"; then + ac_cv_file__usr_share_man_man7_attributes_7=yes +else + ac_cv_file__usr_share_man_man7_attributes_7=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__usr_share_man_man7_attributes_7" >&5 +$as_echo "$ac_cv_file__usr_share_man_man7_attributes_7" >&6; } +if test "x$ac_cv_file__usr_share_man_man7_attributes_7" = xyes; then : + SYSV_MAN_SECTIONS=false +else + SYSV_MAN_SECTIONS=true +fi + + ;; + *) SYSV_MAN_SECTIONS=false ;; +esac + if test x$APP_MAN_SUFFIX = x ; then APP_MAN_SUFFIX=1 fi @@ -11876,9 +11908,9 @@ if test x$LIB_MAN_DIR = x ; then fi if test x$FILE_MAN_SUFFIX = x ; then - case $host_os in - solaris*) FILE_MAN_SUFFIX=4 ;; - *) FILE_MAN_SUFFIX=5 ;; + case $SYSV_MAN_SECTIONS in + true) FILE_MAN_SUFFIX=4 ;; + *) FILE_MAN_SUFFIX=5 ;; esac fi if test x$FILE_MAN_DIR = x ; then @@ -11886,9 +11918,9 @@ if test x$FILE_MAN_DIR = x ; then fi if test x$MISC_MAN_SUFFIX = x ; then - case $host_os in - solaris*) MISC_MAN_SUFFIX=5 ;; - *) MISC_MAN_SUFFIX=7 ;; + case $SYSV_MAN_SECTIONS in + true) MISC_MAN_SUFFIX=5 ;; + *) MISC_MAN_SUFFIX=7 ;; esac fi if test x$MISC_MAN_DIR = x ; then @@ -11896,9 +11928,9 @@ if test x$MISC_MAN_DIR = x ; then fi if test x$DRIVER_MAN_SUFFIX = x ; then - case $host_os in - solaris*) DRIVER_MAN_SUFFIX=7 ;; - *) DRIVER_MAN_SUFFIX=4 ;; + case $SYSV_MAN_SECTIONS in + true) DRIVER_MAN_SUFFIX=7 ;; + *) DRIVER_MAN_SUFFIX=4 ;; esac fi if test x$DRIVER_MAN_DIR = x ; then @@ -11906,9 +11938,9 @@ if test x$DRIVER_MAN_DIR = x ; then fi if test x$ADMIN_MAN_SUFFIX = x ; then - case $host_os in - solaris*) ADMIN_MAN_SUFFIX=1m ;; - *) ADMIN_MAN_SUFFIX=8 ;; + case $SYSV_MAN_SECTIONS in + true) ADMIN_MAN_SUFFIX=1m ;; + *) ADMIN_MAN_SUFFIX=8 ;; esac fi if test x$ADMIN_MAN_DIR = x ; then @@ -12428,6 +12460,11 @@ esac fi # Test for the ability of xmlto to generate a text target +# +# NOTE: xmlto 0.0.27 or higher return a non-zero return code in the +# following test for empty XML docbook files. +# For compatibility reasons use the following empty XML docbook file and if +# it fails try it again with a non-empty XML file. have_xmlto_text=no cat > conftest.xml << "EOF" EOF @@ -12435,10 +12472,18 @@ if test "$have_xmlto" = yes; then : if $XMLTO --skip-validation txt conftest.xml >/dev/null 2>&1; then : have_xmlto_text=yes else + # Try it again with a non-empty XML file. + cat > conftest.xml << "EOF" +<x></x> +EOF + if $XMLTO --skip-validation txt conftest.xml >/dev/null 2>&1; then : + have_xmlto_text=yes +else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xmlto cannot generate text format, this format skipped" >&5 $as_echo "$as_me: WARNING: xmlto cannot generate text format, this format skipped" >&2;} fi fi +fi rm -f conftest.xml if test $have_xmlto_text = yes; then HAVE_XMLTO_TEXT_TRUE= @@ -23161,7 +23206,7 @@ _ACEOF if test "${with_bundle_version+set}" = set; then : withval=$with_bundle_version; BUNDLE_VERSION="${withval}" else - BUNDLE_VERSION="1.19.6" + BUNDLE_VERSION="1.19.7" fi @@ -25707,6 +25752,17 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi + if test "$MONOTONIC_CLOCK" = "cross compiling"; then + ac_fn_c_check_decl "$LINENO" "CLOCK_MONOTONIC" "ac_cv_have_decl_CLOCK_MONOTONIC" "#include <time.h> +" +if test "x$ac_cv_have_decl_CLOCK_MONOTONIC" = xyes; then : + MONOTONIC_CLOCK="guessing yes" +else + MONOTONIC_CLOCK=no +fi + + fi + LIBS="$LIBS_SAVE" CPPFLAGS="$CPPFLAGS_SAVE" else @@ -25715,6 +25771,9 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MONOTONIC_CLOCK" >&5 $as_echo "$MONOTONIC_CLOCK" >&6; } +if test "$MONOTONIC_CLOCK" = "guessing yes"; then + MONOTONIC_CLOCK=yes +fi if test "x$MONOTONIC_CLOCK" = xyes; then @@ -33262,7 +33321,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by xorg-server $as_me 1.19.6, which was +This file was extended by xorg-server $as_me 1.19.7, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -33322,13 +33381,13 @@ $config_headers Configuration commands: $config_commands -Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>." +Report bugs to <https://gitlab.freedesktop.org/xorg/xserver/issues>." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -xorg-server config.status 1.19.6 +xorg-server config.status 1.19.7 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/xserver/configure.ac b/xserver/configure.ac index 1a971e8dc..5b964ecf8 100644 --- a/xserver/configure.ac +++ b/xserver/configure.ac @@ -26,9 +26,9 @@ dnl dnl Process this file with autoconf to create configure. AC_PREREQ(2.60) -AC_INIT([xorg-server], 1.19.6, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server) -RELEASE_DATE="2017-12-20" -RELEASE_NAME="Lousiana Gumbo" +AC_INIT([xorg-server], 1.19.7, [https://gitlab.freedesktop.org/xorg/xserver/issues], xorg-server) +RELEASE_DATE="2019-03-02" +RELEASE_NAME="Clemson Hamberder" AC_CONFIG_SRCDIR([Makefile.am]) AC_CONFIG_MACRO_DIR([m4]) AM_INIT_AUTOMAKE([foreign dist-bzip2]) @@ -1107,6 +1107,10 @@ int main(int argc, char *argv[[]]) { ])], [MONOTONIC_CLOCK=yes], [MONOTONIC_CLOCK=no], [MONOTONIC_CLOCK="cross compiling"]) + if test "$MONOTONIC_CLOCK" = "cross compiling"; then + AC_CHECK_DECL([CLOCK_MONOTONIC],[MONOTONIC_CLOCK="guessing yes"],[MONOTONIC_CLOCK=no],[#include <time.h>]) + fi + LIBS="$LIBS_SAVE" CPPFLAGS="$CPPFLAGS_SAVE" else @@ -1114,6 +1118,9 @@ else fi AC_MSG_RESULT([$MONOTONIC_CLOCK]) +if test "$MONOTONIC_CLOCK" = "guessing yes"; then + MONOTONIC_CLOCK=yes +fi if test "x$MONOTONIC_CLOCK" = xyes; then AC_DEFINE(MONOTONIC_CLOCK, 1, [Have monotonic clock from clock_gettime()]) diff --git a/xserver/exa/exa_unaccel.c b/xserver/exa/exa_unaccel.c index 73eada9c2..2d3e2ffe6 100644 --- a/xserver/exa/exa_unaccel.c +++ b/xserver/exa/exa_unaccel.c @@ -703,6 +703,7 @@ exaGetPixmapFirstPixel(PixmapPtr pPixmap) { switch (pPixmap->drawable.bitsPerPixel) { case 32: + case 24: { CARD32 pixel; diff --git a/xserver/glamor/glamor_gradient.c b/xserver/glamor/glamor_gradient.c index 0c97ce7cb..f0b7d129c 100644 --- a/xserver/glamor/glamor_gradient.c +++ b/xserver/glamor/glamor_gradient.c @@ -54,27 +54,33 @@ _glamor_create_getcolor_fs_source(ScreenPtr screen, int stops_count, "vec4 get_color(float stop_len)\n"\ "{\n"\ " int i = 0;\n"\ - " float new_alpha; \n"\ + " vec4 stop_color_before;\n"\ " vec4 gradient_color;\n"\ + " float stop_delta;\n"\ " float percentage; \n"\ - " for(i = 0; i < n_stop - 1; i++) {\n"\ + " \n"\ + " if(stop_len < stops[0])\n"\ + " return vec4(0.0, 0.0, 0.0, 0.0); \n"\ + " for(i = 1; i < n_stop; i++) {\n"\ " if(stop_len < stops[i])\n"\ " break; \n"\ " }\n"\ + " if(i == n_stop)\n"\ + " return vec4(0.0, 0.0, 0.0, 0.0); \n"\ " \n"\ - " if(stops[i] - stops[i-1] > 2.0)\n"\ + " stop_color_before = stop_colors[i-1];\n"\ + " stop_delta = stops[i] - stops[i-1];\n"\ + " if(stop_delta > 2.0)\n"\ " percentage = 0.0;\n" /*For comply with pixman, walker->stepper overflow.*/\ - " else if(stops[i] - stops[i-1] < 0.000001)\n"\ + " else if(stop_delta < 0.000001)\n"\ " percentage = 0.0;\n"\ " else \n"\ - " percentage = (stop_len - stops[i-1])/(stops[i] - stops[i-1]);\n"\ - " new_alpha = percentage * stop_colors[i].a + \n"\ - " (1.0-percentage) * stop_colors[i-1].a; \n"\ - " gradient_color = vec4((percentage * stop_colors[i].rgb \n"\ - " + (1.0-percentage) * stop_colors[i-1].rgb)*new_alpha, \n"\ - " new_alpha);\n"\ + " percentage = (stop_len - stops[i-1])/stop_delta;\n"\ " \n"\ - " return gradient_color;\n"\ + " gradient_color = stop_color_before;\n"\ + " if(percentage != 0.0)\n"\ + " gradient_color += (stop_colors[i] - gradient_color)*percentage;\n"\ + " return vec4(gradient_color.rgb * gradient_color.a, gradient_color.a);\n"\ "}\n" /* Because the array access for shader is very slow, the performance is very low @@ -101,73 +107,66 @@ _glamor_create_getcolor_fs_source(ScreenPtr screen, int stops_count, "\n" "vec4 get_color(float stop_len)\n" "{\n" - " float stop_after;\n" - " float stop_before;\n" " vec4 stop_color_before;\n" " vec4 stop_color_after;\n" - " float new_alpha; \n" " vec4 gradient_color;\n" + " float stop_before;\n" + " float stop_delta;\n" " float percentage; \n" " \n" " if((stop_len < stop0) && (n_stop >= 1)) {\n" - " stop_color_before = stop_color0;\n" - " stop_color_after = stop_color0;\n" - " stop_after = stop0;\n" - " stop_before = stop0;\n" + " stop_color_before = vec4(0.0, 0.0, 0.0, 0.0);\n" + " stop_delta = 0.0;\n" " } else if((stop_len < stop1) && (n_stop >= 2)) {\n" " stop_color_before = stop_color0;\n" " stop_color_after = stop_color1;\n" - " stop_after = stop1;\n" " stop_before = stop0;\n" + " stop_delta = stop1 - stop0;\n" " } else if((stop_len < stop2) && (n_stop >= 3)) {\n" " stop_color_before = stop_color1;\n" " stop_color_after = stop_color2;\n" - " stop_after = stop2;\n" " stop_before = stop1;\n" + " stop_delta = stop2 - stop1;\n" " } else if((stop_len < stop3) && (n_stop >= 4)){\n" " stop_color_before = stop_color2;\n" " stop_color_after = stop_color3;\n" - " stop_after = stop3;\n" " stop_before = stop2;\n" + " stop_delta = stop3 - stop2;\n" " } else if((stop_len < stop4) && (n_stop >= 5)){\n" " stop_color_before = stop_color3;\n" " stop_color_after = stop_color4;\n" - " stop_after = stop4;\n" " stop_before = stop3;\n" + " stop_delta = stop4 - stop3;\n" " } else if((stop_len < stop5) && (n_stop >= 6)){\n" " stop_color_before = stop_color4;\n" " stop_color_after = stop_color5;\n" - " stop_after = stop5;\n" " stop_before = stop4;\n" + " stop_delta = stop5 - stop4;\n" " } else if((stop_len < stop6) && (n_stop >= 7)){\n" " stop_color_before = stop_color5;\n" " stop_color_after = stop_color6;\n" - " stop_after = stop6;\n" " stop_before = stop5;\n" + " stop_delta = stop6 - stop5;\n" " } else if((stop_len < stop7) && (n_stop >= 8)){\n" " stop_color_before = stop_color6;\n" " stop_color_after = stop_color7;\n" - " stop_after = stop7;\n" " stop_before = stop6;\n" + " stop_delta = stop7 - stop6;\n" " } else {\n" - " stop_color_before = stop_color7;\n" - " stop_color_after = stop_color7;\n" - " stop_after = stop7;\n" - " stop_before = stop7;\n" + " stop_color_before = vec4(0.0, 0.0, 0.0, 0.0);\n" + " stop_delta = 0.0;\n" " }\n" - " if(stop_after - stop_before > 2.0)\n" + " if(stop_delta > 2.0)\n" " percentage = 0.0;\n" //For comply with pixman, walker->stepper overflow. - " else if(stop_after - stop_before < 0.000001)\n" + " else if(stop_delta < 0.000001)\n" " percentage = 0.0;\n" - " else \n" - " percentage = (stop_len - stop_before)/(stop_after - stop_before);\n" - " new_alpha = percentage * stop_color_after.a + \n" - " (1.0-percentage) * stop_color_before.a; \n" - " gradient_color = vec4((percentage * stop_color_after.rgb \n" - " + (1.0-percentage) * stop_color_before.rgb)*new_alpha, \n" - " new_alpha);\n" + " else\n" + " percentage = (stop_len - stop_before)/stop_delta;\n" " \n" - " return gradient_color;\n" + " gradient_color = stop_color_before;\n" + " if(percentage != 0.0)\n" + " gradient_color += (stop_color_after - gradient_color)*percentage;\n" + " return vec4(gradient_color.rgb * gradient_color.a, gradient_color.a);\n" "}\n"; if (use_array) { @@ -458,18 +457,10 @@ _glamor_create_linear_gradient_program(ScreenPtr screen, int stops_count, "float get_stop_len()\n"\ "{\n"\ " vec3 tmp = vec3(source_texture.x, source_texture.y, 1.0);\n"\ - " float len_percentage;\n"\ " float distance;\n"\ " float _p1_distance;\n"\ " float _pt_distance;\n"\ " float y_dist;\n"\ - " float stop_after;\n"\ - " float stop_before;\n"\ - " vec4 stop_color_before;\n"\ - " vec4 stop_color_after;\n"\ - " float new_alpha; \n"\ - " vec4 gradient_color;\n"\ - " float percentage; \n"\ " vec3 source_texture_trans = transform_mat * tmp;\n"\ " \n"\ " if(hor_ver == 0) { \n" /*Normal case.*/\ @@ -484,19 +475,17 @@ _glamor_create_linear_gradient_program(ScreenPtr screen, int stops_count, " _pt_distance = pt_distance * source_texture_trans.z;\n"\ " } \n"\ " \n"\ - " distance = distance - _p1_distance; \n"\ + " distance = (distance - _p1_distance) / _pt_distance;\n"\ " \n"\ " if(repeat_type == %d){\n" /* repeat normal*/\ - " distance = mod(distance, _pt_distance);\n"\ + " distance = fract(distance);\n"\ " }\n"\ " \n"\ " if(repeat_type == %d) {\n" /* repeat reflect*/\ - " distance = abs(mod(distance + _pt_distance, 2.0 * _pt_distance) - _pt_distance);\n"\ + " distance = abs(fract(distance * 0.5 + 0.5) * 2.0 - 1.0);\n"\ " }\n"\ " \n"\ - " len_percentage = distance/(_pt_distance);\n"\ - " \n"\ - " return len_percentage;\n"\ + " return distance;\n"\ "}\n"\ "\n"\ "void main()\n"\ @@ -761,13 +750,13 @@ _glamor_gradient_set_stops(PicturePtr src_picture, PictGradient *pgradient, stop_colors[1] = 0.0; //G stop_colors[2] = 0.0; //B stop_colors[3] = 0.0; //Alpha - n_stops[0] = -(float) INT_MAX; //should be small enough. + n_stops[0] = n_stops[1]; stop_colors[0 + (count - 1) * 4] = 0.0; //R stop_colors[1 + (count - 1) * 4] = 0.0; //G stop_colors[2 + (count - 1) * 4] = 0.0; //B stop_colors[3 + (count - 1) * 4] = 0.0; //Alpha - n_stops[count - 1] = (float) INT_MAX; //should be large enough. + n_stops[count - 1] = n_stops[count - 2]; break; case PIXMAN_REPEAT_NORMAL: REPEAT_FILL_STOPS(0, count - 2); diff --git a/xserver/glamor/glamor_xv.c b/xserver/glamor/glamor_xv.c index 31320d124..e0375d7cd 100644 --- a/xserver/glamor/glamor_xv.c +++ b/xserver/glamor/glamor_xv.c @@ -62,6 +62,8 @@ typedef struct tagREF_TRANSFORM { static const glamor_facet glamor_facet_xv_planar = { .name = "xv_planar", + .version = 120, + .source_name = "v_texcoord0", .vs_vars = ("attribute vec2 position;\n" "attribute vec2 v_texcoord0;\n" diff --git a/xserver/glx/glxdricommon.c b/xserver/glx/glxdricommon.c index d3136e87b..dbf199c93 100644 --- a/xserver/glx/glxdricommon.c +++ b/xserver/glx/glxdricommon.c @@ -218,6 +218,9 @@ createModeFromConfig(const __DRIcoreExtension * core, if (duplicateForComp && (render_type_is_pbuffer_only(renderType) || config->config.rgbBits != 32 || + config->config.redBits != 8 || + config->config.greenBits != 8 || + config->config.blueBits != 8 || config->config.visualRating != GLX_NONE || config->config.sampleBuffers != 0)) { free(config); diff --git a/xserver/glx/glxscreens.c b/xserver/glx/glxscreens.c index 29bacd988..62d66bc54 100644 --- a/xserver/glx/glxscreens.c +++ b/xserver/glx/glxscreens.c @@ -275,6 +275,11 @@ pickFBConfig(__GLXscreen * pGlxScreen, VisualPtr visual) /* If it's the 32-bit RGBA visual, demand a 32-bit fbconfig. */ if (visual->nplanes == 32 && config->rgbBits != 32) continue; + /* If it's the 32-bit RGBA visual, do not pick sRGB capable config. + * This can cause issues with compositors that are not sRGB aware. + */ + if (visual->nplanes == 32 && config->sRGBCapable == GL_TRUE) + continue; /* Can't use the same FBconfig for multiple X visuals. I think. */ if (config->visualID != 0) continue; diff --git a/xserver/hw/xfree86/Makefile.am b/xserver/hw/xfree86/Makefile.am index b876b79ab..458720052 100644 --- a/xserver/hw/xfree86/Makefile.am +++ b/xserver/hw/xfree86/Makefile.am @@ -84,8 +84,8 @@ Xorg_DEPENDENCIES = $(LOCAL_LIBS) Xorg_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG) if SUID_WRAPPER -wrapdir = $(SUID_WRAPPER_DIR) -wrap_PROGRAMS = Xorg.wrap +wrapexecdir = $(SUID_WRAPPER_DIR) +wrapexec_PROGRAMS = Xorg.wrap Xorg_wrap_SOURCES = xorg-wrapper.c endif diff --git a/xserver/hw/xfree86/Makefile.in b/xserver/hw/xfree86/Makefile.in index 5da17959a..c57648f15 100644 --- a/xserver/hw/xfree86/Makefile.in +++ b/xserver/hw/xfree86/Makefile.in @@ -51,7 +51,7 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = Xorg$(EXEEXT) -@SUID_WRAPPER_TRUE@wrap_PROGRAMS = Xorg.wrap$(EXEEXT) +@SUID_WRAPPER_TRUE@wrapexec_PROGRAMS = Xorg.wrap$(EXEEXT) subdir = hw/xfree86 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/Xorg.sh.in $(top_srcdir)/depcomp @@ -74,8 +74,8 @@ CONFIG_HEADER = $(top_builddir)/include/do-not-use-config.h \ $(top_builddir)/include/version-config.h CONFIG_CLEAN_FILES = Xorg.sh CONFIG_CLEAN_VPATH_FILES = -am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(wrapdir)" -PROGRAMS = $(bin_PROGRAMS) $(wrap_PROGRAMS) +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(wrapexecdir)" +PROGRAMS = $(bin_PROGRAMS) $(wrapexec_PROGRAMS) nodist_Xorg_OBJECTS = sdksyms.$(OBJEXT) Xorg_OBJECTS = $(nodist_Xorg_OBJECTS) am__DEPENDENCIES_1 = @@ -591,7 +591,7 @@ Xorg_LDADD = \ Xorg_DEPENDENCIES = $(LOCAL_LIBS) Xorg_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG) -@SUID_WRAPPER_TRUE@wrapdir = $(SUID_WRAPPER_DIR) +@SUID_WRAPPER_TRUE@wrapexecdir = $(SUID_WRAPPER_DIR) @SUID_WRAPPER_TRUE@Xorg_wrap_SOURCES = xorg-wrapper.c BUILT_SOURCES = xorg.conf.example DISTCLEANFILES = xorg.conf.example @@ -688,12 +688,12 @@ clean-binPROGRAMS: list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list -install-wrapPROGRAMS: $(wrap_PROGRAMS) +install-wrapexecPROGRAMS: $(wrapexec_PROGRAMS) @$(NORMAL_INSTALL) - @list='$(wrap_PROGRAMS)'; test -n "$(wrapdir)" || list=; \ + @list='$(wrapexec_PROGRAMS)'; test -n "$(wrapexecdir)" || list=; \ if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(wrapdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(wrapdir)" || exit 1; \ + echo " $(MKDIR_P) '$(DESTDIR)$(wrapexecdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(wrapexecdir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ @@ -711,23 +711,23 @@ install-wrapPROGRAMS: $(wrap_PROGRAMS) while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ - echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(wrapdir)$$dir'"; \ - $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(wrapdir)$$dir" || exit $$?; \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(wrapexecdir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(wrapexecdir)$$dir" || exit $$?; \ } \ ; done -uninstall-wrapPROGRAMS: +uninstall-wrapexecPROGRAMS: @$(NORMAL_UNINSTALL) - @list='$(wrap_PROGRAMS)'; test -n "$(wrapdir)" || list=; \ + @list='$(wrapexec_PROGRAMS)'; test -n "$(wrapexecdir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(wrapdir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(wrapdir)" && rm -f $$files + echo " ( cd '$(DESTDIR)$(wrapexecdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(wrapexecdir)" && rm -f $$files -clean-wrapPROGRAMS: - @list='$(wrap_PROGRAMS)'; test -n "$$list" || exit 0; \ +clean-wrapexecPROGRAMS: + @list='$(wrapexec_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ @@ -964,7 +964,7 @@ check: $(BUILT_SOURCES) all-am: Makefile $(PROGRAMS) installdirs: installdirs-recursive installdirs-am: - for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(wrapdir)"; do \ + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(wrapexecdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) @@ -1004,7 +1004,7 @@ maintainer-clean-generic: clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic clean-libtool \ - clean-wrapPROGRAMS mostlyclean-am + clean-wrapexecPROGRAMS mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) @@ -1024,13 +1024,13 @@ info: info-recursive info-am: -install-data-am: install-data-local install-wrapPROGRAMS +install-data-am: install-data-local install-dvi: install-dvi-recursive install-dvi-am: -install-exec-am: install-binPROGRAMS +install-exec-am: install-binPROGRAMS install-wrapexecPROGRAMS @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook install-html: install-html-recursive @@ -1072,7 +1072,7 @@ ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-local \ - uninstall-wrapPROGRAMS + uninstall-wrapexecPROGRAMS @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ @@ -1081,7 +1081,7 @@ uninstall-am: uninstall-binPROGRAMS uninstall-local \ .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-binPROGRAMS \ - clean-generic clean-libtool clean-wrapPROGRAMS cscopelist \ + clean-generic clean-libtool clean-wrapexecPROGRAMS cscopelist \ cscopelist-recursive ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ @@ -1090,13 +1090,13 @@ uninstall-am: uninstall-binPROGRAMS uninstall-local \ install-exec install-exec-am install-exec-hook install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ - install-strip install-wrapPROGRAMS installcheck \ + install-strip install-wrapexecPROGRAMS installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-hook uninstall-local \ - uninstall-wrapPROGRAMS + uninstall-wrapexecPROGRAMS # Without logdir, X will post an error on the terminal and will not start diff --git a/xserver/hw/xfree86/common/extramodes b/xserver/hw/xfree86/common/extramodes index 450502670..006b5cba1 100644 --- a/xserver/hw/xfree86/common/extramodes +++ b/xserver/hw/xfree86/common/extramodes @@ -25,3 +25,144 @@ Modeline "2048x1536" 340.48 2048 2216 2440 2832 1536 1537 1540 1603 -hsync +vs # 2048x1536 @ 85Hz (VESA GTF) hsync: 137.0kHz Modeline "2048x1536" 388.04 2048 2216 2440 2832 1536 1537 1540 1612 -hsync +vsync +### 16:9 modelines generated by cvt + +# 640x360 59.32 Hz (CVT 0.23M9-R) hsync: 22.19 kHz; pclk: 17.75 MHz +Modeline "640x360R" 17.75 640 688 720 800 360 363 368 374 +hsync -vsync + +# 640x360 59.84 Hz (CVT 0.23M9) hsync: 22.50 kHz; pclk: 18.00 MHz +Modeline "640x360" 18.00 640 664 720 800 360 363 368 376 -hsync +vsync + +# 720x405 58.99 Hz (CVT 0.29M9-R) hsync: 24.72 kHz; pclk: 21.75 MHz +Modeline "720x405R" 21.75 720 768 800 880 405 408 413 419 +hsync -vsync + +# 720x405 59.51 Hz (CVT 0.29M9) hsync: 25.11 kHz; pclk: 22.50 MHz +Modeline "720x405" 22.50 720 744 808 896 405 408 413 422 -hsync +vsync + +# 864x486 59.57 Hz (CVT 0.42M9-R) hsync: 29.79 kHz; pclk: 30.50 MHz +Modeline "864x486R" 30.50 864 912 944 1024 486 489 494 500 +hsync -vsync + +# 864x486 59.92 Hz (CVT 0.42M9) hsync: 30.32 kHz; pclk: 32.50 MHz +Modeline "864x486" 32.50 864 888 968 1072 486 489 494 506 -hsync +vsync + +# 960x540 59.82 Hz (CVT 0.52M9-R) hsync: 33.26 kHz; pclk: 37.25 MHz +Modeline "960x540R" 37.25 960 1008 1040 1120 540 543 548 556 +hsync -vsync + +# 960x540 59.63 Hz (CVT 0.52M9) hsync: 33.51 kHz; pclk: 40.75 MHz +Modeline "960x540" 40.75 960 992 1088 1216 540 543 548 562 -hsync +vsync + +# 1024x576 59.82 Hz (CVT 0.59M9-R) hsync: 35.47 kHz; pclk: 42.00 MHz +Modeline "1024x576R" 42.00 1024 1072 1104 1184 576 579 584 593 +hsync -vsync + +# 1024x576 59.90 Hz (CVT 0.59M9) hsync: 35.88 kHz; pclk: 46.50 MHz +Modeline "1024x576" 46.50 1024 1064 1160 1296 576 579 584 599 -hsync +vsync + +# 1280x720 59.74 Hz (CVT 0.92M9-R) hsync: 44.27 kHz; pclk: 63.75 MHz +Modeline "1280x720R" 63.75 1280 1328 1360 1440 720 723 728 741 +hsync -vsync + +# 1280x720 59.86 Hz (CVT 0.92M9) hsync: 44.77 kHz; pclk: 74.50 MHz +Modeline "1280x720" 74.50 1280 1344 1472 1664 720 723 728 748 -hsync +vsync + +# 1368x768 59.85 Hz (CVT) hsync: 47.28 kHz; pclk: 72.25 MHz +Modeline "1368x768R" 72.25 1368 1416 1448 1528 768 771 781 790 +hsync -vsync + +# 1368x768 59.88 Hz (CVT) hsync: 47.79 kHz; pclk: 85.25 MHz +Modeline "1368x768" 85.25 1368 1440 1576 1784 768 771 781 798 -hsync +vsync + +# 1600x900 59.82 Hz (CVT 1.44M9-R) hsync: 55.40 kHz; pclk: 97.50 MHz +Modeline "1600x900R" 97.50 1600 1648 1680 1760 900 903 908 926 +hsync -vsync + +# 1600x900 59.95 Hz (CVT 1.44M9) hsync: 55.99 kHz; pclk: 118.25 MHz +Modeline "1600x900" 118.25 1600 1696 1856 2112 900 903 908 934 -hsync +vsync + +# 1920x1080 59.93 Hz (CVT 2.07M9-R) hsync: 66.59 kHz; pclk: 138.50 MHz +Modeline "1920x1080R" 138.50 1920 1968 2000 2080 1080 1083 1088 1111 +hsync -vsync + +# 1920x1080 59.96 Hz (CVT 2.07M9) hsync: 67.16 kHz; pclk: 173.00 MHz +Modeline "1920x1080" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync + +# 2048x1152 59.91 Hz (CVT 2.36M9-R) hsync: 70.99 kHz; pclk: 156.75 MHz +Modeline "2048x1152R" 156.75 2048 2096 2128 2208 1152 1155 1160 1185 +hsync -vsync + +# 2048x1152 59.90 Hz (CVT 2.36M9) hsync: 71.58 kHz; pclk: 197.00 MHz +Modeline "2048x1152" 197.00 2048 2184 2400 2752 1152 1155 1160 1195 -hsync +vsync + +# 2560x1440 59.95 Hz (CVT 3.69M9-R) hsync: 88.79 kHz; pclk: 241.50 MHz +Modeline "2560x1440R" 241.50 2560 2608 2640 2720 1440 1443 1448 1481 +hsync -vsync + +# 2560x1440 59.96 Hz (CVT 3.69M9) hsync: 89.52 kHz; pclk: 312.25 MHz +Modeline "2560x1440" 312.25 2560 2752 3024 3488 1440 1443 1448 1493 -hsync +vsync + +# 2880x1620 59.97 Hz (CVT 4.67M9-R) hsync: 99.92 kHz; pclk: 303.75 MHz +Modeline "2880x1620R" 303.75 2880 2928 2960 3040 1620 1623 1628 1666 +hsync -vsync + +# 2880x1620 59.96 Hz (CVT 4.67M9) hsync: 100.67 kHz; pclk: 396.25 MHz +Modeline "2880x1620" 396.25 2880 3096 3408 3936 1620 1623 1628 1679 -hsync +vsync + +# 3200x1800 59.94 Hz (CVT 5.76M9-R) hsync: 111.01 kHz; pclk: 373.00 MHz +Modeline "3200x1800R" 373.00 3200 3248 3280 3360 1800 1803 1808 1852 +hsync -vsync + +# 3200x1800 59.96 Hz (CVT 5.76M9) hsync: 111.82 kHz; pclk: 492.00 MHz +Modeline "3200x1800" 492.00 3200 3456 3800 4400 1800 1803 1808 1865 -hsync +vsync + +# 3840x2160 59.97 Hz (CVT 8.29M9-R) hsync: 133.25 kHz; pclk: 533.00 MHz +Modeline "3840x2160R" 533.00 3840 3888 3920 4000 2160 2163 2168 2222 +hsync -vsync + +# 3840x2160 59.98 Hz (CVT 8.29M9) hsync: 134.18 kHz; pclk: 712.75 MHz +Modeline "3840x2160" 712.75 3840 4160 4576 5312 2160 2163 2168 2237 -hsync +vsync + +# 4096x2304 59.98 Hz (CVT 9.44M9-R) hsync: 142.15 kHz; pclk: 605.00 MHz +Modeline "4096x2304R" 605.00 4096 4144 4176 4256 2304 2307 2312 2370 +hsync -vsync + +# 4096x2304 59.99 Hz (CVT 9.44M9) hsync: 143.13 kHz; pclk: 813.00 MHz +Modeline "4096x2304" 813.00 4096 4440 4888 5680 2304 2307 2312 2386 -hsync +vsync + +# 5120x2880 59.99 Hz (CVT 14.75M9-R) hsync: 177.70 kHz; pclk: 938.25 MHz +Modeline "5120x2880R" 938.25 5120 5168 5200 5280 2880 2883 2888 2962 +hsync -vsync + +# 5120x2880 59.99 Hz (CVT 14.75M9) hsync: 178.88 kHz; pclk: 1276.50 MHz +Modeline "5120x2880" 1276.50 5120 5560 6128 7136 2880 2883 2888 2982 -hsync +vsync + +# 7680x4320 59.99 Hz (CVT 33.18M9-R) hsync: 266.55 kHz; pclk: 2089.75 MHz +Modeline "7680x4320R" 2089.75 7680 7728 7760 7840 4320 4323 4328 4443 +hsync -vsync + +# 7680x4320 59.99 Hz (CVT 33.18M9) hsync: 268.22 kHz; pclk: 2892.50 MHz +Modeline "7680x4320" 2892.50 7680 8376 9232 10784 4320 4323 4328 4471 -hsync +vsync + +# 15360x8640 59.99 Hz (CVT 132.71M9-R) hsync: 533.10 kHz; pclk: 8273.75 MHz +Modeline "15360x8640R" 8273.75 15360 15408 15440 15520 8640 8643 8648 8886 +hsync -vsync + +# 15360x8640 60.00 Hz (CVT 132.71M9) hsync: 536.27 kHz; pclk: 11669.25 MHz +Modeline "15360x8640" 11669.25 15360 16824 18560 21760 8640 8643 8648 8938 -hsync +vsync + +## 16:10 modelines generated by cvt + +# 1280x800 59.91 Hz (CVT 1.02MA-R) hsync: 49.31 kHz; pclk: 71.00 MHz +Modeline "1280x800R" 71.00 1280 1328 1360 1440 800 803 809 823 +hsync -vsync + +# 1280x800 59.81 Hz (CVT 1.02MA) hsync: 49.70 kHz; pclk: 83.50 MHz +Modeline "1280x800" 83.50 1280 1352 1480 1680 800 803 809 831 -hsync +vsync + +# 1400x900 59.88 Hz (CVT) hsync: 55.45 kHz; pclk: 86.50 MHz +Modeline "1400x900R" 86.50 1400 1448 1480 1560 900 903 913 926 +hsync -vsync + +# 1400x900 59.96 Hz (CVT) hsync: 56.01 kHz; pclk: 103.50 MHz +Modeline "1400x900" 103.50 1400 1480 1624 1848 900 903 913 934 -hsync +vsync + +# 1680x1050 59.88 Hz (CVT 1.76MA-R) hsync: 64.67 kHz; pclk: 119.00 MHz +Modeline "1680x1050R" 119.00 1680 1728 1760 1840 1050 1053 1059 1080 +hsync -vsync + +# 1680x1050 59.95 Hz (CVT 1.76MA) hsync: 65.29 kHz; pclk: 146.25 MHz +Modeline "1680x1050" 146.25 1680 1784 1960 2240 1050 1053 1059 1089 -hsync +vsync + +# 1920x1200 59.95 Hz (CVT 2.30MA-R) hsync: 74.04 kHz; pclk: 154.00 MHz +Modeline "1920x1200R" 154.00 1920 1968 2000 2080 1200 1203 1209 1235 +hsync -vsync + +# 1920x1200 59.88 Hz (CVT 2.30MA) hsync: 74.56 kHz; pclk: 193.25 MHz +Modeline "1920x1200" 193.25 1920 2056 2256 2592 1200 1203 1209 1245 -hsync +vsync + +# 2560x1600 59.97 Hz (CVT 4.10MA-R) hsync: 98.71 kHz; pclk: 268.50 MHz +Modeline "2560x1600R" 268.50 2560 2608 2640 2720 1600 1603 1609 1646 +hsync -vsync + +# 2560x1600 59.99 Hz (CVT 4.10MA) hsync: 99.46 kHz; pclk: 348.50 MHz +Modeline "2560x1600" 348.50 2560 2760 3032 3504 1600 1603 1609 1658 -hsync +vsync diff --git a/xserver/hw/xfree86/common/xf86xvmc.c b/xserver/hw/xfree86/common/xf86xvmc.c index a0a94c74b..c67418bf4 100644 --- a/xserver/hw/xfree86/common/xf86xvmc.c +++ b/xserver/hw/xfree86/common/xf86xvmc.c @@ -187,6 +187,7 @@ xf86XvMCScreenInit(ScreenPtr pScreen, } if (!pAdapt[i].xv_adaptor) { /* no adaptor by that name */ + pScreenPriv->dixinfo = FALSE; free(pAdapt); return FALSE; } diff --git a/xserver/hw/xwayland/xwayland-input.c b/xserver/hw/xwayland/xwayland-input.c index f2564d5d3..d96e6f2a4 100644 --- a/xserver/hw/xwayland/xwayland-input.c +++ b/xserver/hw/xwayland/xwayland-input.c @@ -639,7 +639,7 @@ keyboard_handle_keymap(void *data, struct wl_keyboard *keyboard, XkbDeviceApplyKeymap(xwl_seat->keyboard, xkb); master = GetMaster(xwl_seat->keyboard, MASTER_KEYBOARD); - if (master && master->lastSlave == xwl_seat->keyboard) + if (master) XkbDeviceApplyKeymap(master, xkb); XkbFreeKeyboard(xkb, XkbAllComponentsMask, TRUE); diff --git a/xserver/hw/xwayland/xwayland.c b/xserver/hw/xwayland/xwayland.c index 939f3392c..d0bdf36a4 100644 --- a/xserver/hw/xwayland/xwayland.c +++ b/xserver/hw/xwayland/xwayland.c @@ -159,6 +159,9 @@ xwl_window_from_window(WindowPtr window) static struct xwl_seat * xwl_screen_get_default_seat(struct xwl_screen *xwl_screen) { + if (xorg_list_is_empty(&xwl_screen->seat_list)) + return NULL; + return container_of(xwl_screen->seat_list.prev, struct xwl_seat, link); @@ -218,6 +221,10 @@ xwl_cursor_confined_to(DeviceIntPtr device, if (!xwl_seat) xwl_seat = xwl_screen_get_default_seat(xwl_screen); + /* xwl_seat hasn't been setup yet, don't do anything just yet */ + if (!xwl_seat) + return; + if (window == screen->root) { xwl_seat_unconfine_pointer(xwl_seat); return; @@ -454,8 +461,7 @@ xwl_unrealize_window(WindowPtr window) return ret; wl_surface_destroy(xwl_window->surface); - if (RegionNotEmpty(DamageRegion(xwl_window->damage))) - xorg_list_del(&xwl_window->link_damage); + xorg_list_del(&xwl_window->link_damage); DamageUnregister(xwl_window->damage); DamageDestroy(xwl_window->damage); if (xwl_window->frame_callback) diff --git a/xserver/os/inputthread.c b/xserver/os/inputthread.c index 721e86312..dc4eb9f20 100644 --- a/xserver/os/inputthread.c +++ b/xserver/os/inputthread.c @@ -497,6 +497,7 @@ InputThreadFini(void) /* Close the pipe to get the input thread to shut down */ close(hotplugPipeWrite); + input_force_unlock(); pthread_join(inputThreadInfo->thread, NULL); xorg_list_for_each_entry_safe(dev, next, &inputThreadInfo->devs, node) { diff --git a/xserver/os/xdmcp.c b/xserver/os/xdmcp.c index 7aeb393e6..d8c81fbf8 100644 --- a/xserver/os/xdmcp.c +++ b/xserver/os/xdmcp.c @@ -486,7 +486,7 @@ XdmcpRegisterConnection(int type, const char *address, int addrlen) IN6_IS_ADDR_V4MAPPED((const struct in6_addr *) address)) { fromAddr = &((struct sockaddr_in *) &FromAddress)->sin_addr; regAddr = - &((struct sockaddr_in6 *) &address)->sin6_addr.s6_addr[12]; + &((struct sockaddr_in6 *) address)->sin6_addr.s6_addr[12]; regAddrlen = sizeof(struct in_addr); } } diff --git a/xserver/present/present.c b/xserver/present/present.c index 86743c504..7d428fca7 100644 --- a/xserver/present/present.c +++ b/xserver/present/present.c @@ -222,13 +222,13 @@ present_vblank_notify(present_vblank_ptr vblank, CARD8 kind, CARD8 mode, uint64_ int n; if (vblank->window) - present_send_complete_notify(vblank->window, kind, mode, vblank->serial, ust, crtc_msc - vblank->msc_offset, vblank->client); + present_send_complete_notify(vblank->window, kind, mode, vblank->serial, ust, crtc_msc - vblank->msc_offset); for (n = 0; n < vblank->num_notifies; n++) { WindowPtr window = vblank->notifies[n].window; CARD32 serial = vblank->notifies[n].serial; if (window) - present_send_complete_notify(window, kind, mode, serial, ust, crtc_msc - vblank->msc_offset, vblank->client); + present_send_complete_notify(window, kind, mode, serial, ust, crtc_msc - vblank->msc_offset); } } @@ -788,7 +788,6 @@ present_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc) int present_pixmap(WindowPtr window, PixmapPtr pixmap, - ClientPtr client, CARD32 serial, RegionPtr valid, RegionPtr update, @@ -899,7 +898,6 @@ present_pixmap(WindowPtr window, xorg_list_append(&vblank->window_list, &window_priv->vblank); xorg_list_init(&vblank->event_queue); - vblank->client = client; vblank->screen = screen; vblank->window = window; vblank->pixmap = pixmap; @@ -1019,7 +1017,6 @@ present_abort_vblank(ScreenPtr screen, RRCrtcPtr crtc, uint64_t event_id, uint64 int present_notify_msc(WindowPtr window, - ClientPtr client, CARD32 serial, uint64_t target_msc, uint64_t divisor, @@ -1027,7 +1024,6 @@ present_notify_msc(WindowPtr window, { return present_pixmap(window, NULL, - client, serial, NULL, NULL, 0, 0, diff --git a/xserver/present/present_event.c b/xserver/present/present_event.c index ac6f2555a..c222dd5ff 100644 --- a/xserver/present/present_event.c +++ b/xserver/present/present_event.c @@ -146,7 +146,7 @@ present_register_complete_notify(present_complete_notify_proc proc) } void -present_send_complete_notify(WindowPtr window, CARD8 kind, CARD8 mode, CARD32 serial, uint64_t ust, uint64_t msc, ClientPtr client) +present_send_complete_notify(WindowPtr window, CARD8 kind, CARD8 mode, CARD32 serial, uint64_t ust, uint64_t msc) { present_window_priv_ptr window_priv = present_window_priv(window); @@ -167,8 +167,7 @@ present_send_complete_notify(WindowPtr window, CARD8 kind, CARD8 mode, CARD32 se present_event_ptr event; for (event = window_priv->events; event; event = event->next) { - if (event->mask & PresentCompleteNotifyMask && - client == event->client) { + if (event->mask & PresentCompleteNotifyMask) { cn.eid = event->id; WriteEventsToClient(event->client, 1, (xEvent *) &cn); } diff --git a/xserver/present/present_priv.h b/xserver/present/present_priv.h index 41c37af7e..dfb4bdea9 100644 --- a/xserver/present/present_priv.h +++ b/xserver/present/present_priv.h @@ -52,7 +52,6 @@ struct present_notify { struct present_vblank { struct xorg_list window_list; struct xorg_list event_queue; - ClientPtr client; ScreenPtr screen; WindowPtr window; PixmapPtr pixmap; @@ -156,7 +155,6 @@ present_get_window_priv(WindowPtr window, Bool create); int present_pixmap(WindowPtr window, PixmapPtr pixmap, - ClientPtr client, CARD32 serial, RegionPtr valid, RegionPtr update, @@ -174,7 +172,6 @@ present_pixmap(WindowPtr window, int present_notify_msc(WindowPtr window, - ClientPtr client, CARD32 serial, uint64_t target_msc, uint64_t divisor, @@ -218,7 +215,7 @@ void present_send_config_notify(WindowPtr window, int x, int y, int w, int h, int bw, WindowPtr sibling); void -present_send_complete_notify(WindowPtr window, CARD8 kind, CARD8 mode, CARD32 serial, uint64_t ust, uint64_t msc, ClientPtr client); +present_send_complete_notify(WindowPtr window, CARD8 kind, CARD8 mode, CARD32 serial, uint64_t ust, uint64_t msc); void present_send_idle_notify(WindowPtr window, CARD32 serial, PixmapPtr pixmap, present_fence_ptr idle_fence); diff --git a/xserver/present/present_request.c b/xserver/present/present_request.c index 6997aa869..c7663fcc8 100644 --- a/xserver/present/present_request.c +++ b/xserver/present/present_request.c @@ -135,7 +135,7 @@ proc_present_pixmap(ClientPtr client) return ret; } - ret = present_pixmap(window, pixmap, client, stuff->serial, valid, update, + ret = present_pixmap(window, pixmap, stuff->serial, valid, update, stuff->x_off, stuff->y_off, target_crtc, wait_fence, idle_fence, stuff->options, stuff->target_msc, stuff->divisor, stuff->remainder, notifies, nnotifies); @@ -171,7 +171,7 @@ proc_present_notify_msc(ClientPtr client) } } - return present_notify_msc(window, client, stuff->serial, + return present_notify_msc(window, stuff->serial, stuff->target_msc, stuff->divisor, stuff->remainder); } diff --git a/xserver/randr/rrscreen.c b/xserver/randr/rrscreen.c index 0c70b28dd..d059ce74a 100644 --- a/xserver/randr/rrscreen.c +++ b/xserver/randr/rrscreen.c @@ -272,7 +272,7 @@ ProcRRSetScreenSize(ClientPtr client) int source_height = mode->mode.height; Rotation rotation = crtc->rotation; - if (rotation == RR_Rotate_90 || rotation == RR_Rotate_270) { + if (rotation & (RR_Rotate_90 | RR_Rotate_270)) { source_width = mode->mode.height; source_height = mode->mode.width; } diff --git a/xserver/render/animcur.c b/xserver/render/animcur.c index 52e6b8b79..e585a8f23 100644 --- a/xserver/render/animcur.c +++ b/xserver/render/animcur.c @@ -55,6 +55,7 @@ typedef struct _AnimCurElt { typedef struct _AnimCur { int nelt; /* number of elements in the elts array */ AnimCurElt *elts; /* actually allocated right after the structure */ + OsTimerPtr timer; } AnimCurRec, *AnimCurPtr; typedef struct _AnimScrPriv { @@ -65,8 +66,6 @@ typedef struct _AnimScrPriv { RealizeCursorProcPtr RealizeCursor; UnrealizeCursorProcPtr UnrealizeCursor; RecolorCursorProcPtr RecolorCursor; - OsTimerPtr timer; - Bool timer_set; } AnimCurScreenRec, *AnimCurScreenPtr; static unsigned char empty[4]; @@ -77,12 +76,9 @@ static CursorBits animCursorBits = { static DevPrivateKeyRec AnimCurScreenPrivateKeyRec; -#define AnimCurScreenPrivateKey (&AnimCurScreenPrivateKeyRec) - #define IsAnimCur(c) ((c) && ((c)->bits == &animCursorBits)) #define GetAnimCur(c) ((AnimCurPtr) ((((char *)(c) + CURSOR_REC_SIZE)))) -#define GetAnimCurScreen(s) ((AnimCurScreenPtr)dixLookupPrivate(&(s)->devPrivates, AnimCurScreenPrivateKey)) -#define SetAnimCurScreen(s,p) dixSetPrivate(&(s)->devPrivates, AnimCurScreenPrivateKey, p) +#define GetAnimCurScreen(s) ((AnimCurScreenPtr)dixLookupPrivate(&(s)->devPrivates, &AnimCurScreenPrivateKeyRec)) #define Wrap(as,s,elt,func) (((as)->elt = (s)->elt), (s)->elt = func) #define Unwrap(as,s,elt) ((s)->elt = (as)->elt) @@ -101,9 +97,7 @@ AnimCurCloseScreen(ScreenPtr pScreen) Unwrap(as, pScreen, RealizeCursor); Unwrap(as, pScreen, UnrealizeCursor); Unwrap(as, pScreen, RecolorCursor); - SetAnimCurScreen(pScreen, 0); ret = (*pScreen->CloseScreen) (pScreen); - free(as); return ret; } @@ -135,57 +129,43 @@ AnimCurCursorLimits(DeviceIntPtr pDev, static CARD32 AnimCurTimerNotify(OsTimerPtr timer, CARD32 now, void *arg) { - ScreenPtr pScreen = arg; + DeviceIntPtr dev = arg; + ScreenPtr pScreen = dev->spriteInfo->anim.pScreen; AnimCurScreenPtr as = GetAnimCurScreen(pScreen); - DeviceIntPtr dev; - Bool activeDevice = FALSE; - CARD32 soonest = ~0; /* earliest time to wakeup again */ - - for (dev = inputInfo.devices; dev; dev = dev->next) { - if (IsPointerDevice(dev) && pScreen == dev->spriteInfo->anim.pScreen) { - if (!activeDevice) - activeDevice = TRUE; - - if ((INT32) (now - dev->spriteInfo->anim.time) >= 0) { - AnimCurPtr ac = GetAnimCur(dev->spriteInfo->anim.pCursor); - int elt = (dev->spriteInfo->anim.elt + 1) % ac->nelt; - DisplayCursorProcPtr DisplayCursor; - - /* - * Not a simple Unwrap/Wrap as this - * isn't called along the DisplayCursor - * wrapper chain. - */ - DisplayCursor = pScreen->DisplayCursor; - pScreen->DisplayCursor = as->DisplayCursor; - (void) (*pScreen->DisplayCursor) (dev, - pScreen, - ac->elts[elt].pCursor); - as->DisplayCursor = pScreen->DisplayCursor; - pScreen->DisplayCursor = DisplayCursor; - - dev->spriteInfo->anim.elt = elt; - dev->spriteInfo->anim.time = now + ac->elts[elt].delay; - } - if (soonest > dev->spriteInfo->anim.time) - soonest = dev->spriteInfo->anim.time; - } - } + AnimCurPtr ac = GetAnimCur(dev->spriteInfo->anim.pCursor); + int elt = (dev->spriteInfo->anim.elt + 1) % ac->nelt; + DisplayCursorProcPtr DisplayCursor = pScreen->DisplayCursor; - if (activeDevice) - TimerSet(as->timer, TimerAbsolute, soonest, AnimCurTimerNotify, pScreen); - else - as->timer_set = FALSE; + /* + * Not a simple Unwrap/Wrap as this isn't called along the DisplayCursor + * wrapper chain. + */ + pScreen->DisplayCursor = as->DisplayCursor; + (void) (*pScreen->DisplayCursor) (dev, pScreen, ac->elts[elt].pCursor); + as->DisplayCursor = pScreen->DisplayCursor; + pScreen->DisplayCursor = DisplayCursor; + + dev->spriteInfo->anim.elt = elt; + dev->spriteInfo->anim.time = now + ac->elts[elt].delay; - return 0; + return ac->elts[elt].delay; +} + +static void +AnimCurCancelTimer(DeviceIntPtr pDev) +{ + CursorPtr cur = pDev->spriteInfo->anim.pCursor; + + if (IsAnimCur(cur)) + TimerCancel(GetAnimCur(cur)->timer); } static Bool AnimCurDisplayCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor) { AnimCurScreenPtr as = GetAnimCurScreen(pScreen); - Bool ret; + Bool ret = TRUE; if (IsFloating(pDev)) return FALSE; @@ -195,8 +175,10 @@ AnimCurDisplayCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor) if (pCursor != pDev->spriteInfo->anim.pCursor) { AnimCurPtr ac = GetAnimCur(pCursor); - ret = (*pScreen->DisplayCursor) - (pDev, pScreen, ac->elts[0].pCursor); + AnimCurCancelTimer(pDev); + ret = (*pScreen->DisplayCursor) (pDev, pScreen, + ac->elts[0].pCursor); + if (ret) { pDev->spriteInfo->anim.elt = 0; pDev->spriteInfo->anim.time = @@ -204,17 +186,13 @@ AnimCurDisplayCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor) pDev->spriteInfo->anim.pCursor = pCursor; pDev->spriteInfo->anim.pScreen = pScreen; - if (!as->timer_set) { - TimerSet(as->timer, TimerAbsolute, pDev->spriteInfo->anim.time, - AnimCurTimerNotify, pScreen); - as->timer_set = TRUE; - } + ac->timer = TimerSet(ac->timer, 0, ac->elts[0].delay, + AnimCurTimerNotify, pDev); } } - else - ret = TRUE; } else { + AnimCurCancelTimer(pDev); pDev->spriteInfo->anim.pCursor = 0; pDev->spriteInfo->anim.pScreen = 0; ret = (*pScreen->DisplayCursor) (pDev, pScreen, pCursor); @@ -233,12 +211,6 @@ AnimCurSetCursorPosition(DeviceIntPtr pDev, Unwrap(as, pScreen, SetCursorPosition); if (pDev->spriteInfo->anim.pCursor) { pDev->spriteInfo->anim.pScreen = pScreen; - - if (!as->timer_set) { - TimerSet(as->timer, TimerAbsolute, pDev->spriteInfo->anim.time, - AnimCurTimerNotify, pScreen); - as->timer_set = TRUE; - } } ret = (*pScreen->SetCursorPosition) (pDev, pScreen, x, y, generateEvent); Wrap(as, pScreen, SetCursorPosition, AnimCurSetCursorPosition); @@ -308,18 +280,11 @@ AnimCurInit(ScreenPtr pScreen) { AnimCurScreenPtr as; - if (!dixRegisterPrivateKey(&AnimCurScreenPrivateKeyRec, PRIVATE_SCREEN, 0)) + if (!dixRegisterPrivateKey(&AnimCurScreenPrivateKeyRec, PRIVATE_SCREEN, + sizeof(AnimCurScreenRec))) return FALSE; - as = (AnimCurScreenPtr) malloc(sizeof(AnimCurScreenRec)); - if (!as) - return FALSE; - as->timer = TimerSet(NULL, TimerAbsolute, 0, AnimCurTimerNotify, pScreen); - if (!as->timer) { - free(as); - return FALSE; - } - as->timer_set = FALSE; + as = GetAnimCurScreen(pScreen); Wrap(as, pScreen, CloseScreen, AnimCurCloseScreen); @@ -329,7 +294,6 @@ AnimCurInit(ScreenPtr pScreen) Wrap(as, pScreen, RealizeCursor, AnimCurRealizeCursor); Wrap(as, pScreen, UnrealizeCursor, AnimCurUnrealizeCursor); Wrap(as, pScreen, RecolorCursor, AnimCurRecolorCursor); - SetAnimCurScreen(pScreen, as); return TRUE; } @@ -368,10 +332,14 @@ AnimCursorCreate(CursorPtr *cursors, CARD32 *deltas, int ncursor, pCursor->id = cid; + ac = GetAnimCur(pCursor); + ac->timer = TimerSet(NULL, 0, 0, AnimCurTimerNotify, NULL); + /* security creation/labeling check */ rc = XaceHook(XACE_RESOURCE_ACCESS, client, cid, RT_CURSOR, pCursor, RT_NONE, NULL, DixCreateAccess); if (rc != Success) { + TimerFree(ac->timer); dixFiniPrivates(pCursor, PRIVATE_CURSOR); free(pCursor); return rc; @@ -381,7 +349,6 @@ AnimCursorCreate(CursorPtr *cursors, CARD32 *deltas, int ncursor, * Fill in the AnimCurRec */ animCursorBits.refcnt++; - ac = GetAnimCur(pCursor); ac->nelt = ncursor; ac->elts = (AnimCurElt *) (ac + 1); |