mesa: A change of gl_vertex_processing_mode needs an array update.
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)
Since arrays also handle the mapping of current values into the
disabled array slots, we need to tell the array update code that
this mapping has changed. Also mark only dirty if it has changed.

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

index a6ae3b90018a2f15b5c705ffd14a445ad6148874..fb97165db9195a9513d2f01a05dee4899832d3e0 100644 (file)
@@ -466,6 +466,20 @@ set_new_array(struct gl_context *ctx)
 }
 
 
+static void
+set_vertex_processing_mode(struct gl_context *ctx, gl_vertex_processing_mode m)
+{
+   if (ctx->VertexProgram._VPMode == m)
+      return;
+
+   /* On change we may get new maps into the current values */
+   set_new_array(ctx);
+
+   /* Finally memorize the value */
+   ctx->VertexProgram._VPMode = m;
+}
+
+
 /**
  * Update ctx->VertexProgram._VPMode.
  * This is to distinguish whether we're running
@@ -477,11 +491,11 @@ void
 _mesa_update_vertex_processing_mode(struct gl_context *ctx)
 {
    if (ctx->_Shader->CurrentProgram[MESA_SHADER_VERTEX])
-      ctx->VertexProgram._VPMode = VP_MODE_SHADER;
+      set_vertex_processing_mode(ctx, VP_MODE_SHADER);
    else if (_mesa_arb_vertex_program_enabled(ctx))
-      ctx->VertexProgram._VPMode = VP_MODE_SHADER;
+      set_vertex_processing_mode(ctx, VP_MODE_SHADER);
    else
-      ctx->VertexProgram._VPMode = VP_MODE_FF;
+      set_vertex_processing_mode(ctx, VP_MODE_FF);
 }