summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers
diff options
context:
space:
mode:
authorIan Romanick <[email protected]>2015-11-02 14:49:03 -0800
committerIan Romanick <[email protected]>2015-11-24 11:31:29 -0800
commite62799bd4e7b7525995e465a4bdcf6df0b0a69a0 (patch)
treecf2c8fd6bc0fee79830d954417eaa4a66739d20b /src/mesa/drivers
parent1c5423d3a074d50138e5ad7945024f9cf4d063ec (diff)
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 <[email protected]> Reviewed-by: Abdiel Janulgue <[email protected]> Reviewed-by: Anuj Phogat <[email protected]>
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r--src/mesa/drivers/dri/i965/brw_meta_fast_clear.c24
1 files 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);