X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fglx%2Findirect_glx.c;h=4302a8ff28815cf11fb809f3cd2cfd236a970960;hb=65d3ef7cd4f3debbd51b8a8bc95b88fc32f18ded;hp=d0457fe73595ab4283fe653599d3487080fddb52;hpb=68412d5006586f8b5814d85f76985b9d632f36df;p=mesa.git diff --git a/src/glx/indirect_glx.c b/src/glx/indirect_glx.c index d0457fe7359..4302a8ff288 100644 --- a/src/glx/indirect_glx.c +++ b/src/glx/indirect_glx.c @@ -30,9 +30,15 @@ * Kristian Høgsberg (krh@bitplanet.net) */ +#include + #include "glapi.h" #include "glxclient.h" +#include "util/debug.h" + +#ifndef GLX_USE_APPLEGL + extern struct _glapi_table *__glXNewIndirectAPI(void); /* @@ -129,9 +135,9 @@ indirect_bind_context(struct glx_context *gc, struct glx_context *old, GLXDrawable draw, GLXDrawable read) { GLXContextTag tag; - __GLXattribute *state; Display *dpy = gc->psc->dpy; int opcode = __glXSetupForCommand(dpy); + Bool sent; if (old != &dummyContext && !old->isDirect && old->psc->dpy == dpy) { tag = old->currentContextTag; @@ -140,21 +146,14 @@ indirect_bind_context(struct glx_context *gc, struct glx_context *old, tag = 0; } - SendMakeCurrentRequest(dpy, opcode, gc->xid, tag, draw, read, - &gc->currentContextTag); + sent = SendMakeCurrentRequest(dpy, opcode, gc->xid, tag, draw, read, + &gc->currentContextTag); if (!IndirectAPI) IndirectAPI = __glXNewIndirectAPI(); _glapi_set_dispatch(IndirectAPI); - state = gc->client_state_private; - if (state->array_state == NULL) { - glGetString(GL_EXTENSIONS); - glGetString(GL_VERSION); - __glXInitVertexArrayState(gc); - } - - return Success; + return !sent; } static void @@ -166,7 +165,7 @@ indirect_unbind_context(struct glx_context *gc, struct glx_context *new) if (gc == new) return; - /* We are either switching to no context, away from a indirect + /* We are either switching to no context, away from an indirect * context to a direct context or from one dpy to another and have * to send a request to the dpy to unbind the previous context. */ @@ -322,15 +321,15 @@ indirect_release_tex_image(Display * dpy, GLXDrawable drawable, int buffer) } static const struct glx_context_vtable indirect_context_vtable = { - indirect_destroy_context, - indirect_bind_context, - indirect_unbind_context, - indirect_wait_gl, - indirect_wait_x, - indirect_use_x_font, - indirect_bind_tex_image, - indirect_release_tex_image, - NULL, /* get_proc_address */ + .destroy = indirect_destroy_context, + .bind = indirect_bind_context, + .unbind = indirect_unbind_context, + .wait_gl = indirect_wait_gl, + .wait_x = indirect_wait_x, + .use_x_font = indirect_use_x_font, + .bind_tex_image = indirect_bind_tex_image, + .release_tex_image = indirect_release_tex_image, + .get_proc_address = NULL, }; /** @@ -376,7 +375,7 @@ indirect_create_context(struct glx_screen *psc, return NULL; } gc->client_state_private = state; - state->NoDrawArraysProtocol = (getenv("LIBGL_NO_DRAWARRAYS") != NULL); + state->NoDrawArraysProtocol = env_var_as_boolean("LIBGL_NO_DRAWARRAYS", false); /* ** Create a temporary buffer to hold GLX rendering commands. The size @@ -466,9 +465,11 @@ indirect_create_context_attribs(struct glx_screen *base, return indirect_create_context(base, config_base, shareList, renderType); } -struct glx_screen_vtable indirect_screen_vtable = { - indirect_create_context, - indirect_create_context_attribs +static const struct glx_screen_vtable indirect_screen_vtable = { + .create_context = indirect_create_context, + .create_context_attribs = indirect_create_context_attribs, + .query_renderer_integer = NULL, + .query_renderer_string = NULL, }; _X_HIDDEN struct glx_screen * @@ -485,3 +486,5 @@ indirect_create_screen(int screen, struct glx_display * priv) return psc; } + +#endif