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/dri/i965/brw_meta_fast_clear.c | 10 +++++----- > 1 file changed, 5 insertions(+), 5 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c > b/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c > index 7817f0b..ec810c2 100644 > --- a/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c > +++ b/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c > @@ -57,7 +57,6 @@ struct brw_fast_clear_state { > struct gl_buffer_object *buf_obj; > struct gl_vertex_array_object *array_obj; > GLuint vao; > - GLuint vbo; > GLuint shader_prog; > GLint color_location; > }; > @@ -81,10 +80,11 @@ brw_fast_clear_init(struct brw_context *brw) > memset(clear, 0, sizeof *clear); > _mesa_GenVertexArrays(1, &clear->vao); > _mesa_BindVertexArray(clear->vao); > - _mesa_CreateBuffers(1, &clear->vbo); > > - clear->buf_obj = _mesa_lookup_bufferobj(ctx, clear->vbo); > - assert(clear->buf_obj != NULL); > + clear->buf_obj = ctx->Driver.NewBufferObject(ctx, 0xDEADBEEF); > + if (clear->buf_obj == NULL) > + return false; > + > clear->array_obj = _mesa_lookup_vao(ctx, clear->vao); > assert(clear->array_obj != NULL); > > @@ -162,7 +162,7 @@ brw_meta_fast_clear_free(struct brw_context *brw) > _mesa_make_current(&brw->ctx, NULL, NULL); > > _mesa_DeleteVertexArrays(1, &clear->vao); > - _mesa_DeleteBuffers(1, &clear->vbo); > + _mesa_reference_buffer_object(&brw->ctx, &clear->buf_obj, NULL); > _mesa_DeleteProgram(clear->shader_prog); > free(clear); > > -- > 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