Skip to content
  • Colin McDonald's avatar
    glx: Call __glXInitVertexArrayState() with a usable gc. · d57c85c1
    Colin McDonald authored and Matt Turner's avatar Matt Turner committed
    For each indirect context the indirect vertex array state must be initialised
    by __glXInitVertexArrayState in indirect_vertex_array.c.  As noted in the
    routine header it requires that the glx context has been setup prior to the
    call, in order to test the server version and extensions.
    
    Currently __glXInitVertexArrayState is called from indirect_bind_context in
    indirect_glx.c, as follows:
    
       state = gc->client_state_private;
       if (state->array_state == NULL) {
          glGetString(GL_EXTENSIONS);
          glGetString(GL_VERSION);
          __glXInitVertexArrayState(gc);
       }
    
    But, the gc context is not yet usable at this stage, so the server queries
    fail, and __glXInitVertexArrayState is called without the server version and
    extension information it needs.  This breaks multi-texturing as
    glXInitVertexArrayState doesn't get GL_MAX_TEXTURE_UNITS.  It probably also
    breaks setup of other arrays: fog, secondary colour, vertex attributes.
    
    To fix this I have moved the call to __glXInitVertexArrayState to the end of
    MakeContextCurrent in glxcurrent.c, where the glx context is usable.
    
    Fixes a regression caused by commit 4fbdde88
    
    . Fixes ARB_vertex_program
    usage in the arbvparray Mesa demo when run with indirect GLX and also
    the tex-skipped-unit piglit test when run with indirect GLX.
    
    Reviewed-by: default avatarMatt Turner <mattst88@gmail.com>
    Acked-by: default avatarIan Romanick <ian.d.romanick@intel.com>
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=61907
    d57c85c1