glx: merge drawable release to the same function
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Signed-off-by: Qiang Yu <yuq825@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14926>
This commit is contained in:
parent
bf09c08e31
commit
4a420c50f2
|
@ -419,36 +419,37 @@ driFetchDrawable(struct glx_context *gc, GLXDrawable glxDrawable)
|
|||
return pdraw;
|
||||
}
|
||||
|
||||
static void
|
||||
releaseDrawable(const struct glx_display *priv, GLXDrawable drawable)
|
||||
{
|
||||
__GLXDRIdrawable *pdraw;
|
||||
|
||||
if (__glxHashLookup(priv->drawHash, drawable, (void *) &pdraw) == 0) {
|
||||
/* Only native window and pbuffer have same GLX and X11 drawable ID. */
|
||||
if (pdraw->drawable == pdraw->xDrawable) {
|
||||
pdraw->refcount --;
|
||||
/* If pbuffer's refcount reaches 0, it must be imported from other
|
||||
* display. Because pbuffer created from this display will always
|
||||
* hold the last refcount until destroy the GLXPbuffer object.
|
||||
*/
|
||||
if (pdraw->refcount == 0) {
|
||||
pdraw->destroyDrawable(pdraw);
|
||||
__glxHashDelete(priv->drawHash, drawable);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_X_HIDDEN void
|
||||
driReleaseDrawables(struct glx_context *gc)
|
||||
{
|
||||
const struct glx_display *priv = gc->psc->display;
|
||||
__GLXDRIdrawable *pdraw;
|
||||
|
||||
if (priv == NULL)
|
||||
return;
|
||||
|
||||
if (__glxHashLookup(priv->drawHash,
|
||||
gc->currentDrawable, (void *) &pdraw) == 0) {
|
||||
if (pdraw->drawable == pdraw->xDrawable) {
|
||||
pdraw->refcount --;
|
||||
if (pdraw->refcount == 0) {
|
||||
pdraw->destroyDrawable(pdraw);
|
||||
__glxHashDelete(priv->drawHash, gc->currentDrawable);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (__glxHashLookup(priv->drawHash,
|
||||
gc->currentReadable, (void *) &pdraw) == 0) {
|
||||
if (pdraw->drawable == pdraw->xDrawable) {
|
||||
pdraw->refcount --;
|
||||
if (pdraw->refcount == 0) {
|
||||
pdraw->destroyDrawable(pdraw);
|
||||
__glxHashDelete(priv->drawHash, gc->currentReadable);
|
||||
}
|
||||
}
|
||||
}
|
||||
releaseDrawable(priv, gc->currentDrawable);
|
||||
releaseDrawable(priv, gc->currentReadable);
|
||||
|
||||
gc->currentDrawable = None;
|
||||
gc->currentReadable = None;
|
||||
|
|
Loading…
Reference in New Issue