X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fglx%2Findirect_glx.c;h=bb121f85b40f3e27061365c617c38cab32d8811e;hb=fadd39442b2892821cdd4923ea511da881bfd02a;hp=f8944a740066e94497e049fc1337567eb179ace1;hpb=2eed9ff2fb5b218b7b274d2989b0dbbe5fcfedef;p=mesa.git diff --git a/src/glx/indirect_glx.c b/src/glx/indirect_glx.c index f8944a74006..bb121f85b40 100644 --- a/src/glx/indirect_glx.c +++ b/src/glx/indirect_glx.c @@ -33,6 +33,8 @@ #include "glapi.h" #include "glxclient.h" +#ifndef GLX_USE_APPLEGL + extern struct _glapi_table *__glXNewIndirectAPI(void); /* @@ -59,8 +61,9 @@ static Bool SendMakeCurrentRequest(Display * dpy, CARD8 opcode, GLXContextID gc_id, GLXContextTag gc_tag, GLXDrawable draw, GLXDrawable read, - xGLXMakeCurrentReply * reply) + GLXContextTag *out_tag) { + xGLXMakeCurrentReply reply; Bool ret; LockDisplay(dpy); @@ -112,7 +115,10 @@ SendMakeCurrentRequest(Display * dpy, CARD8 opcode, } } - ret = _XReply(dpy, (xReply *) reply, 0, False); + ret = _XReply(dpy, (xReply *) &reply, 0, False); + + if (out_tag) + *out_tag = reply.contextTag; UnlockDisplay(dpy); SyncHandle(); @@ -124,11 +130,11 @@ static int indirect_bind_context(struct glx_context *gc, struct glx_context *old, GLXDrawable draw, GLXDrawable read) { - xGLXMakeCurrentReply reply; 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; @@ -137,13 +143,13 @@ indirect_bind_context(struct glx_context *gc, struct glx_context *old, tag = 0; } - SendMakeCurrentRequest(dpy, opcode, gc->xid, tag, draw, read, &reply); + sent = SendMakeCurrentRequest(dpy, opcode, gc->xid, tag, draw, read, + &gc->currentContextTag); if (!IndirectAPI) IndirectAPI = __glXNewIndirectAPI(); _glapi_set_dispatch(IndirectAPI); - gc->currentContextTag = reply.contextTag; state = gc->client_state_private; if (state->array_state == NULL) { glGetString(GL_EXTENSIONS); @@ -151,7 +157,7 @@ indirect_bind_context(struct glx_context *gc, struct glx_context *old, __glXInitVertexArrayState(gc); } - return Success; + return !sent; } static void @@ -159,7 +165,6 @@ indirect_unbind_context(struct glx_context *gc, struct glx_context *new) { Display *dpy = gc->psc->dpy; int opcode = __glXSetupForCommand(dpy); - xGLXMakeCurrentReply reply; if (gc == new) return; @@ -170,7 +175,7 @@ indirect_unbind_context(struct glx_context *gc, struct glx_context *new) */ if (!new || new->isDirect || new->psc->dpy != dpy) { SendMakeCurrentRequest(dpy, opcode, None, - gc->currentContextTag, None, None, &reply); + gc->currentContextTag, None, None, NULL); gc->currentContextTag = 0; } } @@ -320,15 +325,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, }; /** @@ -464,9 +469,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 * @@ -483,3 +490,5 @@ indirect_create_screen(int screen, struct glx_display * priv) return psc; } + +#endif