GLX_EXT_tetxure_from_pixmap operates on a GLXPixmap, which takes a reference on the backing pixmap; that GLXPixmap might be long-lived, so we should account for it in ResQueryClientPixmapBytes.
Signed-off-by: Adam Jackson <[email protected]> --- glx/glxext.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/glx/glxext.c b/glx/glxext.c index e41b881..9fcd9f5 100644 --- a/glx/glxext.c +++ b/glx/glxext.c @@ -337,6 +337,23 @@ checkScreenVisuals(void) return False; } +static void +GetGLXDrawableBytes(void *value, XID id, ResourceSizePtr size) +{ + __GLXdrawable *draw = value; + + size->resourceSize = 0; + size->pixmapRefSize = 0; + size->refCnt = 1; + + if (draw->type == GLX_DRAWABLE_PIXMAP) { + SizeType pixmapSizeFunc = GetResourceTypeSizeFunc(RT_PIXMAP); + ResourceSizeRec pixmapSize = { 0, }; + pixmapSizeFunc((PixmapPtr)draw->pDraw, draw->pDraw->id, &pixmapSize); + size->pixmapRefSize += pixmapSize.pixmapRefSize; + } +} + /* ** Initialize the GLX extension. */ @@ -366,6 +383,8 @@ GlxExtensionInit(void) if (!__glXContextRes || !__glXDrawableRes) return; + SetResourceTypeSizeFunc(__glXDrawableRes, GetGLXDrawableBytes); + if (!dixRegisterPrivateKey (&glxClientPrivateKeyRec, PRIVATE_CLIENT, sizeof(__GLXclientState))) return; -- 2.5.0 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
