summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Paul <brianp@vmware.com>2011-06-10 13:07:48 -0600
committerBrian Paul <brianp@vmware.com>2011-06-10 13:09:41 -0600
commit8a78e6cf804f58c0bc99278624bc30c3dea867b1 (patch)
tree70731363dc6faeb560ae0a2d04c1a6bf8adc53b0
parent788dda53cf3fd636a7ec579ce6ef2062004627ea (diff)
vbo: remove node->count > 0 test in vbo_save_playback_vertex_list()
See piglit dlist-fdo31590.c test and http://bugs.freedesktop.org/show_bug.cgi?id=31590 In this case we had node->prim_count=1 but node->count==0 because the display list started with glBegin() but had no vertices. The call to glEvalCoord1f() triggered the DO_FALLBACK() path. When replaying the display list, the old condition basically no-op'd the call to vbo_save_playback_vertex_list call(). That led to the invalid operation error being raised in glEnd(). NOTE: This is a candidate for the 7.10 branch. (cherry picked from commit 62811057f41bf7c027da6156a44383266c7f3952)
-rw-r--r--src/mesa/vbo/vbo_save_draw.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/mesa/vbo/vbo_save_draw.c b/src/mesa/vbo/vbo_save_draw.c
index 533c150a918..6f0679436f5 100644
--- a/src/mesa/vbo/vbo_save_draw.c
+++ b/src/mesa/vbo/vbo_save_draw.c
@@ -244,7 +244,7 @@ vbo_save_playback_vertex_list(struct gl_context *ctx, void *data)
FLUSH_CURRENT(ctx, 0);
- if (node->prim_count > 0 && node->count > 0) {
+ if (node->prim_count > 0) {
if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END &&
node->prim[0].begin) {
@@ -284,14 +284,16 @@ vbo_save_playback_vertex_list(struct gl_context *ctx, void *data)
if (ctx->NewState)
_mesa_update_state( ctx );
- vbo_context(ctx)->draw_prims(ctx,
- save->inputs,
- node->prim,
- node->prim_count,
- NULL,
- GL_TRUE,
- 0, /* Node is a VBO, so this is ok */
- node->count - 1);
+ if (node->count > 0) {
+ vbo_context(ctx)->draw_prims(ctx,
+ save->inputs,
+ node->prim,
+ node->prim_count,
+ NULL,
+ GL_TRUE,
+ 0, /* Node is a VBO, so this is ok */
+ node->count - 1);
+ }
}
/* Copy to current?