[Mesa-dev] [PATCH 08/23] i965: Don't pollute the buffer object namespace in brw_meta_fast_clear

Anuj Phogat anuj.phogat at gmail.com
Tue Nov 10 09:55:25 PST 2015


On Mon, Nov 9, 2015 at 4:56 PM, Ian Romanick <idr at freedesktop.org> wrote:
> From: Ian Romanick <ian.d.romanick at 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.romanick at 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 at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reviewed-by: Anuj Phogat <anuj.phogat at gmail.com>


More information about the mesa-dev mailing list