summaryrefslogtreecommitdiffstats
path: root/src/mesa/main
diff options
context:
space:
mode:
authorMathias Fröhlich <[email protected]>2018-03-16 06:34:35 +0100
committerMathias Fröhlich <[email protected]>2018-03-22 04:58:52 +0100
commitbf328359a724bec9592f67e51a4d7e5cca550cd0 (patch)
treea639d6ae2275d0e8df9350034d539775fa8189fe /src/mesa/main
parent5b917862251f365f2c670196f9222b33f4adcd4f (diff)
mesa: A change of gl_vertex_processing_mode needs an array update.
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 <[email protected]> Signed-off-by: Mathias Fröhlich <[email protected]>
Diffstat (limited to 'src/mesa/main')
-rw-r--r--src/mesa/main/state.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c
index a6ae3b90018..fb97165db91 100644
--- a/src/mesa/main/state.c
+++ b/src/mesa/main/state.c
@@ -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);
}