[PATCH xserver 1/3] xwayland: Decouple GBM from glamor
Lyude Paul
lyude at redhat.com
Tue Apr 24 17:29:54 UTC 2018
On Tue, 2018-04-24 at 10:35 +0100, Daniel Stone wrote:
> Hi,
>
> On 20 April 2018 at 19:38, Adam Jackson <ajax at redhat.com> wrote:
> > This takes all of the gbm related code in wayland-glamor.c and moves it
> > into it's own EGL backend for Xwayland, xwayland-glamor-gbm.c.
> > Additionally, we add the egl_backend struct into xwl_screen in order to
> > provide hooks for alternative EGL backends such as nvidia's EGLStreams.
>
> I do think the end result of this commit is better; there are a lot of
> good cleanups in here. It would be much easier to review next time
> though, if this was broken into a few separate commits. There is mass
> code motion, resequencing of functions, reordering of struct members,
> minor changes of struct declarations (e.g. void * -> EGLImage in
> xwl_pixmap), a lot of formatting changes, and other cleanups like
> moving variable declarations into child blocks. It's taken until now
> to review it because I've got four panes open with new and old code
> side by side, with quite a lot of back and forth.
>
> > +_X_EXPORT Bool
> > +glamor_get_formats(ScreenPtr screen,
> > + CARD32 *num_formats, CARD32 **formats)
> > +{
> > + struct xwl_screen *xwl_screen = xwl_screen_get(screen);
> > + struct xwl_gbm_private *xwl_gbm = xwl_gbm_get(xwl_screen);
> > + int i;
> > +
> > + if (!xwl_gbm->dmabuf_capable || !xwl_gbm->dmabuf)
> > + return FALSE;
> > +
> > + if (xwl_screen->num_formats == 0) {
> > + *num_formats = 0;
> > + return TRUE;
> > + }
>
> Changes from ac48724639e0a6a9e421b3b4e545d8506fd6bf5dost in rebase.
>
> > +_X_EXPORT Bool
> > +glamor_get_modifiers(ScreenPtr screen, CARD32 format,
> > + CARD32 *num_modifiers, uint64_t **modifiers)
> > +{
> > + struct xwl_screen *xwl_screen = xwl_screen_get(screen);
> > + struct xwl_gbm_private *xwl_gbm = xwl_gbm_get(xwl_screen);
> > + struct xwl_format *xwl_format = NULL;
> > + int i;
> > +
> > + if (!xwl_gbm->dmabuf_capable || !xwl_gbm->dmabuf)
> > + return FALSE;
> > +
> > + /* Explicitly zero the count as the caller may ignore the return
> > value */
> > + *num_modifiers = 0;
>
> Changes from b36a14c0b0e7e38406622eb5ff0666a8b8bc50f4 misplaced in rebase.
>
> > +static void
> > +xwl_drm_handle_device(void *data, struct wl_drm *drm, const char *device)
> > +{
> > + struct xwl_screen *xwl_screen = data;
> > + struct xwl_gbm_private *xwl_gbm = xwl_gbm_get(xwl_screen);
> > + drm_magic_t magic;
> > +
> > + xwl_gbm->device_name = strdup(device);
> > + if (!xwl_gbm->device_name) {
> > + xwl_glamor_gbm_cleanup(xwl_screen);
> > + return;
> > + }
> > +
> > + xwl_gbm->drm_fd = open(xwl_gbm->device_name, O_RDWR | O_CLOEXEC);
> > + if (xwl_gbm->drm_fd == -1) {
> > + ErrorF("wayland-egl: could not open %s (%s)\n",
> > + xwl_gbm->device_name, strerror(errno));
> > + xwl_glamor_gbm_cleanup(xwl_screen);
> > + return;
> > + }
> > +
> > + if (is_fd_render_node(xwl_gbm->drm_fd)) {
> > + xwl_gbm->fd_render_node = 1;
> > + xwl_screen->expecting_event--;
> > + } else {
> > + drmGetMagic(xwl_gbm->drm_fd, &magic);
> > + wl_drm_authenticate(xwl_gbm->drm, magic);
> > + }
> > +}
>
> e.g. here, the change to expecting_event is unnecessary; the previous
> code explicitly decremented and re-incremented to make it clear which
> event was which, and the change meant I had to double back and read
> through the whole init flow again. The current code is still correct,
> and I don't care enough to ask for it to be made back the way it was,
> but in future please try to keep these kinds of subtle changes
> separate from mass code motion.
Will keep that in mind for the future, thanks!
>
> The rest is:
> Reviewed-by: Daniel Stone <daniels at collabora.com>
>
> Cheers,
> Daniel
--
Cheers,
Lyude Paul
More information about the xorg-devel
mailing list