On Mon, Nov 9, 2015 at 4:56 PM, Ian Romanick <i...@freedesktop.org> wrote: > From: Ian Romanick <ian.d.roman...@intel.com> > > tl;dr: For many types of GL object, we can *NEVER* use the Gen function. > > In OpenGL ES (all versions!) and OpenGL compatibility profile, > applications don't have to call Gen functions. The GL spec is very > clear about how you can mix-and-match generated names and non-generated > names: you can use any name you want for a particular object type until > you call the Gen function for that object type. > > Here's the problem scenario: > > - Application calls a meta function that generates a name. The first > Gen will probably return 1. > > - Application decides to use the same name for an object of the same > type without calling Gen. Many demo programs use names 1, 2, 3, > etc. without calling Gen. > > - Application calls the meta function again, and the meta function > replaces the data. The application's data is lost, and the app > fails. Have fun debugging that. > > Signed-off-by: Ian Romanick <ian.d.roman...@intel.com> > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92363 > --- > src/mesa/drivers/common/meta.c | 17 +++-------------- > 1 file changed, 3 insertions(+), 14 deletions(-) > > diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c > index 3507927..8249eda 100644 > --- a/src/mesa/drivers/common/meta.c > +++ b/src/mesa/drivers/common/meta.c > @@ -339,8 +339,6 @@ _mesa_meta_setup_vertex_objects(struct gl_context *ctx, > unsigned vertex_size, unsigned texcoord_size, > unsigned color_size) > { > - GLuint VBO; > - > if (*VAO == 0) { > struct gl_vertex_array_object *array_obj; > assert(*buf_obj == NULL); > @@ -353,22 +351,13 @@ _mesa_meta_setup_vertex_objects(struct gl_context *ctx, > assert(array_obj != NULL); > > /* create vertex array buffer */ > - _mesa_CreateBuffers(1, &VBO); > - *buf_obj = _mesa_lookup_bufferobj(ctx, VBO); > - > - /* _mesa_lookup_bufferobj only returns NULL if name is 0. If the > object > - * does not yet exist (i.e., hasn't been bound) it will return a dummy > - * object that you can't do anything with. _mesa_CreateBuffers also > - * makes the object exist. > - */ > - assert(*buf_obj != NULL && (*buf_obj)->Name == VBO); > - assert(*buf_obj != ctx->Array.ArrayBufferObj); > + *buf_obj = ctx->Driver.NewBufferObject(ctx, 0xDEADBEEF); > + if (*buf_obj == NULL) > + return; > > _mesa_buffer_data(ctx, *buf_obj, GL_NONE, 4 * sizeof(struct vertex), > NULL, > GL_DYNAMIC_DRAW, __func__); > > - assert((*buf_obj)->Size == 4 * sizeof(struct vertex)); > - > /* setup vertex arrays */ > if (use_generic_attributes) { > assert(color_size == 0); > -- > 2.1.0 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev
Reviewed-by: Anuj Phogat <anuj.pho...@gmail.com> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev