[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