summaryrefslogtreecommitdiffstats
path: root/src/mesa/main/state.c
diff options
context:
space:
mode:
authorMathias Fröhlich <[email protected]>2019-05-12 10:35:52 +0200
committerMathias Fröhlich <[email protected]>2019-05-14 18:09:49 +0200
commitb4b1df5a1750e42307a18b660c6e162df5907535 (patch)
tree20977c7d7658e786222220231e10875f107dba88 /src/mesa/main/state.c
parent663f93c8691e09902376aec8901ff1df123d9f2a (diff)
mesa: Avoid setting _NEW_VARYING_VP_INPUTS in non fixed function mode.
Instead of checking the API variant on entry of set_varying_vp_inputs to check if we can ever be interrested in fixed function processing or not, we can check if we are actually fixed function processing. To check this we can use the immediately updated gl_context::VertexProgram._VPMode value that tells us if we have a user provided shader program or if we are in fixed function processing either through an internal TNL shader of directly through hardware. When doing so, we also need to recheck the varying_vp_inputs variable at the time gl_context::VertexProgram._VPMode is set to VP_MODE_FF. Put asserts at the consumers of gl_context::varying_vp_inputs to make sure gl_context::VertexProgram._VPMode is set to VP_MODE_FF. By that gl_context::varying_vp_inputs should be up to date then. By not looking at the opengl api for this decision we should actually catch more cases where we can avoid setting a state change flag, including the ones where we cannot get into VP_MODE_FF by the choice of the api. Reviewed-by: Marek Olšák <[email protected]> Signed-off-by: Mathias Fröhlich <[email protected]>
Diffstat (limited to 'src/mesa/main/state.c')
-rw-r--r--src/mesa/main/state.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c
index 3ca6f58c6a6..9d8964952cd 100644
--- a/src/mesa/main/state.c
+++ b/src/mesa/main/state.c
@@ -423,8 +423,11 @@ _mesa_update_state( struct gl_context *ctx )
static void
set_varying_vp_inputs(struct gl_context *ctx, GLbitfield varying_inputs)
{
- if (ctx->API != API_OPENGL_COMPAT &&
- ctx->API != API_OPENGLES)
+ /*
+ * The gl_context::varying_vp_inputs value is only used when in
+ * VP_MODE_FF mode.
+ */
+ if (VP_MODE_FF != ctx->VertexProgram._VPMode)
return;
if (ctx->varying_vp_inputs != varying_inputs) {
@@ -471,6 +474,12 @@ set_vertex_processing_mode(struct gl_context *ctx, gl_vertex_processing_mode m)
/* Finally memorize the value */
ctx->VertexProgram._VPMode = m;
+
+ /* Since we only track the varying inputs while being in fixed function
+ * vertex processing mode, we may need to recheck for the
+ * _NEW_VARYING_VP_INPUTS bit.
+ */
+ set_varying_vp_inputs(ctx, ctx->Array._DrawVAOEnabledAttribs);
}