Mesa (master): glx/x11: Fix glXCreateGLXPixmap for direct rendering.

Michel Dänzer daenzer at kemper.freedesktop.org
Sun Aug 30 10:54:31 UTC 2009


Module: Mesa
Branch: master
Commit: cbeb31fefdb38838749ea628552d80d2dcb4e1cc
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=cbeb31fefdb38838749ea628552d80d2dcb4e1cc

Author: Michel Dänzer <daenzer at vmware.com>
Date:   Sun Aug 30 12:43:37 2009 +0200

glx/x11: Fix glXCreateGLXPixmap for direct rendering.

Fixes progs/xdemos/glxpixmap modified to use direct rendering.

---

 src/glx/x11/glxcmds.c |   28 ++++++++++++++++++++++++++++
 1 files changed, 28 insertions(+), 0 deletions(-)

diff --git a/src/glx/x11/glxcmds.c b/src/glx/x11/glxcmds.c
index 2efe191..ea55cc4 100644
--- a/src/glx/x11/glxcmds.c
+++ b/src/glx/x11/glxcmds.c
@@ -880,6 +880,34 @@ glXCreateGLXPixmap(Display * dpy, XVisualInfo * vis, Pixmap pixmap)
    req->glxpixmap = xid = XAllocID(dpy);
    UnlockDisplay(dpy);
    SyncHandle();
+
+#ifdef GLX_DIRECT_RENDERING
+   do {
+      /* FIXME: Maybe delay __DRIdrawable creation until the drawable
+       * is actually bound to a context... */
+
+      __GLXdisplayPrivate *const priv = __glXInitialize(dpy);
+      __GLXDRIdrawable *pdraw;
+      __GLXscreenConfigs *psc;
+      __GLcontextModes *modes;
+
+      psc = &priv->screenConfigs[vis->screen];
+      if (psc->driScreen == NULL)
+         break;
+      modes = _gl_context_modes_find_visual(psc->visuals, vis->visualid);
+      pdraw = psc->driScreen->createDrawable(psc, pixmap, req->glxpixmap, modes);
+      if (pdraw == NULL) {
+         fprintf(stderr, "failed to create pixmap\n");
+         break;
+      }
+
+      if (__glxHashInsert(psc->drawHash, req->glxpixmap, pdraw)) {
+         (*pdraw->destroyDrawable) (pdraw);
+         return None;           /* FIXME: Check what we're supposed to do here... */
+      }
+   } while (0);
+#endif
+
    return xid;
 }
 




More information about the mesa-commit mailing list