summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRob Clark <[email protected]>2016-08-16 12:56:45 -0400
committerRob Clark <[email protected]>2016-09-07 11:54:00 -0400
commit74b1969d717f2428f0b9dcaaea611e95736120a5 (patch)
treeb5815ff5afd5e93fce473dc5835706ce6634e6ed
parent32c061b110f6c4b6d6c7b1278d4e308e296c3a2a (diff)
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 <[email protected]>
-rw-r--r--src/egl/drivers/dri2/platform_drm.c1
-rw-r--r--src/gallium/state_trackers/dri/dri2.c1
-rw-r--r--src/gbm/backends/dri/gbm_dri.c4
-rw-r--r--src/gbm/backends/dri/gbm_driint.h1
4 files changed, 6 insertions, 1 deletions
diff --git a/src/egl/drivers/dri2/platform_drm.c b/src/egl/drivers/dri2/platform_drm.c
index e678db8991e..47add125060 100644
--- a/src/egl/drivers/dri2/platform_drm.c
+++ b/src/egl/drivers/dri2/platform_drm.c
@@ -644,6 +644,7 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp)
dri2_dpy->dri_screen = dri2_dpy->gbm_dri->screen;
dri2_dpy->core = dri2_dpy->gbm_dri->core;
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->flush = dri2_dpy->gbm_dri->flush;
dri2_dpy->swrast = dri2_dpy->gbm_dri->swrast;
diff --git a/src/gallium/state_trackers/dri/dri2.c b/src/gallium/state_trackers/dri/dri2.c
index f391c77b657..43a5df11d0a 100644
--- a/src/gallium/state_trackers/dri/dri2.c
+++ b/src/gallium/state_trackers/dri/dri2.c
@@ -1991,6 +1991,7 @@ const __DRIextension *galliumdrm_driver_extensions[] = {
&driImageDriverExtension.base,
&driDRI2Extension.base,
&gallium_config_options.base,
+ &dri2FenceExtension.base,
NULL
};
diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c
index 9c3a51b2b9d..c1f9d62d366 100644
--- a/src/gbm/backends/dri/gbm_dri.c
+++ b/src/gbm/backends/dri/gbm_dri.c
@@ -239,11 +239,13 @@ struct dri_extension_match {
const char *name;
int version;
int offset;
+ int optional;
};
static struct dri_extension_match dri_core_extensions[] = {
{ __DRI2_FLUSH, 1, offsetof(struct gbm_dri_device, flush) },
{ __DRI_IMAGE, 1, offsetof(struct gbm_dri_device, image) },
+ { __DRI2_FENCE, 2, offsetof(struct gbm_dri_device, fence), 1 },
{ NULL, 0, 0 }
};
@@ -279,7 +281,7 @@ dri_bind_extensions(struct gbm_dri_device *dri,
for (j = 0; matches[j].name; j++) {
field = ((char *) dri + matches[j].offset);
- if (*(const __DRIextension **) field == NULL) {
+ if ((*(const __DRIextension **) field == NULL) && !matches[j].optional) {
ret = -1;
}
}
diff --git a/src/gbm/backends/dri/gbm_driint.h b/src/gbm/backends/dri/gbm_driint.h
index 46bb5c15619..9c550074847 100644
--- a/src/gbm/backends/dri/gbm_driint.h
+++ b/src/gbm/backends/dri/gbm_driint.h
@@ -51,6 +51,7 @@ struct gbm_dri_device {
const __DRIcoreExtension *core;
const __DRIdri2Extension *dri2;
+ const __DRI2fenceExtension *fence;
const __DRIimageExtension *image;
const __DRIswrastExtension *swrast;
const __DRI2flushExtension *flush;