summaryrefslogtreecommitdiff
path: root/hw
AgeCommit message (Collapse)AuthorFilesLines
2018-08-02meson: Try to hook up BSD APM build configuration.Eric Anholt1-2/+9
I don't have a BSD to test on, but this should do the same as what autotools did. Signed-off-by: Eric Anholt <eric@anholt.net> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
2018-08-02xorg: Remove the XF86PM define.Eric Anholt3-14/+3
We already have pm_noop.c being built most of the time for the no-OS-PM case, so just switch to always using it. Signed-off-by: Eric Anholt <eric@anholt.net> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
2018-08-02meson: Remove XXX for libconfig in kdrive.Eric Anholt1-2/+0
This is already included in ephyr (the only kdrive server left) Signed-off-by: Eric Anholt <eric@anholt.net> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
2018-08-02During reset/shutdown, clean up leases in DIX instead of each driverKeith Packard3-21/+0
Instead of having every video driver loop over any pending leases to free them during CloseScreen, do this up in the DIX layer by terminating leases when a leased CRTC or Output is destroyed and (just to make sure), also terminating leases in RRCloseScreen. The latter should "never" get invoked as any lease should be associated with a resource which was destroyed. This is required as by the time the driver's CloseScreen function is invoked, we've already freed all of the DIX randr structures and no longer have any way to reference the leases Signed-off-by: Keith Packard <keithp@keithp.com> Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=106960 Cc: Thomas Hellstrom <thellstrom@vmware.com>
2018-07-25modesetting: Fix cirrus 24bpp breakageTakashi Iwai1-1/+1
The recent rewrite of modesetting driver broke the 24bpp support. As typically found on cirrus KMS, it leads to a blank screen, spewing the error like: failed to add fb -22 (EE) modeset(0): failed to set mode: Invalid argument The culript is that the wrong bpp value of the front buffer is passed to drmModeAddFB(). Fix it by replacing with the back buffer bpp, drmmode->kbpp. Signed-off-by: Takashi Iwai <tiwai@suse.de> Tested-by: Stefan Dirsch <sndirsch@suse.de> Reviewed-by: Adam Jackson <ajax@redhat.com>
2018-07-25xwayland: Enable DRI3 for glamorOlivier Fourdan1-0/+1
glamor_fds_from_pixmap() will bail out early if DRI3 is not enabled, unfortunately Xwayland's glamor code would not set it as enabled which would lead to blank pixmaps when using texture from pixmap. Make sure to mark DRI3 as enabled from glamor_egl_screen_init() in Xwayland. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107287 Fixes: c8c276c956 ("glamor: Implement PixmapFromBuffers and BuffersFromPixmap") Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
2018-07-25xwayland: rotate logical size for RRModeemersion1-1/+11
The logical size is the size of the output in the global compositor space. The mode width/height should be scaled as in the logical size, but shouldn't be transformed. Thus we need to rotate back the logical size to be able to use it as the mode width/height. This fixes issues with pointer input on transformed outputs. Signed-Off-By: Simon Ser <contact@emersion.fr> Reviewed-by: Olivier Fourdan <ofourdan@redhat.com>
2018-07-10modesetting: Fix 16 bit depth/bpp modeStefan Agner1-1/+3
When setting DefaultDepth to 16 in the Screen section, the current code requests a 32 bpp framebuffer, however the X-Server seems to assumes 16 bpp. Fixes commit 21217d02168d ("modesetting: Implement 32->24 bpp conversion in shadow update") Reviewed-by: Adam Jackson <ajax@redhat.com> Signed-off-by: Stefan Agner <stefan@agner.ch>
2018-07-03xf86-video-modesetting: Lease planes as well if using atomicKeith Packard1-1/+6
If we're using atomic modesetting, then we're also using universal planes, and so the lease we create needs to include the plane. Signed-off-by: Keith Packard <keithp@keithp.com> Reviewed-by: Daniel Stone <daniels@collabora.com>
2018-07-03xf86-video-modesetting: Don't enable UNIVERSAL_PLANES separatelyKeith Packard1-2/+1
We don't want universal_planes unless we're using atomic APIs for modesetting, and the kernel already enables universal_planes automatically when atomic is enabled. If we enable universal_planes when we're not using atomic, then we won't have selected a plane for each crtc, and this will break lease creation which requires planes for each output when universal_planes is enabled. Signed-off-by: Keith Packard <keithp@keithp.com> Reviewed-by: Daniel Stone <daniels@collabora.com>
2018-07-02xfree86: Wrap RRCrtcIsLeased and RROutputIsLeased to check for DIX structuresKeith Packard1-8/+34
Before DIX structures are allocated for crtcs and outputs, we don't want to call DIX randr code with NULL pointers. This can happen if the driver sets video modes early in server initialization, which Nouveau does in zaphod mode. Cc: thellstrom@vmware.com Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=106772 Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=106960 Reviewed-by: Adam Jackson <ajax@redhat.com> Signed-off-by: Keith Packard <keithp@keithp.com>
2018-07-02xfree86: Reset randr_crtc and randr_output early in xf86CrtcCloseScreenKeith Packard1-8/+14
The DIX crtc and output structures are freed when their resources are destroyed, which happens before CloseScreen is called. As a result, we know these pointers are invalid and referencing them during any of the remaining CloseScreen sequence will be bad. Reviewed-by: Adam Jackson <ajax@redhat.com> Signed-off-by: Keith Packard <keithp@keithp.com> Cc: thellstrom@vmware.com Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=106960
2018-06-28modesetting: Allow a DRM fd to be passed on command line with -masterfd [v2]Keith Packard5-1/+50
This lets an application open a suitable DRM device and pass the file descriptor to the mode setting driver through an X server command line option, '-masterfd'. There's a companion application, xlease, which creates a DRM master by leasing an output from another X server. That is available at git clone git://people.freedesktop.org/~keithp/xlease v2: Always print usage, but note that it can't be used if setuid/gid Suggested-by: Lyude Paul <lyude@redhat.com> Signed-off-by: Keith Packard <keithp@keithp.com> Reviewed-by: Lyude Paul <lyude@redhat.com>
2018-06-27modesetting: Fix uninitialized memory usage in drmmode_crtc_get_fb_id()Lyude Paul1-0/+2
This really sucked to find out :( Signed-off-by: Lyude Paul <lyude@redhat.com> Reviewed-by: Karol Herbst <kherbst@redhat.com>
2018-06-27glamor: Unbreak glamor_fd_from_pixmap()Lyude Paul1-0/+10
When support for allocating GBM BOs with modifiers was added, glamor_fd_from_pixmap() was changed so that it would return an error if it got a bo with modifiers set from glamor_fds_from_pixmap(). The problem is that on systems that support BOs with modifiers, glamor_fds_from_pixmap() will always return BOs with modifiers. This means that glamor_fd_from_pixmap() was broken entirely, which broke a number of other things including glamor_shareable_fd_from_pixmap(), which meant that modesetting using multiple GPUs with the modesetting DDX was also broken. Easy reproducer: - Find a laptop with DRI prime that has outputs connected to the dedicated GPU and integrated GPU - Try to enable one display on each using the modesetting DDX - Fail Since there isn't a way to ask for no modifiers from glamor_fds_from_pixmap, we create a shared _glamor_fds_from_pixmap() function used by both glamor_fds_from_pixmap() and glamor_fd_from_pixmap() that calls down to the appropriate glamor_egl_fd*_from_pixmap() function. Signed-off-by: Lyude Paul <lyude@redhat.com> Reviewed-by: Dave Airlie <airlied@redhat.com> Cc: Louis-Francis Ratté-Boulianne <lfrb@collabora.com> Fixes: c8c276c956 ("glamor: Implement PixmapFromBuffers and BuffersFromPixmap")
2018-06-26modesetting: Also disable CRTC in drmmode_output_disable()Lyude Paul1-4/+7
So, this did actually work on older kernels at one point in time, however it seems that this working was a result of some of the Linux kernel's atomic modesetting helpers not preserving the CRTC's enabled state in the right spots. This was fixed in: 846c7dfc1193 ("drm/atomic: Try to preserve the crtc enabled state in drm_atomic_remove_fb, v2") As a result, atomic commits which simply disassociate a DRM connector with it's CRTC while leaving the CRTC in an enabled state aren't enough to disable the CRTC, and result in the atomic commit failing. This currently can cause issues with MST hotplugging where X will end up failing to disable the MST outputs after they've left the system. A simple reproducer: - Start up Xorg - Connect an MST hub with displays connected to it - Remove the hub - Now there should be CRTCs stuck on the orphaned MST connectors, and X won't be able to reclaim them. Signed-off-by: Lyude Paul <lyude@redhat.com> Cc: Louis-Francis Ratté-Boulianne <lfrb@collabora.com> Reviewed-by: Dave Airlie <airlied@redhat.com>
2018-06-26modesetting: use drmmode_bo_import() for rotate_fbOlivier Fourdan1-5/+2
drmmode_shadow_allocate() still uses drmModeAddFB() which may fail if the format is not as expected, preventing from using a rotated output. Change it to use the new function drmmode_bo_import() which takes care of calling the drmModeAddFB2() API. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106715 Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Tested-by: Tomas Pelka <tpelka@redhat.com> Reviewed-by: Lyude Paul <lyude@redhat.com>
2018-06-21xwayland: mandatory EGL backend APIOlivier Fourdan2-11/+3
The API init_wl_registry() and has_wl_interfaces() are marked as being optional, but both GBM And EGLStream backends implement them so there is point in keeping those optional. Suggested-by: Emil Velikov <emil.velikov@collabora.com> Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
2018-06-21xwayland: simplify xwl_glamor_pixmap_get_wl_buffer()Olivier Fourdan6-19/+4
When retrieving the Wayland buffer from a pixmap, if the buffer already exists, the GBM backend will return that existing buffer. However, as seen with the Present issues, if the call had previously passed a wrong size, that buffer will remain at the wrong size for as long as the buffer exists, which is error prone. Considering that the width/height passed to get_wl_buffer() is always the actual pixmap drawable size, and considering that the EGLStream backend makes no use of the size either, there is really no point in passing the width/height around. Simplify the xwl_glamor_pixmap_get_wl_buffer() and EGL backends API by removing the pixmap size, and use the drawable size instead. Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
2018-06-21xwayland: EGL_IMG_context_priority required by EGLStreamOlivier Fourdan1-0/+6
xwl_glamor_eglstream_init_egl() uses "EGL_IMG_context_priority" extension, make sure it's actually available before using it. Suggested-by: Emil Velikov <emil.velikov@collabora.com> Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
2018-06-21xwayland: check for EGLStream backend explicitlyOlivier Fourdan1-3/+2
Now that we have separate backends for EGLStream and GBM, we can explicitly check for the EGLStream backend to disable present support in that case. Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
2018-06-21xwayland: refactor EGL backends for wayland registryOlivier Fourdan6-63/+148
To be able to check for availability of the Wayland interfaces required to run a given EGL backend (either GBM or EGLStream for now), we need to have each backend structures and vfuncs in place before we enter the Wayland registry dance. That basically means that we should init all backends at first, connect to the Wayland compositor and query the available interfaces and then decide which backend is available and should be used (or none if either the Wayland interfaces or the EGL extensions are not available). For this purpose, hold an egl_backend struct for each backend we are to consider prior to connect to the Wayland display so that, when we get to query the Wayland interfaces, everything is in place for each backend to handle the various Wayland interfaces. Eventually, when we need to chose which EGL backend to use for glamor, the available Wayland interfaces and EGL extensions available are all known to Xwayland. Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
2018-06-21xwayland: move EGL backend init to glamorOlivier Fourdan3-14/+21
Move EGL backends initialization to its own function in xwayland-glamor.c Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
2018-06-21xwayland: Add Wayland interfaces checkOlivier Fourdan4-8/+52
Introduces a new egl_backend function to let the EGL backend check for the presence of the required Wayland interfaces. Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
2018-06-21xwayland: move egl_backend to its own structOlivier Fourdan1-48/+51
EGL backend availability requires both EGL extensions and Wayland interfaces to be present, so we will need to consider multiple backends during initialization. As a preliminary work, move the egl_backend to its own struct so that we can have more than one backend at any given time. Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
2018-06-21xwayland: skip drm authentication with render nodeOlivier Fourdan1-0/+6
If using a render node, we can skip DRM authentication. Suggested-by: Emil Velikov <emil.velikov@collabora.com> Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
2018-06-21xwayland: GBM should fail w/out "GL_OES_EGL_image"Olivier Fourdan1-1/+3
Surely, we should fail to init GBM backend if "GL_OES_EGL_image" is missing. This seems to have been lost with commit 1545e2dba ("xwayland: Decouple GBM from glamor"). Suggested-by: Emil Velikov <emil.velikov@collabora.com> Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
2018-06-21xwayland: swap "name" and "id" in init_wl_registry()Olivier Fourdan4-6/+6
Both xwl_glamor_init_wl_registry() and the Wayland global registry handler use the interface id/name in that order, using name/id in the egl_backend vfunc makes things confusing and error prone. Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
2018-06-21xwayland: move glamor specific routinesOlivier Fourdan3-94/+89
Functions such as: xwl_glamor_egl_supports_device_probing() xwl_glamor_egl_get_devices() xwl_glamor_egl_device_has_egl_extensions() Are of no use outside of EGLStream support, move them to the relevant source file. Similarly, the other glamor functions such as: xwl_glamor_init() xwl_screen_set_drm_interface() xwl_screen_set_dmabuf_interface() xwl_glamor_pixmap_get_wl_buffer() xwl_glamor_init_wl_registry() xwl_glamor_post_damage() xwl_glamor_allow_commits() xwl_glamor_egl_make_current() Are useless without glamor support enabled, move those within a a "#ifdef XWL_HAS_GLAMOR" in xwayland.h Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
2018-06-21xwayland: make xwl_output_get_xdg_output() staticOlivier Fourdan2-2/+3
Make xwl_output_get_xdg_output() private, it doesn't need to be available elsewhere. Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Lyude Paul <lyude@redhat.com> Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
2018-06-21xwayland: do not disable glamor if EGLStream failedOlivier Fourdan1-6/+4
EGLStream requires glamor, but the opposite is not true. So if someone passes "-eglstream" with a GPU which does not support EGLStream, we could maybe still try GBM and be lucky. That allows Wayland compositors to pass "-eglstream" regardless of the actual hardware, if they want to enable EGLStream on GPU which support it. Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Lyude Paul <lyude@redhat.com> Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
2018-06-21xwayland: process Wayland events after adding screenOlivier Fourdan1-0/+4
When we're done adding a new screen, we need to process any pending Wayland events again. Hence we don't end up processing xdg_output events unexpectedly when glamor is disabled. Be that because "-shm" was passed or "-eglstream" has failed. Failing to do that could lead to a crash at startup: Xwayland: dixGetPrivateAddr: Assertion `key->initialized' failed. (EE) (EE) Backtrace: (EE) 0: Xwayland (OsSigHandler) (EE) 1: libpthread.so.0 (funlockfile) (EE) 2: libc.so.6 (gsignal) (EE) 3: libc.so.6 (abort) (EE) 4: libc.so.6 (?+0x0) (EE) 5: libc.so.6 (__assert_fail) (EE) 6: Xwayland (dixGetPrivateAddr) (EE) 7: Xwayland (_fbGetWindowPixmap) (EE) 8: Xwayland (getDrawableDamageRef) (EE) 9: Xwayland (damageRegionProcessPending) (EE) 10: Xwayland (damagePolyFillRect) (EE) 11: Xwayland (miPaintWindow) (EE) 12: Xwayland (miWindowExposures) (EE) 13: Xwayland (miHandleValidateExposures) (EE) 14: Xwayland (SetRootClip) (EE) 15: Xwayland (update_screen_size) (EE) 16: Xwayland (apply_output_change) (EE) 17: libffi.so.6 (ffi_call_unix64) (EE) 18: libffi.so.6 (ffi_call) (EE) 19: libwayland-client.so.0 (wl_log_set_handler_client) (EE) 20: libwayland-client.so.0 (_init) (EE) 21: libwayland-client.so.0 (wl_display_dispatch_queue_pending) (EE) 22: libwayland-client.so.0 (wl_display_roundtrip_queue) (EE) 23: Xwayland (InitInput) (EE) 24: Xwayland (dix_main) (EE) 25: libc.so.6 (__libc_start_main) (EE) 26: Xwayland (_start) (EE) (EE) Fatal server error: (EE) Caught signal 6 (Aborted). Server aborting (EE) Aborted (core dumped) Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Lyude Paul <lyude@redhat.com> Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
2018-06-21xwayland: "EGL_EXT_device_base" required for EGLStreamOlivier Fourdan1-0/+3
eglQueryDevicesEXT() would abort if the required extensions are not available, meaning that enabling “-eglstream” on a non-EGLStream capable hardware would lead to an abort(). Check that "EGL_EXT_device_base" extension is available and bail out early if not, so we don't abort() later in eglQueryDevicesEXT(). Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Lyude Paul <lyude@redhat.com> Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
2018-06-21xwayland: allow "-eglstream" optionOlivier Fourdan1-6/+4
The command line option "-eglstream" used to enable EGLStream support for NVidia GPU was made available only when Xwayland was built with EGLStream support enabled. Wayland compositors who spawn Xwayland have no easy way to tell whether or not Xwayland was built with EGLStream support enabled, and adding "-eglstream" command line option to Xwayland when it wasn't built with EGLStream support would prevent Xwayland from starting (“Unrecognized option” error). Make sure we support the command line option "-eglstream" regardless of EGLStream support in Xwayland. Obviously, if Xwayland was built without EGLStream support, this has no effect. Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Lyude Paul <lyude@redhat.com> Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
2018-06-18xwayland: add "tablet" into the tablet device namesPeter Hutterer1-4/+4
Changes the device name from "xwayland-stylus" to "xwayland-tablet stylus". This doesn't fully address #26 but it goes a little step into making it more human-readable. https://gitlab.freedesktop.org/wayland/wayland/issues/26 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Olivier Fourdan <ofourdan@redhat.com>
2018-06-12xfree86: Makefile shouldn't rely on superuser being named 'root'Michał Górny1-2/+2
Change the 'chown' statement in Makefile.am to use the numeric UID of superuser instead of relying on the name 'root'. Bugzilla: https://bugs.freedesktop.org/27726 Signed-off-by: Adam Jackson <ajax@redhat.com> Signed-off-by: Michał Górny <gentoo@mgorny.alt.pl> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
2018-06-11xfree86: Inline xf86{Read,Write}Mmio{8,16,32} on alphaMatt Turner5-60/+50
In commit 9db2af6f757e (xfree86: Remove xf86{Map,Unmap}VidMem) we somehow stopped exporting xf86{Read,Write}Mmio{8,16,32}. Since the function pointer indirection was intended to support dense vs sparse and sparse support is now gone, we can just make the functions static inline in compiler.h and avoid all of this. Bugzilla: https://bugs.gentoo.org/548906 Tested-by: Christopher May-Townsend <chris@maytownsend.co.uk> Reviewed-by: Adam Jackson <ajax@redhat.com> Signed-off-by: Matt Turner <mattst88@gmail.com>
2018-06-11xwayland: use pixmap size on present flipOlivier Fourdan1-4/+3
If the pixmap size does not match the present box size, flickering occurs. This can happen when the client changes its size (e.g. switching to fullscreen), and since the buffer is kept as long as the pixmap is valid, once the buffer is created, it remains at the wrong (old) size and causes continuous flickering. Use the actual pixmap's drawable size instead of the present box to create the buffer so that it's sized appropriately. Bugzilla: https://bugs.freedesktop.org/106841 Fixes: 0fb2cca193e6 "xwayland: Preliminary support for Present's new window flip mode" Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Michel Dänzer <michel.daenzer@amd.com> Reviewed-by: Roman Gilg <subdiff@gmail.com>
2018-06-08xwayland: fix typo in non-modifier fallback pathDave Airlie1-1/+1
Pointed out on irc by q66. Reviewed-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
2018-05-21modesetting: Pass O_CLOEXEC when opening a DRM deviceMichel Dänzer1-3/+3
We don't want DRM file descriptors to leak to child processes. Reviewed-by: Keith Packard <keithp@keithp.com> Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
2018-05-21xfree86: Fix O_CLOEXEC usage in lnx_platformMichel Dänzer1-1/+1
It was passing O_CLOEXEC as permission bits instead of as a flag. Signed-off-by: Michel Dänzer <michel.daenzer@amd.com> Reviewed-by: Keith Packard <keithp@keithp.com>
2018-05-14DRI2: Sync radeonsi_pci_ids.h from MesaBas Nieuwenhuizen1-0/+30
Fixes DRI2 client driver name mapping for newer AMD GPUs with the modesetting driver, allowing the DRI2 extension to initialize. Fixes using GL with the modesetting driver for me. Seems we were way behind on this one, time to look into something more scalable? Signed-off-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2018-05-14meson: don't install xorg wrapper manpages if suid-wrapper isn't being usedJon Turney1-11/+13
Reviewed-by: Adam Jackson <ajax@redhat.com> Signed-off-by: Jon Turney <jon.turney@dronecode.org.uk>
2018-05-14meson: install xwinclip and Xwinrc man pagesJon Turney2-0/+14
Omitted from a1e8dc05 Reviewed-by: Adam Jackson <ajax@redhat.com> Signed-off-by: Jon Turney <jon.turney@dronecode.org.uk>
2018-05-08modesetting: set gbm as dependency in meson buildRoman Gilg1-0/+1
Modifiers support needs gbm as a dependency. Without setting the dependency included headers are not found reliably and the build might fail if the headers are not placed in the default system include paths. Signed-off-by: Roman Gilg <subdiff@gmail.com> Reviewed-by: Adam Jackson <ajax@redhat.com>
2018-05-08xwayland: Don't create a "fake" crtc for PresentAdam Jackson2-18/+4
We probably don't want a fake crtc to be visible to clients, and we definitely don't want to generate events every time we create such a fake (which would happen as a side effect from RRCrtcCreate hitting RRTellChanged). As it happens we're not actually using that crtc for anything because xwayland doesn't store any state on the crtc object, so it suffices to use the real crtc for the screen. Signed-off-by: Adam Jackson <ajax@redhat.com> Tested-by: Roman Gilg <subdiff@gmail.com> Reviewed-by: Roman Gilg <subdiff@gmail.com>
2018-05-08xwayland: Fix a 32-bit build warning.Eric Anholt1-1/+1
Signed-off-by: Eric Anholt <eric@anholt.net> Reviewed-by: Adam Jackson <ajax@redhat.com>
2018-05-08dri3: Switch get_modifiers to using stdint.Eric Anholt1-2/+2
We were mixing stdint and CARD* types, causing compiler warnings on 32-bit. Just switch over to stdint, which is what we'd like the server to be using long term, anyway. Reviewed-by: Adam Jackson <ajax@redhat.com>
2018-05-07xwayland: persistent window struct on presentRoman Gilg3-152/+212
Instead of reusing xwl_window introduce a persistent window struct for every window, that asks for Present flips. This struct saves all relevant data and is only freed on window destroy. Signed-off-by: Roman Gilg <subdiff@gmail.com> Tested-by: Olivier Fourdan <ofourdan@redhat.com>
2018-05-07modesetting: Fix and improve ms_kernel_msc_to_crtc_msc()Mario Kleiner2-14/+54
The old 32-Bit wraparound handling didn't actually work, due to some integer casting bug, and the mapping was ill equipped to deal with input from the new true 64-bit GetCrtcSequence/QueueCrtcSequence api's introduced in Linux 4.15. For 32-Bit truncated input from pageflip events and old vblank events and old drmWaitVblank ioctl, implement new wraparound handling, which also allows to deal with wraparound in the other direction, e.g., if a 32-Bit truncated sequence value is passed in, whose true 64-Bit in-kernel hw value is within 2^30 counts of the previous processed value, but whose 32-bit truncated sequence value happens to lie just above or below a 2^32 boundary, iow. one of the two values 'sequence' vs. 'msc_prev' lies above a 2^32 border, the other one below it. The method is directly translated from Mesa's proven implementation of the INTEL_swap_events extension, where a true underlying 64-Bit wide swapbuffers count (SBC) needs to get reconstructed from a 32-Bit LSB truncated SBC transported over the X11 protocol wire. Same conditions apply, ie. successive true 64-Bit SBC values are close to each other, but don't always get received in strictly monotonically increasing order. See Mesa commit cc5ddd584d17abd422ae4d8e83805969485740d9 ("glx: Handle out-of-sequence swap completion events correctly. (v2)") for explanation. Additionally add a separate path for true 64-bit msc input originating from Linux 4.15+ drmCrtcGetSequence/QueueSequence ioctl's and corresponding 64-bit vblank events. True 64-bit msc's don't need remapping and must be passed through. As a reliability bonus, they are also used here to update the tracking values msc_prev and ms_high with perfect 64-Bit ground truth as baseline for mapping msc from pageflip completion events, because pageflip events are always 32-bit wide, even when the new kernel api's are used. Because each pageflip(-event) is always preceeded close in time (and vblank count) by a drmCrtcQueueSequence queued event or drmCrtcGetSequence query as part of DRI2 or DRI3+Present swap scheduling, we can be certain that each pageflip event will get its truncated 32-bit msc remapped reliably to the true 64-bit msc of flip completion whenever the sequence api is available, ie. on Linux 4.15 or later. Note: In principle at least the 32-bit mapping path could also be backported to earlier server branches, as this seems to be broken for at least server 1.16 to 1.19. Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com> Reviewed-by: Adam Jackson <ajax@redhat.com> Cc: Keith Packard <keithp@keithp.com> Cc: Michel Dänzer <michel.daenzer@amd.com>