Rather than allocating a fresh page every time we clear a buffer, keep that page around between invocations by tracking the last used offset and only allocating a fresh page when we wrap.
Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> --- src/mesa/drivers/dri/i965/brw_meta_fast_clear.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 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 647bcf6..294378a 100644 --- a/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c +++ b/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c @@ -55,6 +55,7 @@ struct brw_fast_clear_state { GLuint vao; GLuint vbo; + GLuint vbo_offset; GLuint shader_prog; GLint color_location; }; @@ -83,6 +84,8 @@ brw_fast_clear_init(struct brw_context *brw) _mesa_VertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, 0); _mesa_EnableVertexAttribArray(0); + clear->vbo_offset = 4096; /* Force an allocation on first use */ + return true; } @@ -166,7 +169,8 @@ struct rect { static void brw_draw_rectlist(struct gl_context *ctx, struct rect *rect, int num_instances) { - int start = 0, count = 3; + struct brw_fast_clear_state *clear = brw_context(ctx)->fast_clear_state; + int start, count = 3, offset; struct _mesa_prim prim; float verts[6]; @@ -178,8 +182,15 @@ brw_draw_rectlist(struct gl_context *ctx, struct rect *rect, int num_instances) verts[5] = rect->y0; /* upload new vertex data */ - _mesa_BufferData(GL_ARRAY_BUFFER_ARB, sizeof(verts), verts, - GL_DYNAMIC_DRAW_ARB); + offset = clear->vbo_offset; + clear->vbo_offset += sizeof(verts); + if (clear->vbo_offset > 4096) { + _mesa_BufferData(GL_ARRAY_BUFFER_ARB, 4096, NULL, GL_STREAM_DRAW_ARB); + offset = 0; + clear->vbo_offset = sizeof(verts); + } + _mesa_BufferSubData(GL_ARRAY_BUFFER_ARB, offset, sizeof(verts), verts); + start = offset / (2*sizeof(float)); if (ctx->NewState) _mesa_update_state(ctx); -- 2.5.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev