i965g: add new state flag tracking fs signature changes
[mesa.git] / src / gallium / drivers / i965 / brw_pipe_shader.c
index 02bc8fa1305a0429158911c8b539e3f542cf0608..c755fa688962ff7672d0a9dbc126b3e6088d99c8 100644 (file)
@@ -58,9 +58,20 @@ static GLboolean has_flow_control(const struct tgsi_shader_info *info)
 
 static void brw_bind_fs_state( struct pipe_context *pipe, void *prog )
 {
+   struct brw_fragment_shader *fs = (struct brw_fragment_shader *)prog;
    struct brw_context *brw = brw_context(pipe);
+   
+   if (brw->curr.fragment_shader == fs)
+      return;
+
+   if (brw->curr.fragment_shader == NULL ||
+       fs == NULL ||
+       memcmp(&brw->curr.fragment_shader->signature, &fs->signature,
+              brw_fs_signature_size(&fs->signature)) != 0) {
+      brw->state.dirty.mesa |= PIPE_NEW_FRAGMENT_SIGNATURE;
+   }
 
-   brw->curr.fragment_shader = (struct brw_fragment_shader *)prog;
+   brw->curr.fragment_shader = fs;
    brw->state.dirty.mesa |= PIPE_NEW_FRAGMENT_SHADER;
 }