xlib: Ensure one screen instance.
authorJosé Fonseca <jfonseca@vmware.com>
Sun, 9 Aug 2009 21:59:12 +0000 (22:59 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Sat, 29 Aug 2009 08:21:27 +0000 (09:21 +0100)
src/gallium/state_trackers/glx/xlib/xm_api.c

index 79c2230588f33332584d2f72d2dba5e44e1369b7..f4c5893427d54e42942bc9b4a53149292d3c7c0f 100644 (file)
@@ -742,7 +742,7 @@ PUBLIC
 XMesaContext XMesaCreateContext( XMesaVisual v, XMesaContext share_list )
 {
    static GLboolean firstTime = GL_TRUE;
-   struct pipe_screen *screen;
+   static struct pipe_screen *screen = NULL;
    struct pipe_context *pipe;
    XMesaContext c;
    GLcontext *mesaCtx;
@@ -750,6 +750,7 @@ XMesaContext XMesaCreateContext( XMesaVisual v, XMesaContext share_list )
 
    if (firstTime) {
       pipe_mutex_init(_xmesa_lock);
+      screen = driver.create_pipe_screen();
       firstTime = GL_FALSE;
    }
 
@@ -765,9 +766,6 @@ XMesaContext XMesaCreateContext( XMesaVisual v, XMesaContext share_list )
    c->xm_buffer = NULL;   /* set later by XMesaMakeCurrent */
    c->xm_read_buffer = NULL;
 
-   /* XXX: create once per Xlib Display.
-    */
-   screen = driver.create_pipe_screen();
    if (screen == NULL)
       goto fail;
 
@@ -801,9 +799,6 @@ XMesaContext XMesaCreateContext( XMesaVisual v, XMesaContext share_list )
    else if (pipe)
       pipe->destroy(pipe);
 
-   if (screen)
-      screen->destroy( screen );
-
    FREE(c);
    return NULL;
 }