glthread: track instance divisor changes
[mesa.git] / src / mesa / vbo / vbo_context.c
index 4ba0a22bf02aea2433ce74bec0c78da20513e192..9cef64018ef3ebc578504f7de2b21af31b211446 100644 (file)
@@ -32,6 +32,7 @@
 #include "main/api_arrayelt.h"
 #include "main/arrayobj.h"
 #include "main/varray.h"
+#include "util/u_memory.h"
 #include "vbo.h"
 #include "vbo_private.h"
 
@@ -148,28 +149,25 @@ _vbo_install_exec_vtxfmt(struct gl_context *ctx)
 
 
 void
-vbo_exec_invalidate_state(struct gl_context *ctx)
+vbo_exec_update_eval_maps(struct gl_context *ctx)
 {
    struct vbo_context *vbo = vbo_context(ctx);
-   struct vbo_exec_context *exec = &vbo->exec;
 
-   if (ctx->NewState & _NEW_EVAL)
-      exec->eval.recalculate_maps = GL_TRUE;
+   vbo->exec.eval.recalculate_maps = GL_TRUE;
 }
 
 
 GLboolean
-_vbo_CreateContext(struct gl_context *ctx)
+_vbo_CreateContext(struct gl_context *ctx, bool use_buffer_objects)
 {
-   struct vbo_context *vbo = CALLOC_STRUCT(vbo_context);
+   struct vbo_context *vbo = &ctx->vbo_context;
 
-   ctx->vbo_context = vbo;
+   memset(vbo, 0, sizeof(*vbo));
 
    vbo->binding.Offset = 0;
    vbo->binding.Stride = 0;
    vbo->binding.InstanceDivisor = 0;
-   _mesa_reference_buffer_object(ctx, &vbo->binding.BufferObj,
-                                 ctx->Shared->NullBufferObj);
+
    init_legacy_currval(ctx);
    init_generic_currval(ctx);
    init_mat_currval(ctx);
@@ -181,7 +179,7 @@ _vbo_CreateContext(struct gl_context *ctx)
     * will pretty much be permanently installed, which means that the
     * vtxfmt mechanism can be removed now.
     */
-   vbo_exec_init(ctx);
+   vbo_exec_init(ctx, use_buffer_objects);
    if (ctx->API == API_OPENGL_COMPAT)
       vbo_save_init(ctx);
 
@@ -202,15 +200,12 @@ _vbo_DestroyContext(struct gl_context *ctx)
    struct vbo_context *vbo = vbo_context(ctx);
 
    if (vbo) {
-
       _mesa_reference_buffer_object(ctx, &vbo->binding.BufferObj, NULL);
 
       vbo_exec_destroy(ctx);
       if (ctx->API == API_OPENGL_COMPAT)
          vbo_save_destroy(ctx);
       _mesa_reference_vao(ctx, &vbo->VAO, NULL);
-      free(vbo);
-      ctx->vbo_context = NULL;
    }
 }