glx/x11: Fix glXCreateGLXPixmap for direct rendering.
authorMichel Dänzer <daenzer@vmware.com>
Sun, 30 Aug 2009 10:43:37 +0000 (12:43 +0200)
committerMichel Dänzer <michel@daenzer.net>
Sun, 30 Aug 2009 10:53:00 +0000 (12:53 +0200)
Fixes progs/xdemos/glxpixmap modified to use direct rendering.

src/glx/x11/glxcmds.c

index 820d8b98685e3d9ac4c379b326c5f475f57bbeed..3242ac771215ef6b1ae1bebc3b30f180d227d66a 100644 (file)
@@ -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;
 }