summaryrefslogtreecommitdiffstats
path: root/src/mesa/vbo/vbo_context.h
diff options
context:
space:
mode:
authorMarek Olšák <marek.olsak@amd.com>2014-07-11 00:05:44 +0200
committerMarek Olšák <marek.olsak@amd.com>2014-07-11 19:36:29 +0200
commit734e4946f50c1b83dafdb18ced652abc88e6a246 (patch)
tree2d08733088b97de78cc53d9653eff44aaae1b507 /src/mesa/vbo/vbo_context.h
parentf381c27c548aa28b003c8e188f5d627ab4105f76 (diff)
downloadexternal_mesa3d-734e4946f50c1b83dafdb18ced652abc88e6a246.zip
external_mesa3d-734e4946f50c1b83dafdb18ced652abc88e6a246.tar.gz
external_mesa3d-734e4946f50c1b83dafdb18ced652abc88e6a246.tar.bz2
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 <brianp@vmware.com>
Diffstat (limited to 'src/mesa/vbo/vbo_context.h')
-rw-r--r--src/mesa/vbo/vbo_context.h22
1 files changed, 4 insertions, 18 deletions
diff --git a/src/mesa/vbo/vbo_context.h b/src/mesa/vbo/vbo_context.h
index 1680e23..e224513 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;
}
}