diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/glx/x11/glxcmds.c | 5 | ||||
| -rw-r--r-- | src/glx/x11/glxext.c | 42 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/common/dri_util.c | 18 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/common/dri_util.h | 1 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/mga/mgastate.c | 5 | 
5 files changed, 21 insertions, 50 deletions
| diff --git a/src/glx/x11/glxcmds.c b/src/glx/x11/glxcmds.c index 45ee93c5c3..229da5a584 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 2ff73685e3..dce01d5528 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;      } diff --git a/src/mesa/drivers/dri/common/dri_util.c b/src/mesa/drivers/dri/common/dri_util.c index 2b5d6f0a59..dd7068ad10 100644 --- a/src/mesa/drivers/dri/common/dri_util.c +++ b/src/mesa/drivers/dri/common/dri_util.c @@ -59,7 +59,8 @@ static int driQueryFrameTracking( void *priv,  static void *driCreateNewDrawable(__DRIscreen *screen,  				  const __GLcontextModes *modes, -                                  __DRIid draw, __DRIdrawable *pdraw, +                                  __DRIdrawable *pdraw, +				  drm_drawable_t hwDrawable,                                    int renderType, const int *attrs);  static void driDestroyDrawable(void *drawablePrivate); @@ -286,7 +287,7 @@ __driUtilUpdateDrawableInfo(__DRIdrawablePrivate *pdp)      DRM_SPINUNLOCK(&psp->pSAREA->drawable_lock, psp->drawLockID); -    if (! (*dri_interface->getDrawableInfo)(pdp->driScreenPriv->psc, pdp->draw, +    if (! (*dri_interface->getDrawableInfo)(pdp->pdraw,  			  &pdp->index, &pdp->lastStamp,  			  &pdp->x, &pdp->y, &pdp->w, &pdp->h,  			  &pdp->numClipRects, &pdp->pClipRects, @@ -435,8 +436,8 @@ static void driCopySubBuffer( void *drawablePrivate,   */  static void *driCreateNewDrawable(__DRIscreen *screen,  				  const __GLcontextModes *modes, -				  __DRIid draw,  				  __DRIdrawable *pdraw, +				  drm_drawable_t hwDrawable,  				  int renderType,  				  const int *attrs)  { @@ -456,14 +457,7 @@ static void *driCreateNewDrawable(__DRIscreen *screen,  	return NULL;      } -    /* Ensure that modes->screen and screen are the same screen? */ - -    if (!(*dri_interface->createDrawable)(screen, draw, &pdp->hHWDrawable)) { -	_mesa_free(pdp); -	return NULL; -    } - -    pdp->draw = draw; +    pdp->hHWDrawable = hwDrawable;      pdp->pdraw = pdraw;      pdp->refcount = 0;      pdp->pStamp = NULL; @@ -484,7 +478,6 @@ static void *driCreateNewDrawable(__DRIscreen *screen,      if (!(*psp->DriverAPI.CreateBuffer)(psp, pdp, modes,  					renderType == GLX_PIXMAP_BIT)) { -       (void)(*dri_interface->destroyDrawable)(screen, pdp->draw);         _mesa_free(pdp);         return NULL;      } @@ -523,7 +516,6 @@ driDestroyDrawable(void *drawablePrivate)      if (pdp) {  	psp = pdp->driScreenPriv;          (*psp->DriverAPI.DestroyBuffer)(pdp); -	(void)(*dri_interface->destroyDrawable)(psp->psc, pdp->draw);  	if (pdp->pClipRects) {  	    _mesa_free(pdp->pClipRects);  	    pdp->pClipRects = NULL; diff --git a/src/mesa/drivers/dri/common/dri_util.h b/src/mesa/drivers/dri/common/dri_util.h index cae170c5f8..cb9bb26051 100644 --- a/src/mesa/drivers/dri/common/dri_util.h +++ b/src/mesa/drivers/dri/common/dri_util.h @@ -248,7 +248,6 @@ struct __DRIdrawablePrivateRec {      /**       * X's drawable ID associated with this private drawable.       */ -    __DRIid draw;      __DRIdrawable *pdraw;      /** diff --git a/src/mesa/drivers/dri/mga/mgastate.c b/src/mesa/drivers/dri/mga/mgastate.c index c20a76f29e..88f2175cc3 100644 --- a/src/mesa/drivers/dri/mga/mgastate.c +++ b/src/mesa/drivers/dri/mga/mgastate.c @@ -778,8 +778,6 @@ void mgaUpdateRects( mgaContextPtr mmesa, GLuint buffers )  {     __DRIdrawablePrivate *const driDrawable = mmesa->driDrawable;     __DRIdrawablePrivate *const driReadable = mmesa->driReadable; -   drm_mga_sarea_t *sarea = mmesa->sarea; -     mmesa->dirty_cliprects = 0;	 @@ -790,9 +788,6 @@ void mgaUpdateRects( mgaContextPtr mmesa, GLuint buffers )     mga_set_cliprects(mmesa); -   sarea->req_drawable = driDrawable->draw; -   sarea->req_draw_buffer = mmesa->draw_buffer; -     mgaUpdateClipping( mmesa->glCtx );     mgaCalcViewport( mmesa->glCtx );  } | 
