Reviewed-by: Nicolai Hähnle <nicolai.haeh...@amd.com>
On 09.06.2017 15:48, Marek Olšák wrote:
From: Marek Olšák <marek.ol...@amd.com>
---
src/mesa/state_tracker/st_atom.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/src/mesa/state_tracker/st_atom.c b/src/mesa/state_tracker/st_atom.c
index cbac762..bcfbcf8 100644
--- a/src/mesa/state_tracker/st_atom.c
+++ b/src/mesa/state_tracker/st_atom.c
@@ -109,21 +109,20 @@ static void check_program_state( struct st_context *st )
}
if (unlikely(new_fp != &old_fp->Base)) {
if (old_fp)
dirty |= old_fp->affected_states;
if (new_fp)
dirty |= st_fragment_program(new_fp)->affected_states;
}
st->dirty |= dirty;
- st->gfx_shaders_may_be_dirty = false;
}
static void check_attrib_edgeflag(struct st_context *st)
{
const struct gl_vertex_array **arrays = st->ctx->Array._DrawArrays;
GLboolean vertdata_edgeflags, edgeflag_culls_prims, edgeflags_enabled;
struct gl_program *vp = st->ctx->VertexProgram._Current;
if (!arrays)
return;
@@ -164,21 +163,25 @@ void st_validate_state( struct st_context *st, enum
st_pipeline pipeline )
*/
st->dirty |= ctx->NewDriverState & st->active_states & ST_ALL_STATES_MASK;
ctx->NewDriverState = 0;
/* Get pipeline state. */
switch (pipeline) {
case ST_PIPELINE_RENDER:
if (st->ctx->API == API_OPENGL_COMPAT)
check_attrib_edgeflag(st);
- check_program_state(st);
+ if (st->gfx_shaders_may_be_dirty) {
+ check_program_state(st);
+ st->gfx_shaders_may_be_dirty = false;
+ }
+
st_manager_validate_framebuffers(st);
pipeline_mask = ST_PIPELINE_RENDER_STATE_MASK;
break;
case ST_PIPELINE_CLEAR:
st_manager_validate_framebuffers(st);
pipeline_mask = ST_PIPELINE_CLEAR_STATE_MASK;
break;
--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev