diff options
author | Michel Dänzer <michel.daenzer@amd.com> | 2012-07-12 18:57:06 +0800 |
---|---|---|
committer | Zhigang Gong <zhigang.gong@linux.intel.com> | 2012-07-12 19:00:23 +0800 |
commit | 5247854b57c3d931b5ad593a8c12b6978e6865d0 (patch) | |
tree | 3ba6f8cdbefd65044487e25ea5340b25b1c44c00 | |
parent | 12c5d248a3efe5afb06f0dc246b207cc497e9420 (diff) |
Stream vertex data to VBOs.
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
-rw-r--r-- | src/glamor_render.c | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/src/glamor_render.c b/src/glamor_render.c index d986e9a..b504686 100644 --- a/src/glamor_render.c +++ b/src/glamor_render.c @@ -725,34 +725,34 @@ glamor_setup_composite_vbo(ScreenPtr screen, int n_verts) glamor_get_screen_private(screen); glamor_gl_dispatch *dispatch; int vert_size; - Bool need_new_buffer = FALSE; - glamor_priv->vbo_offset = 0; glamor_priv->render_nr_verts = 0; - vert_size = n_verts * sizeof(float) * 2; - - if (glamor_priv->vbo_size < vert_size) { - glamor_priv->vbo_size = vert_size; - need_new_buffer = TRUE; - } - glamor_priv->vb_stride = 2 * sizeof(float); if (glamor_priv->has_source_coords) glamor_priv->vb_stride += 2 * sizeof(float); if (glamor_priv->has_mask_coords) glamor_priv->vb_stride += 2 * sizeof(float); + vert_size = n_verts * glamor_priv->vb_stride; + dispatch = glamor_get_dispatch(glamor_priv); dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) { - if (need_new_buffer) + if (glamor_priv->vbo_size < (glamor_priv->vbo_offset + vert_size)) { + glamor_priv->vbo_size = GLAMOR_COMPOSITE_VBO_VERT_CNT * + glamor_priv->vb_stride; + glamor_priv->vbo_offset = 0; dispatch->glBufferData(GL_ARRAY_BUFFER, - vert_size, - NULL, GL_DYNAMIC_DRAW); - glamor_priv->vb = dispatch->glMapBufferRange(GL_ARRAY_BUFFER, 0, - vert_size, - GL_MAP_READ_BIT | GL_MAP_WRITE_BIT); + glamor_priv->vbo_size, + NULL, GL_STREAM_DRAW); + } + + glamor_priv->vb = dispatch->glMapBufferRange(GL_ARRAY_BUFFER, + glamor_priv->vbo_offset, + vert_size, + GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT); assert(glamor_priv->vb != NULL); + glamor_priv->vb -= glamor_priv->vbo_offset; } dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glamor_priv->ebo); |