Mesa (main): glx: merge drawable release to the same function
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Feb 22 07:35:14 UTC 2022
Module: Mesa
Branch: main
Commit: 4a420c50f298e59a595eb7a9aa6c42b0ffd4dce2
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4a420c50f298e59a595eb7a9aa6c42b0ffd4dce2
Author: Qiang Yu <yuq825 at gmail.com>
Date: Mon Feb 7 15:00:03 2022 +0800
glx: merge drawable release to the same function
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Signed-off-by: Qiang Yu <yuq825 at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14926>
---
src/glx/dri_common.c | 45 +++++++++++++++++++++++----------------------
1 file changed, 23 insertions(+), 22 deletions(-)
diff --git a/src/glx/dri_common.c b/src/glx/dri_common.c
index 502b6a10d39..fd52b0e347d 100644
--- a/src/glx/dri_common.c
+++ b/src/glx/dri_common.c
@@ -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;
More information about the mesa-commit
mailing list