summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichel Dänzer <michel.daenzer@amd.com>2012-07-12 18:57:06 +0800
committerZhigang Gong <zhigang.gong@linux.intel.com>2012-07-12 19:00:23 +0800
commit5247854b57c3d931b5ad593a8c12b6978e6865d0 (patch)
tree3ba6f8cdbefd65044487e25ea5340b25b1c44c00
parent12c5d248a3efe5afb06f0dc246b207cc497e9420 (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.c30
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);