mesa: Set DriverFlags.NewArray together with vbo...recalculate_inputs.
authorMathias Fröhlich <mathias.froehlich@web.de>
Fri, 16 Mar 2018 05:34:35 +0000 (06:34 +0100)
committerMathias Fröhlich <Mathias.Froehlich@gmx.net>
Thu, 22 Mar 2018 03:58:52 +0000 (04:58 +0100)
Both mean something very similar and are set at the same time now.
For that vbo module to be set from core mesa, implement a public vbo
module method to set that flag. In the longer term the flag should
vanish in favor of a driver flag of the appropriate driver.

Reviewed-by: Brian Paul <brianp@vmware.com>
Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
src/mesa/main/state.c
src/mesa/vbo/vbo.h
src/mesa/vbo/vbo_exec.c

index e523bccd0ce375a258220dc14367191f5a20e4c3..a6ae3b90018a2f15b5c705ffd14a445ad6148874 100644 (file)
@@ -458,6 +458,14 @@ _mesa_set_vp_override(struct gl_context *ctx, GLboolean flag)
 }
 
 
+static void
+set_new_array(struct gl_context *ctx)
+{
+   _vbo_set_recalculate_inputs(ctx);
+   ctx->NewDriverState |= ctx->DriverFlags.NewArray;
+}
+
+
 /**
  * Update ctx->VertexProgram._VPMode.
  * This is to distinguish whether we're running
@@ -490,23 +498,28 @@ _mesa_set_draw_vao(struct gl_context *ctx, struct gl_vertex_array_object *vao,
                    GLbitfield filter)
 {
    struct gl_vertex_array_object **ptr = &ctx->Array._DrawVAO;
+   bool new_array = false;
    if (*ptr != vao) {
       _mesa_reference_vao_(ctx, ptr, vao);
 
-      ctx->NewDriverState |= ctx->DriverFlags.NewArray;
+      new_array = true;
    }
 
    if (vao->NewArrays) {
       _mesa_update_vao_derived_arrays(ctx, vao);
       vao->NewArrays = 0;
 
-      ctx->NewDriverState |= ctx->DriverFlags.NewArray;
+      new_array = true;
    }
 
    /* May shuffle the position and generic0 bits around, filter out unwanted */
    const GLbitfield enabled = filter & _mesa_get_vao_vp_inputs(vao);
    if (ctx->Array._DrawVAOEnabledAttribs != enabled)
-      ctx->NewDriverState |= ctx->DriverFlags.NewArray;
+      new_array = true;
+
+   if (new_array)
+      set_new_array(ctx);
+
    ctx->Array._DrawVAOEnabledAttribs = enabled;
    _mesa_set_varying_vp_inputs(ctx, enabled);
 }
index 42436e0fac91f32ba4097ff90d87a1d068863fe2..ef2bf9221a215e963c9c6af7150e4138cf3e0042 100644 (file)
@@ -292,6 +292,15 @@ struct vbo_inputs
 };
 
 
+/**
+ * Set the recalculate_inputs flag.
+ * The method should in the longer run be replaced with listening for the
+ * DriverFlags.NewArray flag in NewDriverState. But for now ...
+ */
+void
+_vbo_set_recalculate_inputs(struct gl_context *ctx);
+
+
 /**
  * Initialize inputs.
  */
index c0b0a11fe517e8ced369c7cd1e9e2b6fb6faa389..f9cf8355ed453ee83237a1f8987bfbe126d69371 100644 (file)
@@ -243,6 +243,13 @@ vbo_merge_prims(struct _mesa_prim *p0, const struct _mesa_prim *p1)
 }
 
 
+void
+_vbo_set_recalculate_inputs(struct gl_context *ctx)
+{
+   vbo_context(ctx)->exec.array.recalculate_inputs = GL_TRUE;
+}
+
+
 void
 _vbo_init_inputs(struct vbo_inputs *inputs)
 {