Track the currently bound read drawable and make sure its info is up
to date.
This commit is contained in:
@@ -323,6 +323,7 @@ static GLboolean DoBindContext(__DRInativeDisplay *dpy,
|
|||||||
|
|
||||||
/* Bind the drawable to the context */
|
/* Bind the drawable to the context */
|
||||||
pcp->driDrawablePriv = pdp;
|
pcp->driDrawablePriv = pdp;
|
||||||
|
pcp->driReadablePriv = prp;
|
||||||
pdp->driContextPriv = pcp;
|
pdp->driContextPriv = pcp;
|
||||||
pdp->refcount++;
|
pdp->refcount++;
|
||||||
if ( pdp != prp ) {
|
if ( pdp != prp ) {
|
||||||
@@ -339,6 +340,12 @@ static GLboolean DoBindContext(__DRInativeDisplay *dpy,
|
|||||||
DRM_SPINUNLOCK(&psp->pSAREA->drawable_lock, psp->drawLockID);
|
DRM_SPINUNLOCK(&psp->pSAREA->drawable_lock, psp->drawLockID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((pdp != prp) && (!pdp->pStamp || *pdp->pStamp != pdp->lastStamp)) {
|
||||||
|
DRM_SPINLOCK(&psp->pSAREA->drawable_lock, psp->drawLockID);
|
||||||
|
__driUtilUpdateDrawableInfo(prp);
|
||||||
|
DRM_SPINUNLOCK(&psp->pSAREA->drawable_lock, psp->drawLockID);
|
||||||
|
}
|
||||||
|
|
||||||
/* Call device-specific MakeCurrent */
|
/* Call device-specific MakeCurrent */
|
||||||
(*psp->DriverAPI.MakeCurrent)(pcp, pdp, prp);
|
(*psp->DriverAPI.MakeCurrent)(pcp, pdp, prp);
|
||||||
|
|
||||||
@@ -402,7 +409,8 @@ __driUtilUpdateDrawableInfo(__DRIdrawablePrivate *pdp)
|
|||||||
__DRIscreenPrivate *psp;
|
__DRIscreenPrivate *psp;
|
||||||
__DRIcontextPrivate *pcp = pdp->driContextPriv;
|
__DRIcontextPrivate *pcp = pdp->driContextPriv;
|
||||||
|
|
||||||
if (!pcp || (pdp != pcp->driDrawablePriv)) {
|
if (!pcp
|
||||||
|
|| ((pdp != pcp->driDrawablePriv) && (pdp != pcp->driReadablePriv))) {
|
||||||
/* ERROR!!! */
|
/* ERROR!!! */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@@ -355,10 +355,15 @@ struct __DRIcontextPrivateRec {
|
|||||||
__DRInativeDisplay *display;
|
__DRInativeDisplay *display;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pointer to drawable currently bound to this context.
|
* Pointer to drawable currently bound to this context for drawing.
|
||||||
*/
|
*/
|
||||||
__DRIdrawablePrivate *driDrawablePriv;
|
__DRIdrawablePrivate *driDrawablePriv;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pointer to drawable currently bound to this context for reading.
|
||||||
|
*/
|
||||||
|
__DRIdrawablePrivate *driReadablePriv;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pointer to screen on which this context was created.
|
* Pointer to screen on which this context was created.
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user