diff options
-rw-r--r-- | src/gallium/auxiliary/util/u_upload_mgr.c | 8 | ||||
-rw-r--r-- | src/glx/x11/glxcmds.c | 28 |
2 files changed, 34 insertions, 2 deletions
diff --git a/src/gallium/auxiliary/util/u_upload_mgr.c b/src/gallium/auxiliary/util/u_upload_mgr.c index c90425f3e54..eb635c9f149 100644 --- a/src/gallium/auxiliary/util/u_upload_mgr.c +++ b/src/gallium/auxiliary/util/u_upload_mgr.c @@ -123,21 +123,25 @@ static enum pipe_error u_upload_alloc_buffer( struct u_upload_mgr *upload, unsigned min_size ) { + unsigned size; + /* Release old buffer, if present: */ u_upload_flush( upload ); /* Allocate a new one: */ - upload->size = align(MAX2(upload->default_size, min_size), 4096); + size = align(MAX2(upload->default_size, min_size), 4096); upload->buffer = pipe_buffer_create( upload->screen, upload->alignment, upload->usage | PIPE_BUFFER_USAGE_CPU_WRITE, - upload->size ); + size ); if (upload->buffer == NULL) goto fail; + upload->size = size; + upload->offset = 0; return 0; diff --git a/src/glx/x11/glxcmds.c b/src/glx/x11/glxcmds.c index 2efe1919820..ea55cc49efe 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; } |