summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2016-08-02 15:17:27 +0200
committerMarek Olšák <[email protected]>2016-08-12 18:47:24 +0200
commit412bd7360c46405de3158683ce0f349126c30b77 (patch)
tree4a0de2e51fd8250a013ced35b4e986f5b134d93a
parentdd93cbc8945e182ab3130eeeb074fae798e5d4af (diff)
st/mesa: don't update clip state if it has no effect
Tested-by: Edmondo Tommasina <[email protected]> Reviewed-by: Nicolai Hähnle <[email protected]>
-rw-r--r--src/mesa/state_tracker/st_atom.c3
-rw-r--r--src/mesa/state_tracker/st_context.c3
-rw-r--r--src/mesa/state_tracker/st_context.h7
3 files changed, 9 insertions, 4 deletions
diff --git a/src/mesa/state_tracker/st_atom.c b/src/mesa/state_tracker/st_atom.c
index 06c523e8b8e..b73ae32d8d7 100644
--- a/src/mesa/state_tracker/st_atom.c
+++ b/src/mesa/state_tracker/st_atom.c
@@ -141,9 +141,6 @@ void st_validate_state( struct st_context *st, enum st_pipeline pipeline )
pipeline_mask &= ~ST_NEW_TES_RESOURCES;
if (!ctx->GeometryProgram._Current)
pipeline_mask &= ~ST_NEW_GS_RESOURCES;
- if (!ctx->Transform.ClipPlanesEnabled)
- pipeline_mask &= ~ST_NEW_CLIP_STATE;
-
break;
case ST_PIPELINE_COMPUTE:
if (ctx->ComputeProgram._Current != &st->cp->Base)
diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c
index e4dd6fa897c..1ff035586c3 100644
--- a/src/mesa/state_tracker/st_context.c
+++ b/src/mesa/state_tracker/st_context.c
@@ -193,7 +193,8 @@ void st_invalidate_state(struct gl_context * ctx, GLbitfield new_state)
}
if (new_state & (_NEW_PROJECTION |
- _NEW_TRANSFORM))
+ _NEW_TRANSFORM) &&
+ st_user_clip_planes_enabled(ctx))
st->dirty |= ST_NEW_CLIP_STATE;
if (new_state & _NEW_COLOR)
diff --git a/src/mesa/state_tracker/st_context.h b/src/mesa/state_tracker/st_context.h
index e0f29e3cebf..556b9c99a23 100644
--- a/src/mesa/state_tracker/st_context.h
+++ b/src/mesa/state_tracker/st_context.h
@@ -336,6 +336,13 @@ st_shader_stage_to_ptarget(gl_shader_stage stage)
return PIPE_SHADER_VERTEX;
}
+static inline bool
+st_user_clip_planes_enabled(struct gl_context *ctx)
+{
+ return (ctx->API == API_OPENGL_COMPAT ||
+ ctx->API == API_OPENGLES) && /* only ES 1.x */
+ ctx->Transform.ClipPlanesEnabled;
+}
/** clear-alloc a struct-sized object, with casting */
#define ST_CALLOC_STRUCT(T) (struct T *) calloc(1, sizeof(struct T))