summaryrefslogtreecommitdiffstats
path: root/src/glx/x11
diff options
context:
space:
mode:
authorKristian Høgsberg <[email protected]>2007-05-10 17:14:38 -0400
committerKristian Høgsberg <[email protected]>2007-10-10 17:07:26 -0400
commit4ff95e78e19e5902352ea3759d32d9f013255f42 (patch)
tree772c6e1c9b384bb2a19e929db47c872145043524 /src/glx/x11
parentb068af2f3b890bec26a186e9d0bdd3d44c17cd4d (diff)
Drop createDrawable and destroyDrawable fron DRIinterfaceMethods.
All the DRI driver did was call the createDrawable callback immediately upon entry to DRIscreen::createNewDrawable to get the drm_drawable_t. We can just call that before calling into the DRI driver and pass the returned drm_drawable_t as an argument to the DRI entry point. Likewise for destroyDrawable. Also, DRIdrawablePrivate::draw isn't used anywhere, and since the driver no longer needs the XID of the drawable we can now drop that.
Diffstat (limited to 'src/glx/x11')
-rw-r--r--src/glx/x11/glxcmds.c5
-rw-r--r--src/glx/x11/glxext.c42
2 files changed, 16 insertions, 31 deletions
diff --git a/src/glx/x11/glxcmds.c b/src/glx/x11/glxcmds.c
index 45ee93c5c3a..229da5a584e 100644
--- a/src/glx/x11/glxcmds.c
+++ b/src/glx/x11/glxcmds.c
@@ -85,7 +85,7 @@ static void GarbageCollectDRIDrawables(Display *dpy, int screen)
__GLXdisplayPrivate * const priv = __glXInitialize(dpy);
__GLXscreenConfigs *sc;
__DRIid draw;
- __DRIdrawable *pdraw;
+ __GLXdrawable *pdraw;
XWindowAttributes xwa;
int (*oldXErrorHandler)(Display *, XErrorEvent *);
@@ -105,7 +105,8 @@ static void GarbageCollectDRIDrawables(Display *dpy, int screen)
if (!windowExistsFlag) {
/* Destroy the local drawable data, if the drawable no
longer exists in the Xserver */
- (*pdraw->destroyDrawable)(pdraw->private);
+ (*pdraw->driDrawable.destroyDrawable)(pdraw->driDrawable.private);
+ XF86DRIDestroyDrawable(dpy, sc->scr, draw);
Xfree(pdraw);
}
} while (__glxHashNext(sc->drawHash, &draw, (void *)&pdraw) == 1);
diff --git a/src/glx/x11/glxext.c b/src/glx/x11/glxext.c
index 2ff73685e37..dce01d5528d 100644
--- a/src/glx/x11/glxext.c
+++ b/src/glx/x11/glxext.c
@@ -796,39 +796,19 @@ __glXDRIDestroyContext(__DRIscreen *screen, __DRIid context_id)
}
static GLboolean
-__glXDRICreateDrawable( __DRIscreen *screen,
- __DRIid drawable, drm_drawable_t *hHWDrawable )
-{
- __GLXscreenConfigs *psc =
- containerOf(screen, __GLXscreenConfigs, driScreen);
- Display *dpy = psc->dpy;
-
- return XF86DRICreateDrawable(dpy, psc->scr, drawable, hHWDrawable);
-}
-
-static GLboolean
-__glXDRIDestroyDrawable(__DRIscreen *screen, __DRIid drawable)
-{
- __GLXscreenConfigs *psc =
- containerOf(screen, __GLXscreenConfigs, driScreen);
- Display *dpy = psc->dpy;
-
- return XF86DRIDestroyDrawable(dpy, psc->scr, drawable);
-}
-
-static GLboolean
-__glXDRIGetDrawableInfo(__DRIscreen *screen, __DRIid drawable,
+__glXDRIGetDrawableInfo(__DRIdrawable *drawable,
unsigned int *index, unsigned int *stamp,
int *X, int *Y, int *W, int *H,
int *numClipRects, drm_clip_rect_t ** pClipRects,
int *backX, int *backY,
int *numBackClipRects, drm_clip_rect_t **pBackClipRects)
{
- __GLXscreenConfigs *psc =
- containerOf(screen, __GLXscreenConfigs, driScreen);
+ __GLXdrawable *glxDraw =
+ containerOf(drawable, __GLXdrawable, driDrawable);
+ __GLXscreenConfigs *psc = glxDraw->psc;
Display *dpy = psc->dpy;
- return XF86DRIGetDrawableInfo(dpy, psc->scr, drawable,
+ return XF86DRIGetDrawableInfo(dpy, psc->scr, glxDraw->drawable,
index, stamp, X, Y, W, H,
numClipRects, pClipRects,
backX, backY,
@@ -848,8 +828,6 @@ static const __DRIinterfaceMethods interface_methods = {
__glXDRICreateContext,
__glXDRIDestroyContext,
- __glXDRICreateDrawable,
- __glXDRIDestroyDrawable,
__glXDRIGetDrawableInfo,
__glXGetUST,
@@ -1667,6 +1645,7 @@ FetchDRIDrawable( Display *dpy, GLXDrawable drawable, GLXContext gc)
__GLXdisplayPrivate * const priv = __glXInitialize(dpy);
__GLXdrawable *pdraw;
__GLXscreenConfigs *sc;
+ drm_drawable_t hwDrawable;
void *empty_attribute_list = NULL;
if (priv == NULL || priv->driDisplay.private == NULL)
@@ -1684,22 +1663,27 @@ FetchDRIDrawable( Display *dpy, GLXDrawable drawable, GLXContext gc)
pdraw->drawable = drawable;
pdraw->psc = sc;
+ if (!XF86DRICreateDrawable(dpy, sc->scr, drawable, &hwDrawable))
+ return NULL;
+
/* Create a new drawable */
pdraw->driDrawable.private =
(*sc->driScreen.createNewDrawable)(&sc->driScreen,
gc->mode,
- drawable, &pdraw->driDrawable,
+ &pdraw->driDrawable,
+ hwDrawable,
GLX_WINDOW_BIT,
empty_attribute_list);
if (!pdraw->driDrawable.private) {
- /* ERROR!!! */
+ XF86DRIDestroyDrawable(dpy, sc->scr, drawable);
Xfree(pdraw);
return NULL;
}
if (__glxHashInsert(sc->drawHash, drawable, pdraw)) {
(*pdraw->driDrawable.destroyDrawable)(pdraw->driDrawable.private);
+ XF86DRIDestroyDrawable(dpy, sc->scr, drawable);
Xfree(pdraw);
return NULL;
}