Get rid of ST_NEW_SHADER flag and the dependency on _NEW_PROGRAM
authorZack Rusin <zack@tungstengraphics.com>
Mon, 1 Oct 2007 10:25:23 +0000 (06:25 -0400)
committerZack Rusin <zack@tungstengraphics.com>
Wed, 3 Oct 2007 14:33:38 +0000 (10:33 -0400)
which is being hit all the time. Done by Keith really.

src/mesa/state_tracker/st_atom_shader.c
src/mesa/state_tracker/st_cb_program.c
src/mesa/state_tracker/st_context.h

index dc6210cd6c3f4a8b7462ee9112d016d9fb3f72f5..919461bcb8b3336460aee7495e181bd635e327b2 100644 (file)
@@ -306,8 +306,8 @@ update_linkage( struct st_context *st )
 const struct st_tracked_state st_update_shader = {
    .name = "st_update_shader",
    .dirty = {
-      .mesa  = _NEW_PROGRAM,
-      .st   = ST_NEW_SHADER
+      .mesa  = 0,
+      .st   = ST_NEW_VERTEX_PROGRAM | ST_NEW_FRAGMENT_PROGRAM
    },
    .update = update_linkage
 };
index 8df8b263d34831cd52792c1cf35dc9e075226385..1902c8d7d6189a118f00222e924fd50f89c2c628 100644 (file)
@@ -43,7 +43,6 @@
 #include "st_program.h"
 #include "st_atom_shader.h"
 
-#include "tnl/tnl.h"
 #include "pipe/tgsi/mesa/tgsi_mesa.h"
 
 
@@ -57,7 +56,14 @@ static void st_bind_program( GLcontext *ctx,
 {
    struct st_context *st = st_context(ctx);
 
-   st->dirty.st |= ST_NEW_SHADER;
+   switch (target) {
+   case GL_VERTEX_PROGRAM_ARB: 
+      st->dirty.st |= ST_NEW_VERTEX_PROGRAM;
+      break;
+   case GL_FRAGMENT_PROGRAM_ARB:
+      st->dirty.st |= ST_NEW_FRAGMENT_PROGRAM;
+      break;
+   }
 }
 
 
@@ -70,7 +76,8 @@ static void st_use_program( GLcontext *ctx,
 {
    struct st_context *st = st_context(ctx);
 
-   st->dirty.st |= ST_NEW_SHADER;
+   st->dirty.st |= ST_NEW_FRAGMENT_PROGRAM;
+   st->dirty.st |= ST_NEW_VERTEX_PROGRAM;
 
    _mesa_use_program(ctx, program);
 }
@@ -114,8 +121,6 @@ static struct gl_program *st_new_program( GLcontext *ctx,
    default:
       return _mesa_new_program(ctx, target, id);
    }
-
-   st->dirty.st |= ST_NEW_SHADER;
 }
 
 
@@ -175,6 +180,9 @@ static void st_program_string_notify( GLcontext *ctx,
       }
 
       stfp->param_state = stfp->Base.Base.Parameters->StateFlags;
+
+      if (st->fp == stfp)
+        st->dirty.st |= ST_NEW_FRAGMENT_PROGRAM;
    }
    else if (target == GL_VERTEX_PROGRAM_ARB) {
       struct st_vertex_program *stvp = (struct st_vertex_program *) prog;
@@ -189,12 +197,10 @@ static void st_program_string_notify( GLcontext *ctx,
 
       stvp->param_state = stvp->Base.Base.Parameters->StateFlags;
 
-      /* Also tell tnl about it:
-       */
-      _tnl_program_string(ctx, target, prog);
-   }
+      if (st->vp == stvp)
+        st->dirty.st |= ST_NEW_VERTEX_PROGRAM;
 
-   st->dirty.st |= ST_NEW_SHADER;
+   }
 }
 
 
index da4fd0d4e401adec8cdb3afa8e91a5d170bd5b5e..b4ae041d36c1d2c482b8cce25e7e322730964f88 100644 (file)
@@ -45,7 +45,6 @@ struct cso_blend;
 #define ST_NEW_MESA                    0x1 /* Mesa state has changed */
 #define ST_NEW_FRAGMENT_PROGRAM        0x2
 #define ST_NEW_VERTEX_PROGRAM          0x4
-#define ST_NEW_SHADER                  0x8
 
 
 struct st_state_flags {