summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/i965/brw_pipe_shader.c
diff options
context:
space:
mode:
authorKeith Whitwell <keithw@vmware.com>2009-11-19 18:55:18 -0800
committerKeith Whitwell <keithw@vmware.com>2009-11-19 18:55:18 -0800
commit47cef2bb8f5979ae690e89943f83060999a29a55 (patch)
tree55c7d53fc062717a0ac3f21d1437907129b1a048 /src/gallium/drivers/i965/brw_pipe_shader.c
parentc58e20fbbb87b8dbd0c58294d4ad3d297c3aa747 (diff)
i965g: add new state flag tracking fs signature changes
Diffstat (limited to 'src/gallium/drivers/i965/brw_pipe_shader.c')
-rw-r--r--src/gallium/drivers/i965/brw_pipe_shader.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/gallium/drivers/i965/brw_pipe_shader.c b/src/gallium/drivers/i965/brw_pipe_shader.c
index 02bc8fa130..c755fa6889 100644
--- a/src/gallium/drivers/i965/brw_pipe_shader.c
+++ b/src/gallium/drivers/i965/brw_pipe_shader.c
@@ -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;
}