Mesa (master): glx/x11: Fix glXCreateGLXPixmap for direct rendering.
Michel Dänzer
daenzer at kemper.freedesktop.org
Sun Aug 30 11:08:00 UTC 2009
Module: Mesa
Branch: master
Commit: edb117879846155632aaeb66483a3085c7a78815
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=edb117879846155632aaeb66483a3085c7a78815
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 820d8b9..3242ac7 100644
--- a/src/glx/x11/glxcmds.c
+++ b/src/glx/x11/glxcmds.c
@@ -845,6 +845,34 @@ PUBLIC GLXPixmap glXCreateGLXPixmap(Display *dpy, XVisualInfo *vis,
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