diff options
author | Marek Olšák <[email protected]> | 2014-07-11 00:05:44 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2014-07-11 19:36:29 +0200 |
commit | 734e4946f50c1b83dafdb18ced652abc88e6a246 (patch) | |
tree | 2d08733088b97de78cc53d9653eff44aaae1b507 /src/mesa/vbo/vbo_context.h | |
parent | f381c27c548aa28b003c8e188f5d627ab4105f76 (diff) |
mesa: fix crash in st/mesa after deleting a VAO
This happens when glGetMultisamplefv (or any other non-draw function) is
called, which doesn't invoke the VBO module to update _DrawArrays and
the pointer is invalid at that point.
However st/mesa still dereferences it to setup vertex buffers ==> crash.
Reviewed-by: Brian Paul <[email protected]>
Diffstat (limited to 'src/mesa/vbo/vbo_context.h')
-rw-r--r-- | src/mesa/vbo/vbo_context.h | 22 |
1 files changed, 4 insertions, 18 deletions
diff --git a/src/mesa/vbo/vbo_context.h b/src/mesa/vbo/vbo_context.h index 1680e23dcf3..e2245130575 100644 --- a/src/mesa/vbo/vbo_context.h +++ b/src/mesa/vbo/vbo_context.h @@ -57,18 +57,6 @@ #include "vbo_save.h" -/** Used to signal when transitioning from one kind of drawing method - * to another. - */ -enum draw_method -{ - DRAW_NONE, /**< Initial value only */ - DRAW_BEGIN_END, - DRAW_DISPLAY_LIST, - DRAW_ARRAYS -}; - - struct vbo_context { struct gl_client_array currval[VBO_ATTRIB_MAX]; @@ -83,8 +71,6 @@ struct vbo_context { * is responsible for initiating any fallback actions required: */ vbo_draw_func draw_prims; - - enum draw_method last_draw_method; }; @@ -122,11 +108,11 @@ get_program_mode( struct gl_context *ctx ) * that arrays may be changing. */ static inline void -vbo_draw_method(struct vbo_context *vbo, enum draw_method method) +vbo_draw_method(struct vbo_context *vbo, gl_draw_method method) { - if (vbo->last_draw_method != method) { - struct gl_context *ctx = vbo->exec.ctx; + struct gl_context *ctx = vbo->exec.ctx; + if (ctx->Array.DrawMethod != method) { switch (method) { case DRAW_ARRAYS: ctx->Array._DrawArrays = vbo->exec.array.inputs; @@ -142,7 +128,7 @@ vbo_draw_method(struct vbo_context *vbo, enum draw_method method) } ctx->NewDriverState |= ctx->DriverFlags.NewArray; - vbo->last_draw_method = method; + ctx->Array.DrawMethod = method; } } |