summaryrefslogtreecommitdiff
path: root/src/glx/x11/glxext.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/glx/x11/glxext.c')
-rw-r--r--src/glx/x11/glxext.c45
1 files changed, 6 insertions, 39 deletions
diff --git a/src/glx/x11/glxext.c b/src/glx/x11/glxext.c
index 372dbfca65..2f3261801a 100644
--- a/src/glx/x11/glxext.c
+++ b/src/glx/x11/glxext.c
@@ -1178,53 +1178,20 @@ static Bool SendMakeCurrentRequest(Display *dpy, CARD8 opcode,
#ifdef GLX_DIRECT_RENDERING
static __DRIdrawable *
-FetchDRIDrawable( Display *dpy, GLXDrawable drawable, GLXContext gc)
+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;
+ __GLXDRIdrawable *pdraw;
+ __GLXscreenConfigs *psc;
if (priv == NULL || priv->driDisplay == NULL)
return NULL;
- sc = &priv->screenConfigs[gc->screen];
- if (__glxHashLookup(sc->drawHash, drawable, (void *) &pdraw) == 0)
+ psc = &priv->screenConfigs[gc->screen];
+ if (__glxHashLookup(psc->drawHash, drawable, (void *) &pdraw) == 0)
return &pdraw->driDrawable;
- /* Allocate a new drawable */
- pdraw = Xmalloc(sizeof(*pdraw));
- if (!pdraw)
- return NULL;
-
- 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,
- &pdraw->driDrawable,
- hwDrawable,
- GLX_WINDOW_BIT,
- empty_attribute_list);
-
- if (!pdraw->driDrawable.private) {
- XF86DRIDestroyDrawable(dpy, sc->scr, drawable);
- Xfree(pdraw);
- return NULL;
- }
-
- if (__glxHashInsert(sc->drawHash, drawable, pdraw)) {
- (*pdraw->driDrawable.destroyDrawable)(&pdraw->driDrawable);
- XF86DRIDestroyDrawable(dpy, sc->scr, drawable);
- Xfree(pdraw);
- return NULL;
- }
+ pdraw = psc->driScreen->createDrawable(psc, drawable, gc);
return &pdraw->driDrawable;
}