i965: Perform program state upload outside of atom handling
[mesa.git] / src / mesa / drivers / dri / i965 / brw_wm.c
index e7939f097cb628e789e142e3e742ba198c0564e3..a0eda3a8b94537247abc54f4caf26e9f5bf1cd7d 100644 (file)
@@ -582,8 +582,7 @@ static void brw_wm_populate_key( struct brw_context *brw,
    key->program_string_id = fp->id;
 }
 
-
-static void
+void
 brw_upload_wm_prog(struct brw_context *brw)
 {
    struct gl_context *ctx = &brw->ctx;
@@ -591,6 +590,24 @@ brw_upload_wm_prog(struct brw_context *brw)
    struct brw_fragment_program *fp = (struct brw_fragment_program *)
       brw->fragment_program;
 
+   if (!brw_state_dirty(brw,
+                        _NEW_BUFFERS |
+                        _NEW_COLOR |
+                        _NEW_DEPTH |
+                        _NEW_FRAG_CLAMP |
+                        _NEW_HINT |
+                        _NEW_LIGHT |
+                        _NEW_LINE |
+                        _NEW_MULTISAMPLE |
+                        _NEW_POLYGON |
+                        _NEW_STENCIL |
+                        _NEW_TEXTURE,
+                        BRW_NEW_FRAGMENT_PROGRAM |
+                        BRW_NEW_REDUCED_PRIMITIVE |
+                        BRW_NEW_STATS_WM |
+                        BRW_NEW_VUE_MAP_GEOM_OUT))
+      return;
+
    brw_wm_populate_key(brw, &key);
 
    if (!brw_search_cache(&brw->cache, BRW_CACHE_FS_PROG,
@@ -603,26 +620,3 @@ brw_upload_wm_prog(struct brw_context *brw)
    }
    brw->wm.base.prog_data = &brw->wm.prog_data->base;
 }
-
-
-const struct brw_tracked_state brw_wm_prog = {
-   .dirty = {
-      .mesa  = _NEW_BUFFERS |
-               _NEW_COLOR |
-               _NEW_DEPTH |
-               _NEW_FRAG_CLAMP |
-               _NEW_HINT |
-               _NEW_LIGHT |
-               _NEW_LINE |
-               _NEW_MULTISAMPLE |
-               _NEW_POLYGON |
-               _NEW_STENCIL |
-               _NEW_TEXTURE,
-      .brw   = BRW_NEW_FRAGMENT_PROGRAM |
-               BRW_NEW_REDUCED_PRIMITIVE |
-               BRW_NEW_STATS_WM |
-               BRW_NEW_VUE_MAP_GEOM_OUT,
-   },
-   .emit = brw_upload_wm_prog
-};
-