egl_dri2: Lower __DRI_IMAGE version requirement back to 1
authorKristian Høgsberg <krh@bitplanet.net>
Tue, 19 Mar 2013 17:20:36 +0000 (13:20 -0400)
committerKristian Høgsberg <krh@bitplanet.net>
Tue, 19 Mar 2013 20:13:38 +0000 (16:13 -0400)
We check the extension version manually instead and verify that we have
the createImageFromFds function before enabling prime fd passing.

src/egl/drivers/dri2/egl_dri2.c
src/egl/drivers/dri2/platform_wayland.c

index a3aabf5ab516db05ba667e2eebd3aefde15d223a..06a21d758be4d906a8df1bc5a827ef1d435e33b0 100644 (file)
@@ -320,7 +320,7 @@ static struct dri2_extension_match dri2_driver_extensions[] = {
 static struct dri2_extension_match dri2_core_extensions[] = {
    { __DRI2_FLUSH, 1, offsetof(struct dri2_egl_display, flush) },
    { __DRI_TEX_BUFFER, 2, offsetof(struct dri2_egl_display, tex_buffer) },
-   { __DRI_IMAGE, 7, offsetof(struct dri2_egl_display, image) },
+   { __DRI_IMAGE, 1, offsetof(struct dri2_egl_display, image) },
    { NULL, 0, 0 }
 };
 
@@ -1573,7 +1573,9 @@ dri2_bind_wayland_display_wl(_EGLDriver *drv, _EGLDisplay *disp,
       (int(*)(void *, uint32_t)) dri2_dpy->authenticate;
 
    ret = drmGetCap(dri2_dpy->fd, DRM_CAP_PRIME, &cap);
-   if (ret == 0 && cap == (DRM_PRIME_CAP_IMPORT | DRM_PRIME_CAP_EXPORT))
+   if (ret == 0 && cap == (DRM_PRIME_CAP_IMPORT | DRM_PRIME_CAP_EXPORT) &&
+       dri2_dpy->image->base.version >= 7 &&
+       dri2_dpy->image->createImageFromFds != NULL)
       flags |= WAYLAND_DRM_PRIME;
 
    dri2_dpy->wl_server_drm =
index 740fc7d4e0ff21e2068e131260af7d7553905797..8e4b3ce683defbcdcff24bd334b973ac68e1e0e9 100644 (file)
@@ -773,6 +773,15 @@ dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay *disp)
    if (!dri2_create_screen(disp))
       goto cleanup_driver;
 
+   /* The server shouldn't advertise WL_DRM_CAPABILITY_PRIME if the driver
+    * doesn't have createImageFromFds, since we're using the same driver on
+    * both sides.  We don't want crash if that happens anyway, so fall back to
+    * gem names if we don't have prime support. */
+
+   if (dri2_dpy->image->base.version < 7 ||
+       dri2_dpy->image->createImageFromFds == NULL)
+      dri2_dpy->capabilities &= WL_DRM_CAPABILITY_PRIME;
+
    types = EGL_WINDOW_BIT;
    for (i = 0; dri2_dpy->driver_configs[i]; i++) {
       config = dri2_dpy->driver_configs[i];