This is good, though some older distros only have libxcb 1.11. Marek
On Sun, Mar 11, 2018 at 7:26 PM, Dave Airlie <[email protected]> wrote: > From: Dave Airlie <[email protected]> > > I'm not sure everyone wants to be updating their dri3 in a forced > march setting, this allows a nicer approach, esp when you want > to build on distro that aren't brand new. > > I'm sure there are plenty of ways this patch could be cleaner, > and I've also not built it against an updated dri3. > --- > configure.ac | 4 ++-- > src/egl/drivers/dri2/platform_x11_dri3.c | 4 ++++ > src/loader/loader_dri3_helper.c | 22 ++++++++++++++++------ > src/loader/loader_dri3_helper.h | 3 ++- > 4 files changed, 24 insertions(+), 9 deletions(-) > > diff --git a/configure.ac b/configure.ac > index 1553ce9..6a1f139 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -92,9 +92,9 @@ WAYLAND_REQUIRED=1.11 > WAYLAND_PROTOCOLS_REQUIRED=1.8 > XCB_REQUIRED=1.9.3 > XCBDRI2_REQUIRED=1.8 > -XCBDRI3_REQUIRED=1.13 > +XCBDRI3_REQUIRED=1.12 > XCBGLX_REQUIRED=1.8.1 > -XCBPRESENT_REQUIRED=1.13 > +XCBPRESENT_REQUIRED=1.12 > XDAMAGE_REQUIRED=1.1 > XSHMFENCE_REQUIRED=1.1 > XVMC_REQUIRED=1.0.6 > diff --git a/src/egl/drivers/dri2/platform_x11_dri3.c > b/src/egl/drivers/dri2/platform_x11_dri3.c > index dce3356..efe030a 100644 > --- a/src/egl/drivers/dri2/platform_x11_dri3.c > +++ b/src/egl/drivers/dri2/platform_x11_dri3.c > @@ -327,6 +327,7 @@ dri3_create_image_khr_pixmap_from_buffers(_EGLDisplay > *disp, _EGLContext *ctx, > EGLClientBuffer buffer, > const EGLint *attr_list) > { > +#if XCB_DRI3_MAJOR_VERSION == 1 && XCB_DRI3_MINOR_VERSION > 0 > struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); > struct dri2_egl_image *dri2_img; > xcb_dri3_buffers_from_pixmap_cookie_t bp_cookie; > @@ -376,6 +377,9 @@ dri3_create_image_khr_pixmap_from_buffers(_EGLDisplay > *disp, _EGLContext *ctx, > } > > return &dri2_img->base; > +#else > + return NULL; > +#endif > } > > static _EGLImage * > diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c > index 585f7ce..624ef1b 100644 > --- a/src/loader/loader_dri3_helper.c > +++ b/src/loader/loader_dri3_helper.c > @@ -389,6 +389,7 @@ dri3_handle_present_event(struct loader_dri3_drawable > *draw, > /* If the server tells us that our allocation is suboptimal, we > * reallocate once. > */ > +#ifdef XCB_PRESENT_COMPLETE_MODE_SUBOPTIMAL_COPY > if (ce->mode == XCB_PRESENT_COMPLETE_MODE_SUBOPTIMAL_COPY && > draw->last_present_mode != ce->mode) { > for (int b = 0; b < ARRAY_SIZE(draw->buffers); b++) { > @@ -396,7 +397,7 @@ dri3_handle_present_event(struct loader_dri3_drawable > *draw, > draw->buffers[b]->reallocate = true; > } > } > - > +#endif > draw->last_present_mode = ce->mode; > > if (draw->vtable->show_fps) > @@ -903,10 +904,10 @@ loader_dri3_swap_buffers_msc(struct > loader_dri3_drawable *draw, > */ > if (!loader_dri3_have_image_blit(draw) && draw->cur_blit_source != -1) > options |= XCB_PRESENT_OPTION_COPY; > - > +#ifdef XCB_PRESENT_OPTION_SUBOPTIMAL > if (draw->multiplanes_available) > options |= XCB_PRESENT_OPTION_SUBOPTIMAL; > - > +#endif > back->busy = 1; > back->last_swap = draw->send_sbc; > xcb_present_pixmap(draw->conn, > @@ -1053,6 +1054,7 @@ image_format_to_fourcc(int format) > return 0; > } > > +#if XCB_DRI3_MAJOR_VERSION == 1 && XCB_DRI3_MINOR_VERSION > 0 > static bool > has_supported_modifier(struct loader_dri3_drawable *draw, unsigned int > format, > uint64_t *modifiers, uint32_t count) > @@ -1087,6 +1089,7 @@ has_supported_modifier(struct loader_dri3_drawable > *draw, unsigned int format, > free(supported_modifiers); > return found; > } > +#endif > > /** loader_dri3_alloc_render_buffer > * > @@ -1132,6 +1135,7 @@ dri3_alloc_render_buffer(struct loader_dri3_drawable > *draw, unsigned int format, > goto no_image; > > if (!draw->is_different_gpu) { > +#if XCB_DRI3_MAJOR_VERSION == 1 && XCB_DRI3_MINOR_VERSION > 0 > if (draw->multiplanes_available && > draw->ext->image->base.version >= 15 && > draw->ext->image->queryDmaBufModifiers && > @@ -1195,7 +1199,7 @@ dri3_alloc_render_buffer(struct loader_dri3_drawable > *draw, unsigned int format, > buffer); > free(modifiers); > } > - > +#endif > if (!buffer->image) > buffer->image = draw->ext->image->createImage(draw->dri_screen, > width, height, > @@ -1272,6 +1276,7 @@ dri3_alloc_render_buffer(struct loader_dri3_drawable > *draw, unsigned int format, > pixmap = xcb_generate_id(draw->conn); > if (draw->multiplanes_available && > buffer->modifier != DRM_FORMAT_MOD_INVALID) { > + #if XCB_DRI3_MAJOR_VERSION == 1 && XCB_DRI3_MINOR_VERSION > 0 > xcb_dri3_pixmap_from_buffers(draw->conn, > pixmap, > draw->drawable, > @@ -1284,6 +1289,7 @@ dri3_alloc_render_buffer(struct loader_dri3_drawable > *draw, unsigned int format, > depth, buffer->cpp * 8, > buffer->modifier, > buffer_fds); > +#endif > } else { > xcb_dri3_pixmap_from_buffer(draw->conn, > pixmap, > @@ -1473,6 +1479,7 @@ loader_dri3_create_image(xcb_connection_t *c, > return ret; > } > > +#if XCB_DRI3_MAJOR_VERSION == 1 && XCB_DRI3_MINOR_VERSION > 0 > __DRIimage * > loader_dri3_create_image_from_buffers(xcb_connection_t *c, > xcb_dri3_buffers_from_pixmap_reply_t > *bp_reply, > @@ -1514,6 +1521,7 @@ loader_dri3_create_image_from_buffers(xcb_connection_t > *c, > > return ret; > } > +#endif > > /** dri3_get_pixmap_buffer > * > @@ -1567,7 +1575,7 @@ dri3_get_pixmap_buffer(__DRIdrawable *driDrawable, > unsigned int format, > (sync_fence = xcb_generate_id(draw->conn)), > false, > fence_fd); > - > +#if XCB_DRI3_MAJOR_VERSION == 1 && XCB_DRI3_MINOR_VERSION > 0 > if (draw->multiplanes_available && > draw->ext->image->base.version >= 15 && > draw->ext->image->createImageFromDmaBufs2) { > @@ -1586,7 +1594,9 @@ dri3_get_pixmap_buffer(__DRIdrawable *driDrawable, > unsigned int format, > width = bps_reply->width; > height = bps_reply->height; > free(bps_reply); > - } else { > + } else > +#endif > + { > xcb_dri3_buffer_from_pixmap_cookie_t bp_cookie; > xcb_dri3_buffer_from_pixmap_reply_t *bp_reply; > > diff --git a/src/loader/loader_dri3_helper.h b/src/loader/loader_dri3_helper.h > index de22c19..46f3d09 100644 > --- a/src/loader/loader_dri3_helper.h > +++ b/src/loader/loader_dri3_helper.h > @@ -243,6 +243,7 @@ loader_dri3_create_image(xcb_connection_t *c, > const __DRIimageExtension *image, > void *loaderPrivate); > > +#if XCB_DRI3_MAJOR_VERSION == 1 && XCB_DRI3_MINOR_VERSION > 0 > __DRIimage * > loader_dri3_create_image_from_buffers(xcb_connection_t *c, > xcb_dri3_buffers_from_pixmap_reply_t > *bp_reply, > @@ -250,7 +251,7 @@ loader_dri3_create_image_from_buffers(xcb_connection_t *c, > __DRIscreen *dri_screen, > const __DRIimageExtension *image, > void *loaderPrivate); > - > +#endif > int > loader_dri3_get_buffers(__DRIdrawable *driDrawable, > unsigned int format, > -- > 2.9.5 > > _______________________________________________ > mesa-dev mailing list > [email protected] > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
