gbm: wire up fence extension

v2: make fence extension optional to not break non-i965 classic
    drivers, and move __DRI2_FENCE into core extensions, based
    on comments from Emil

Signed-off-by: Rob Clark <robdclark@gmail.com>
This commit is contained in:
Rob Clark 2016-08-16 12:56:45 -04:00
parent 32c061b110
commit 74b1969d71
4 changed files with 6 additions and 1 deletions

View file

@ -644,6 +644,7 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp)
dri2_dpy->dri_screen = dri2_dpy->gbm_dri->screen; dri2_dpy->dri_screen = dri2_dpy->gbm_dri->screen;
dri2_dpy->core = dri2_dpy->gbm_dri->core; dri2_dpy->core = dri2_dpy->gbm_dri->core;
dri2_dpy->dri2 = dri2_dpy->gbm_dri->dri2; dri2_dpy->dri2 = dri2_dpy->gbm_dri->dri2;
dri2_dpy->fence = dri2_dpy->gbm_dri->fence;
dri2_dpy->image = dri2_dpy->gbm_dri->image; dri2_dpy->image = dri2_dpy->gbm_dri->image;
dri2_dpy->flush = dri2_dpy->gbm_dri->flush; dri2_dpy->flush = dri2_dpy->gbm_dri->flush;
dri2_dpy->swrast = dri2_dpy->gbm_dri->swrast; dri2_dpy->swrast = dri2_dpy->gbm_dri->swrast;

View file

@ -1991,6 +1991,7 @@ const __DRIextension *galliumdrm_driver_extensions[] = {
&driImageDriverExtension.base, &driImageDriverExtension.base,
&driDRI2Extension.base, &driDRI2Extension.base,
&gallium_config_options.base, &gallium_config_options.base,
&dri2FenceExtension.base,
NULL NULL
}; };

View file

@ -239,11 +239,13 @@ struct dri_extension_match {
const char *name; const char *name;
int version; int version;
int offset; int offset;
int optional;
}; };
static struct dri_extension_match dri_core_extensions[] = { static struct dri_extension_match dri_core_extensions[] = {
{ __DRI2_FLUSH, 1, offsetof(struct gbm_dri_device, flush) }, { __DRI2_FLUSH, 1, offsetof(struct gbm_dri_device, flush) },
{ __DRI_IMAGE, 1, offsetof(struct gbm_dri_device, image) }, { __DRI_IMAGE, 1, offsetof(struct gbm_dri_device, image) },
{ __DRI2_FENCE, 2, offsetof(struct gbm_dri_device, fence), 1 },
{ NULL, 0, 0 } { NULL, 0, 0 }
}; };
@ -279,7 +281,7 @@ dri_bind_extensions(struct gbm_dri_device *dri,
for (j = 0; matches[j].name; j++) { for (j = 0; matches[j].name; j++) {
field = ((char *) dri + matches[j].offset); field = ((char *) dri + matches[j].offset);
if (*(const __DRIextension **) field == NULL) { if ((*(const __DRIextension **) field == NULL) && !matches[j].optional) {
ret = -1; ret = -1;
} }
} }

View file

@ -51,6 +51,7 @@ struct gbm_dri_device {
const __DRIcoreExtension *core; const __DRIcoreExtension *core;
const __DRIdri2Extension *dri2; const __DRIdri2Extension *dri2;
const __DRI2fenceExtension *fence;
const __DRIimageExtension *image; const __DRIimageExtension *image;
const __DRIswrastExtension *swrast; const __DRIswrastExtension *swrast;
const __DRI2flushExtension *flush; const __DRI2flushExtension *flush;