From e62799bd4e7b7525995e465a4bdcf6df0b0a69a0 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Mon, 2 Nov 2015 14:49:03 -0800 Subject: [PATCH] i965: Use internal functions for buffer object access Instead of going through the GL API implementation functions, use the lower-level functions. This means that we have to keep track of a pointer to the gl_buffer_object and the gl_vertex_array_object. This has two advantages. First, it avoids a bunch of CPU overhead in looking up objects and validing API parameters. Second, and much more importantly, it will allow us to stop calling _mesa_GenBuffers / _mesa_CreateBuffers and pollute the buffer namespace (next patch). Signed-off-by: Ian Romanick Reviewed-by: Abdiel Janulgue Reviewed-by: Anuj Phogat --- .../drivers/dri/i965/brw_meta_fast_clear.c | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 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 34baf771d71..1b5479d0315 100644 --- a/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c +++ b/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c @@ -54,6 +54,8 @@ #include "brw_blorp.h" 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; @@ -64,6 +66,7 @@ static bool brw_fast_clear_init(struct brw_context *brw) { struct brw_fast_clear_state *clear; + struct gl_context *ctx = &brw->ctx; if (brw->fast_clear_state) { clear = brw->fast_clear_state; @@ -79,10 +82,19 @@ brw_fast_clear_init(struct brw_context *brw) _mesa_GenVertexArrays(1, &clear->vao); _mesa_BindVertexArray(clear->vao); _mesa_CreateBuffers(1, &clear->vbo); - _mesa_VertexArrayAttribFormat(clear->vao, 0, 2, GL_FLOAT, GL_FALSE, 0); - _mesa_VertexArrayVertexBuffer(clear->vao, 0, clear->vbo, 0, - sizeof(float) * 2); - _mesa_EnableVertexAttribArray(0); + + clear->buf_obj = _mesa_lookup_bufferobj(ctx, clear->vbo); + assert(clear->buf_obj != NULL); + clear->array_obj = _mesa_lookup_vao(ctx, clear->vao); + assert(clear->array_obj != NULL); + + _mesa_update_array_format(ctx, clear->array_obj, VERT_ATTRIB_GENERIC(0), + 2, GL_FLOAT, GL_RGBA, GL_FALSE, GL_FALSE, GL_FALSE, + 0, true); + _mesa_bind_vertex_buffer(ctx, clear->array_obj, VERT_ATTRIB_GENERIC(0), + clear->buf_obj, 0, sizeof(float) * 2); + _mesa_enable_vertex_array_attrib(ctx, clear->array_obj, + VERT_ATTRIB_GENERIC(0)); return true; } @@ -181,8 +193,8 @@ brw_draw_rectlist(struct brw_context *brw, struct rect *rect, int num_instances) verts[5] = rect->y0; /* upload new vertex data */ - _mesa_NamedBufferData(clear->vbo, sizeof(verts), verts, - GL_DYNAMIC_DRAW); + _mesa_buffer_data(ctx, clear->buf_obj, GL_NONE, sizeof(verts), verts, + GL_DYNAMIC_DRAW, __func__); if (ctx->NewState) _mesa_update_state(ctx); -- 2.30.2