int driPatch;
int swapAvailable;
int invalidateAvailable;
+
+ const __DRIextension *loader_extensions[4];
};
struct __GLXDRIcontextPrivateRec
NULL,
};
-static const __DRIextension *loader_extensions[] = {
- &dri2LoaderExtension.base,
- &systemTimeExtension.base,
- NULL
-};
-
-static const __DRIextension *loader_extensions_old[] = {
- &dri2LoaderExtension_old.base,
- &systemTimeExtension.base,
- NULL
+#ifdef __DRI_USE_INVALIDATE
+static const __DRIuseInvalidateExtension dri2UseInvalidate = {
+ { __DRI_USE_INVALIDATE, __DRI_USE_INVALIDATE_VERSION }
};
+#endif
_X_HIDDEN void
dri2InvalidateBuffers(Display *dpy, XID drawable)
goto handle_error;
}
+
/* If the server does not support the protocol for
* DRI2GetBuffersWithFormat, don't supply that interface to the driver.
*/
psc->__driScreen =
- psc->dri2->createNewScreen(screen, psc->fd, ((pdp->driMinor < 1)
- ? loader_extensions_old
- : loader_extensions),
+ psc->dri2->createNewScreen(screen, psc->fd,
+ (const __DRIextension **)
+ &pdp->loader_extensions[0],
&driver_configs, psc);
if (psc->__driScreen == NULL) {
dri2CreateDisplay(Display * dpy)
{
__GLXDRIdisplayPrivate *pdp;
- int eventBase, errorBase;
+ int eventBase, errorBase, i;
if (!DRI2QueryExtension(dpy, &eventBase, &errorBase))
return NULL;
pdp->base.destroyDisplay = dri2DestroyDisplay;
pdp->base.createScreen = dri2CreateScreen;
+ i = 0;
+ if (pdp->driMinor < 1)
+ pdp->loader_extensions[i++] = &dri2LoaderExtension_old.base;
+ else
+ pdp->loader_extensions[i++] = &dri2LoaderExtension.base;
+
+ pdp->loader_extensions[i++] = &systemTimeExtension.base;
+
+#ifdef __DRI_USE_INVALIDATE
+ if (pdp->invalidateAvailable)
+ pdp->loader_extensions[i++] = &dri2UseInvalidate.base;
+ pdp->loader_extensions[i++] = NULL;
+#endif
+
return &pdp->base;
}