mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 11:48:06 +02:00
dri glx: Fix dri_util::driBindContext
1) Don't error-check here. It's done in glx makeCurrent. 2) Allow ctx and the dri drawables to be NULL for future use. This is currently blocked in glx makeCurrent. 3) Avoid updating dri drawables unless they are completely uninitialized. Since the updating was done outside of the lock, the driver need to verify and redo it anyway. Signed-off-by: Thomas Hellstrom <thellstrom-at-vmware-dot-com>
This commit is contained in:
parent
c952b3e907
commit
8e753d0404
1 changed files with 14 additions and 18 deletions
|
|
@ -163,21 +163,18 @@ static int driBindContext(__DRIcontext *pcp,
|
|||
{
|
||||
__DRIscreenPrivate *psp = pcp->driScreenPriv;
|
||||
|
||||
/*
|
||||
** Assume error checking is done properly in glXMakeCurrent before
|
||||
** calling driBindContext.
|
||||
*/
|
||||
|
||||
if (pcp == NULL || pdp == None || prp == None)
|
||||
return GL_FALSE;
|
||||
|
||||
/* Bind the drawable to the context */
|
||||
pcp->driDrawablePriv = pdp;
|
||||
pcp->driReadablePriv = prp;
|
||||
pdp->driContextPriv = pcp;
|
||||
pdp->refcount++;
|
||||
if ( pdp != prp ) {
|
||||
prp->refcount++;
|
||||
|
||||
if (pcp) {
|
||||
pcp->driDrawablePriv = pdp;
|
||||
pcp->driReadablePriv = prp;
|
||||
if (pdp) {
|
||||
pdp->driContextPriv = pcp;
|
||||
pdp->refcount++;
|
||||
}
|
||||
if ( prp && pdp != prp ) {
|
||||
prp->refcount++;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -186,17 +183,16 @@ static int driBindContext(__DRIcontext *pcp,
|
|||
*/
|
||||
|
||||
if (!psp->dri2.enabled) {
|
||||
if (!pdp->pStamp || *pdp->pStamp != pdp->lastStamp) {
|
||||
if (pdp && !pdp->pStamp) {
|
||||
DRM_SPINLOCK(&psp->pSAREA->drawable_lock, psp->drawLockID);
|
||||
__driUtilUpdateDrawableInfo(pdp);
|
||||
DRM_SPINUNLOCK(&psp->pSAREA->drawable_lock, psp->drawLockID);
|
||||
}
|
||||
|
||||
if ((pdp != prp) && (!prp->pStamp || *prp->pStamp != prp->lastStamp)) {
|
||||
if (prp && pdp != prp && !prp->pStamp) {
|
||||
DRM_SPINLOCK(&psp->pSAREA->drawable_lock, psp->drawLockID);
|
||||
__driUtilUpdateDrawableInfo(prp);
|
||||
DRM_SPINUNLOCK(&psp->pSAREA->drawable_lock, psp->drawLockID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Call device-specific MakeCurrent */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue