The return value for glx_context->vtable->bind may be Success or GLXBadContext, but the macro value for both Success and GLXBadContext are 0, so the caller can't identify the return value between them.
Signed-off-by: Xiong Zhang <xiong.y.zh...@intel.com> --- src/glx/applegl_glx.c | 12 +++++++----- src/glx/dri2_glx.c | 25 ++++++++++++++++--------- src/glx/dri3_glx.c | 19 ++++++++++++------- src/glx/dri_glx.c | 18 +++++++++++------- src/glx/drisw_glx.c | 18 +++++++++++------- src/glx/glxclient.h | 4 ++-- src/glx/glxcurrent.c | 5 +++-- src/glx/indirect_glx.c | 6 +++--- 8 files changed, 65 insertions(+), 42 deletions(-) diff --git a/src/glx/applegl_glx.c b/src/glx/applegl_glx.c index c086e51..72e40f2 100644 --- a/src/glx/applegl_glx.c +++ b/src/glx/applegl_glx.c @@ -48,9 +48,9 @@ applegl_destroy_context(struct glx_context *gc) apple_glx_destroy_context(&gc->driContext, gc->psc->dpy); } -static int +static bool applegl_bind_context(struct glx_context *gc, struct glx_context *old, - GLXDrawable draw, GLXDrawable read) + GLXDrawable draw, GLXDrawable read, int *errorPtr) { Display *dpy = gc->psc->dpy; bool error = apple_glx_make_current_context(dpy, @@ -58,12 +58,14 @@ applegl_bind_context(struct glx_context *gc, struct glx_context *old, gc ? gc->driContext : NULL, draw); apple_glx_diagnostic("%s: error %s\n", __func__, error ? "YES" : "NO"); - if (error) - return 1; /* GLXBadContext is the same as Success (0) */ + if (error) { + *errorPtr = GLXBadContext; + return false; + } apple_glapi_set_dispatch(); - return Success; + return true; } static void diff --git a/src/glx/dri2_glx.c b/src/glx/dri2_glx.c index f980f82..c2d9fc6 100644 --- a/src/glx/dri2_glx.c +++ b/src/glx/dri2_glx.c @@ -133,7 +133,7 @@ dri2_destroy_context(struct glx_context *context) static Bool dri2_bind_context(struct glx_context *context, struct glx_context *old, - GLXDrawable draw, GLXDrawable read) + GLXDrawable draw, GLXDrawable read, int *error) { struct dri2_context *pcp = (struct dri2_context *) context; struct dri2_screen *psc = (struct dri2_screen *) pcp->base.psc; @@ -144,7 +144,8 @@ dri2_bind_context(struct glx_context *context, struct glx_context *old, if ((draw != None && read == None) || (draw == None && read != None)) { driReleaseDrawables(&pcp->base); - return GLXBadDrawable; + *error = GLXBadDrawable; + return False; } pdraw = (struct dri2_drawable *) driFetchDrawable(context, draw); @@ -154,16 +155,22 @@ dri2_bind_context(struct glx_context *context, struct glx_context *old, if (pdraw) dri_draw = pdraw->driDrawable; - else if (draw != None) - return GLXBadDrawable; + else if (draw != None) { + *error = GLXBadDrawable; + return False; + } if (pread) dri_read = pread->driDrawable; - else if (read != None) - return GLXBadDrawable; + else if (read != None) { + *error = GLXBadDrawable; + return False; + } - if (!(*psc->core->bindContext) (pcp->driContext, dri_draw, dri_read)) - return GLXBadContext; + if (!(*psc->core->bindContext) (pcp->driContext, dri_draw, dri_read)) { + *error = GLXBadContext; + return False; + } /* If the server doesn't send invalidate events, we may miss a * resize before the rendering starts. Invalidate the buffers now @@ -175,7 +182,7 @@ dri2_bind_context(struct glx_context *context, struct glx_context *old, dri2InvalidateBuffers(psc->base.dpy, pread->base.xDrawable); } - return Success; + return True; } static void diff --git a/src/glx/dri3_glx.c b/src/glx/dri3_glx.c index 4f94167..e4e93c1 100644 --- a/src/glx/dri3_glx.c +++ b/src/glx/dri3_glx.c @@ -128,7 +128,7 @@ dri3_destroy_context(struct glx_context *context) static Bool dri3_bind_context(struct glx_context *context, struct glx_context *old, - GLXDrawable draw, GLXDrawable read) + GLXDrawable draw, GLXDrawable read, int *error) { struct dri3_context *pcp = (struct dri3_context *) context; struct dri3_screen *psc = (struct dri3_screen *) pcp->base.psc; @@ -137,7 +137,8 @@ dri3_bind_context(struct glx_context *context, struct glx_context *old, if ((draw != None && read == None) || (draw == None && read != None)) { driReleaseDrawables(&pcp->base); - return GLXBadDrawable; + *error = GLXBadDrawable; + return False; } pdraw = (struct dri3_drawable *) driFetchDrawable(context, draw); @@ -145,8 +146,10 @@ dri3_bind_context(struct glx_context *context, struct glx_context *old, driReleaseDrawables(&pcp->base); - if ((pdraw == NULL && draw != None) || (pread == NULL && read != None)) - return GLXBadDrawable; + if ((pdraw == NULL && draw != None) || (pread == NULL && read != None)) { + *error = GLXBadDrawable; + return False; + } if (pdraw) dri_draw = pdraw->driDrawable; @@ -154,10 +157,12 @@ dri3_bind_context(struct glx_context *context, struct glx_context *old, if (pread) dri_read = pread->driDrawable; - if (!(*psc->core->bindContext)(pcp->driContext, dri_draw, dri_read)) - return GLXBadContext; + if (!(*psc->core->bindContext)(pcp->driContext, dri_draw, dri_read)) { + *error = GLXBadContext; + return False; + } - return Success; + return True; } static void diff --git a/src/glx/dri_glx.c b/src/glx/dri_glx.c index 5c6c737..fcf50c8 100644 --- a/src/glx/dri_glx.c +++ b/src/glx/dri_glx.c @@ -536,9 +536,9 @@ dri_destroy_context(struct glx_context * context) free(pcp); } -static int +static Bool dri_bind_context(struct glx_context *context, struct glx_context *old, - GLXDrawable draw, GLXDrawable read) + GLXDrawable draw, GLXDrawable read, int *error) { struct dri_context *pcp = (struct dri_context *) context; struct dri_screen *psc = (struct dri_screen *) pcp->base.psc; @@ -546,7 +546,8 @@ dri_bind_context(struct glx_context *context, struct glx_context *old, if ((draw != None && read == None) || (draw == None && read != None)) { driReleaseDrawables(&pcp->base); - return GLXBadDrawable; + *error = GLXBadDrawable; + return False; } pdraw = (struct dri_drawable *) driFetchDrawable(context, draw); @@ -554,14 +555,17 @@ dri_bind_context(struct glx_context *context, struct glx_context *old, driReleaseDrawables(&pcp->base); - if (pdraw == NULL || pread == NULL) - return GLXBadDrawable; + if (pdraw == NULL || pread == NULL) { + *error = GLXBadDrawable; + return False; + } if ((*psc->core->bindContext) (pcp->driContext, pdraw->driDrawable, pread->driDrawable)) - return Success; + return True; - return GLXBadContext; + *error = GLXBadContext; + return False; } static void diff --git a/src/glx/drisw_glx.c b/src/glx/drisw_glx.c index aa74840..743da25 100644 --- a/src/glx/drisw_glx.c +++ b/src/glx/drisw_glx.c @@ -234,9 +234,9 @@ drisw_destroy_context(struct glx_context *context) free(pcp); } -static int +static Bool drisw_bind_context(struct glx_context *context, struct glx_context *old, - GLXDrawable draw, GLXDrawable read) + GLXDrawable draw, GLXDrawable read, int *error) { struct drisw_context *pcp = (struct drisw_context *) context; struct drisw_screen *psc = (struct drisw_screen *) pcp->base.psc; @@ -244,7 +244,8 @@ drisw_bind_context(struct glx_context *context, struct glx_context *old, if ((draw != None && read == None) || (draw == None && read != None)) { driReleaseDrawables(&pcp->base); - return GLXBadDrawable; + *error = GLXBadDrawable; + return False; } pdraw = (struct drisw_drawable *) driFetchDrawable(context, draw); @@ -252,14 +253,17 @@ drisw_bind_context(struct glx_context *context, struct glx_context *old, driReleaseDrawables(&pcp->base); - if (pdraw == NULL || pread == NULL) - return GLXBadDrawable; + if (pdraw == NULL || pread == NULL) { + *error = GLXBadDrawable; + return False; + } if ((*psc->core->bindContext) (pcp->driContext, pdraw->driDrawable, pread->driDrawable)) - return Success; + return True; - return GLXBadContext; + *error = GLXBadContext; + return False; } static void diff --git a/src/glx/glxclient.h b/src/glx/glxclient.h index 2776b44..93da97f 100644 --- a/src/glx/glxclient.h +++ b/src/glx/glxclient.h @@ -210,8 +210,8 @@ typedef struct __GLXattributeMachineRec struct glx_context_vtable { void (*destroy)(struct glx_context *ctx); - int (*bind)(struct glx_context *context, struct glx_context *old, - GLXDrawable draw, GLXDrawable read); + Bool (*bind)(struct glx_context *context, struct glx_context *old, + GLXDrawable draw, GLXDrawable read, int *error); void (*unbind)(struct glx_context *context, struct glx_context *new_ctx); void (*wait_gl)(struct glx_context *ctx); void (*wait_x)(struct glx_context *ctx); diff --git a/src/glx/glxcurrent.c b/src/glx/glxcurrent.c index 7f47a42..67650b6 100644 --- a/src/glx/glxcurrent.c +++ b/src/glx/glxcurrent.c @@ -191,6 +191,7 @@ MakeContextCurrent(Display * dpy, GLXDrawable draw, { struct glx_context *gc = (struct glx_context *) gc_user; struct glx_context *oldGC = __glXGetCurrentContext(); + int errorCode; /* Make sure that the new context has a nonzero ID. In the request, * a zero context ID is used only to mean that we bind to no current @@ -225,10 +226,10 @@ MakeContextCurrent(Display * dpy, GLXDrawable draw, * blown away our old context. The caller is responsible for * figuring out how to handle setting a valid context. */ - if (gc->vtable->bind(gc, oldGC, draw, read) != Success) { + if (!gc->vtable->bind(gc, oldGC, draw, read, &errorCode)) { __glXSetCurrentContextNull(); __glXUnlock(); - __glXGenerateError(dpy, None, GLXBadContext, X_GLXMakeContextCurrent); + __glXGenerateError(dpy, None, errorCode, X_GLXMakeContextCurrent); return GL_FALSE; } diff --git a/src/glx/indirect_glx.c b/src/glx/indirect_glx.c index bb121f8..af07039 100644 --- a/src/glx/indirect_glx.c +++ b/src/glx/indirect_glx.c @@ -126,9 +126,9 @@ SendMakeCurrentRequest(Display * dpy, CARD8 opcode, return ret; } -static int +static Bool indirect_bind_context(struct glx_context *gc, struct glx_context *old, - GLXDrawable draw, GLXDrawable read) + GLXDrawable draw, GLXDrawable read, int *error) { GLXContextTag tag; __GLXattribute *state; @@ -157,7 +157,7 @@ indirect_bind_context(struct glx_context *gc, struct glx_context *old, __glXInitVertexArrayState(gc); } - return !sent; + return sent; } static void -- 2.1.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev