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 }
};
(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 =
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];