summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2014-02-28 13:02:07 -0500
committerZhigang Gong <zhigang.gong@gmail.com>2014-03-13 21:52:24 +0800
commit8af10ae1fae991297454a427864100bedb306662 (patch)
treefe43d206aa03e544c30e4c91e59d7e68782cdca9
parentc3e8136b9ab926be252dada4e9fb40bd749896a6 (diff)
glamor: Avoid generating GL errors when doing two-pass CA.
We were double-unmapping the VBO, and the second would throw an error. Ported from Eric's glamor xserver tree. Signed-off-by: Eric Anholt <eric@anholt.net> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--src/glamor_priv.h1
-rw-r--r--src/glamor_render.c8
2 files changed, 7 insertions, 2 deletions
diff --git a/src/glamor_priv.h b/src/glamor_priv.h
index 39d09a6..8c118cb 100644
--- a/src/glamor_priv.h
+++ b/src/glamor_priv.h
@@ -248,6 +248,7 @@ typedef struct glamor_screen_private {
/* vertext/elment_index buffer object for render */
GLuint vbo, ebo;
+ Bool vbo_mapped;
int vbo_offset;
int vbo_size;
char *vb;
diff --git a/src/glamor_render.c b/src/glamor_render.c
index 607a636..f7610bd 100644
--- a/src/glamor_render.c
+++ b/src/glamor_render.c
@@ -756,6 +756,7 @@ glamor_setup_composite_vbo(ScreenPtr screen, int n_verts)
GL_MAP_INVALIDATE_RANGE_BIT);
assert(glamor_priv->vb != NULL);
glamor_priv->vb -= glamor_priv->vbo_offset;
+ glamor_priv->vbo_mapped = TRUE;
} else
glamor_priv->vbo_offset = 0;
@@ -830,9 +831,12 @@ glamor_flush_composite_rects(ScreenPtr screen)
glamor_gl_dispatch *dispatch;
dispatch = glamor_get_dispatch(glamor_priv);
- if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP)
+ if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) {
+ if (glamor_priv->vbo_mapped) {
dispatch->glUnmapBuffer(GL_ARRAY_BUFFER);
- else {
+ glamor_priv->vbo_mapped = FALSE;
+ }
+ } else {
dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo);
dispatch->glBufferData(GL_ARRAY_BUFFER,