i965: Use internal functions for buffer object access
authorIan Romanick <ian.d.romanick@intel.com>
Mon, 2 Nov 2015 22:49:03 +0000 (14:49 -0800)
committerIan Romanick <ian.d.romanick@intel.com>
Tue, 24 Nov 2015 19:31:29 +0000 (11:31 -0800)
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 <ian.d.romanick@intel.com>
Reviewed-by: Abdiel Janulgue <abdiel.janulgue@linux.intel.com>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
src/mesa/drivers/dri/i965/brw_meta_fast_clear.c

index 34baf771d71daaefebae985aa2ae440fe9386813..1b5479d0315787b022a6f1a5bd516196fe3e8ba0 100644 (file)
@@ -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);