glx: Move vertex array protocol state into the indirect backend

Only relevant for indirect contexts, so let's get that code out of the
common path.
This commit is contained in:
Adam Jackson
2017-11-14 15:13:03 -05:00
parent b9e93db208
commit 01e437988d
2 changed files with 22 additions and 16 deletions
-12
View File
@@ -245,18 +245,6 @@ MakeContextCurrent(Display * dpy, GLXDrawable draw,
__glXUnlock();
/* The indirect vertex array state must to be initialised after we
* have setup the context, as it needs to query server attributes.
*/
if (gc && !gc->isDirect) {
__GLXattribute *state = gc->client_state_private;
if (state && state->array_state == NULL) {
glGetString(GL_EXTENSIONS);
glGetString(GL_VERSION);
__glXInitVertexArrayState(gc);
}
}
return GL_TRUE;
}
+22 -4
View File
@@ -34,7 +34,7 @@
#include "glapi.h"
#include "glxclient.h"
#include "indirect.h"
#include "util/debug.h"
#ifndef GLX_USE_APPLEGL
@@ -148,9 +148,27 @@ indirect_bind_context(struct glx_context *gc, struct glx_context *old,
sent = SendMakeCurrentRequest(dpy, gc->xid, tag, draw, read,
&gc->currentContextTag);
if (!IndirectAPI)
IndirectAPI = __glXNewIndirectAPI();
_glapi_set_dispatch(IndirectAPI);
if (sent) {
if (!IndirectAPI)
IndirectAPI = __glXNewIndirectAPI();
_glapi_set_dispatch(IndirectAPI);
/* The indirect vertex array state must to be initialised after we
* have setup the context, as it needs to query server attributes.
*
* At the point this is called gc->currentDpy is not initialized
* nor is the thread's current context actually set. Hence the
* cleverness before the GetString calls.
*/
__GLXattribute *state = gc->client_state_private;
if (state && state->array_state == NULL) {
gc->currentDpy = gc->psc->dpy;
__glXSetCurrentContext(gc);
__indirect_glGetString(GL_EXTENSIONS);
__indirect_glGetString(GL_VERSION);
__glXInitVertexArrayState(gc);
}
}
return !sent;
}