This patch fixes `make check` for me, but v2 has been pushed, so... Who gets to make a patch to fix master?
Tested-by: Mark Janes <mark.a.ja...@intel.com> Ian Romanick <i...@freedesktop.org> writes: > From: Brian Paul <bri...@vmware.com> > > Commit 4bdbb588a9d38 introduced new _glapi_new_nop_table() and > _glapi_set_nop_handler() functions in the glapi dispatcher (which > live in libGL.so). The calls to those functions from context.c > would be undefined (i.e. an ABI break) if the libGL used at runtime > was older. > > For the time being, use the old single generic_nop() function for > non-Windows builds to avoid this problem. At some point in the future > it should be safe to remove this work-around. See comments for more > details. > > v2: Incorporate feedback from Emil. Use _WIN32 instead of > GLX_DIRECT_RENDERING to control behavior, move comments. > > v3 (idr): Encapsulate the knowledge about how to build the nop table in > a new _mesa_new_nop_table function. This makes it easier for > dispatch_sanity to keep working. > > Cc: 10.6 <mesa-sta...@lists.freedesktop.org> > Reviewed-and-tested-by: Ian Romanick <ian.d.roman...@intel.com> [v2] > Signed-off-by: Ian Romanick <ian.d.roman...@intel.com> [v3] > --- > src/mesa/main/api_exec.h | 3 ++ > src/mesa/main/context.c | 64 > +++++++++++++++++++++++++++++++-- > src/mesa/main/tests/dispatch_sanity.cpp | 2 +- > 3 files changed, 65 insertions(+), 4 deletions(-) > > diff --git a/src/mesa/main/api_exec.h b/src/mesa/main/api_exec.h > index 12249fe..655cb32 100644 > --- a/src/mesa/main/api_exec.h > +++ b/src/mesa/main/api_exec.h > @@ -38,6 +38,9 @@ _mesa_initialize_exec_table(struct gl_context *ctx); > extern void > _mesa_initialize_dispatch_tables(struct gl_context *ctx); > > +extern struct _glapi_table * > +_mesa_new_nop_table(unsigned numEntries); > + > #ifdef __cplusplus > } // extern "C" > #endif > diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c > index 544cc14..e4faf3d 100644 > --- a/src/mesa/main/context.c > +++ b/src/mesa/main/context.c > @@ -883,6 +883,19 @@ update_default_objects(struct gl_context *ctx) > } > > > +/* XXX this is temporary and should be removed at some point in the > + * future when there's a reasonable expectation that the libGL library > + * contains the _glapi_new_nop_table() and _glapi_set_nop_handler() > + * functions which were added in Mesa 10.6. > + */ > +#if !defined(_WIN32) > +/* Avoid libGL / driver ABI break */ > +#define USE_GLAPI_NOP_FEATURES 0 > +#else > +#define USE_GLAPI_NOP_FEATURES 1 > +#endif > + > + > /** > * This function is called by the glapi no-op functions. For each OpenGL > * function/entrypoint there's a simple no-op function. These "no-op" > @@ -898,6 +911,7 @@ update_default_objects(struct gl_context *ctx) > * > * \param name the name of the OpenGL function > */ > +#if USE_GLAPI_NOP_FEATURES > static void > nop_handler(const char *name) > { > @@ -914,6 +928,7 @@ nop_handler(const char *name) > } > #endif > } > +#endif > > > /** > @@ -923,11 +938,51 @@ nop_handler(const char *name) > static void GLAPIENTRY > nop_glFlush(void) > { > - /* don't record an error like we do in _mesa_generic_nop() */ > + /* don't record an error like we do in nop_handler() */ > } > #endif > > > +#if !USE_GLAPI_NOP_FEATURES > +static int > +generic_nop(void) > +{ > + GET_CURRENT_CONTEXT(ctx); > + _mesa_error(ctx, GL_INVALID_OPERATION, > + "unsupported function called " > + "(unsupported extension or deprecated function?)"); > + return 0; > +} > +#endif > + > + > +/** > + * Create a new API dispatch table in which all entries point to the > + * generic_nop() function. This will not work on Windows because of > + * the __stdcall convention which requires the callee to clean up the > + * call stack. That's impossible with one generic no-op function. > + */ > +struct _glapi_table * > +_mesa_new_nop_table(unsigned numEntries) > +{ > + struct _glapi_table *table; > + > +#if !USE_GLAPI_NOP_FEATURES > + table = malloc(numEntries * sizeof(_glapi_proc)); > + if (table) { > + _glapi_proc *entry = (_glapi_proc *) table; > + unsigned i; > + for (i = 0; i < numEntries; i++) { > + entry[i] = (_glapi_proc) generic_nop; > + } > + } > +#else > + table = _glapi_new_nop_table(numEntries); > +#endif > + return table; > +} > + > + > /** > * Allocate and initialize a new dispatch table. The table will be > * populated with pointers to "no-op" functions. In turn, the no-op > @@ -941,8 +996,9 @@ alloc_dispatch_table(void) > * Mesa we do this to accommodate different versions of libGL and various > * DRI drivers. > */ > - GLint numEntries = MAX2(_glapi_get_dispatch_table_size(), > _gloffset_COUNT); > - struct _glapi_table *table = _glapi_new_nop_table(numEntries); > + int numEntries = MAX2(_glapi_get_dispatch_table_size(), _gloffset_COUNT); > + > + struct _glapi_table *table = _mesa_new_nop_table(numEntries); > > #if defined(_WIN32) > if (table) { > @@ -966,7 +1022,9 @@ alloc_dispatch_table(void) > } > #endif > > +#if USE_GLAPI_NOP_FEATURES > _glapi_set_nop_handler(nop_handler); > +#endif > > return table; > } > diff --git a/src/mesa/main/tests/dispatch_sanity.cpp > b/src/mesa/main/tests/dispatch_sanity.cpp > index d38b68d..c6f3c39 100644 > --- a/src/mesa/main/tests/dispatch_sanity.cpp > +++ b/src/mesa/main/tests/dispatch_sanity.cpp > @@ -96,7 +96,7 @@ DispatchSanity_test::SetUp() > _mesa_init_driver_functions(&driver_functions); > > const unsigned size = _glapi_get_dispatch_table_size(); > - nop_table = (_glapi_proc *) _glapi_new_nop_table(size); > + nop_table = (_glapi_proc *) _mesa_new_nop_table(size); > } > > void > -- > 2.1.0 > > _______________________________________________ > mesa-stable mailing list > mesa-sta...@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-stable _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev