i965: Don't compute brw->wm.input_size_masks when it's unused.
authorEric Anholt <eric@anholt.net>
Thu, 28 Apr 2011 04:50:20 +0000 (21:50 -0700)
committerEric Anholt <eric@anholt.net>
Tue, 31 May 2011 19:07:28 +0000 (12:07 -0700)
It's only used in the old fragment program path, to avoid projection
when w is always 1.  We do want to do this in the new path pre-gen6
too, but we'll probably do it through the ir.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_vs_constval.c

index 47cc0a7..9fdfebe 100644 (file)
@@ -194,11 +194,19 @@ static void calc_wm_input_sizes( struct brw_context *brw )
    /* BRW_NEW_VERTEX_PROGRAM */
    const struct brw_vertex_program *vp =
       brw_vertex_program_const(brw->vertex_program);
+   /* BRW_NEW_FRAGMENT_PROGRAM */
+   struct gl_shader_program *prog = ctx->Shader.CurrentFragmentProgram;
    /* BRW_NEW_INPUT_DIMENSIONS */
    struct tracker t;
    GLuint insn;
    GLuint i;
 
+   /* If we're going to go through brw_fs.cpp, we don't end up using
+    * brw->wm.input_size_masks.
+    */
+   if (prog && prog->_LinkedShaders[MESA_SHADER_FRAGMENT])
+      return;
+
    memset(&t, 0, sizeof(t));
 
    /* _NEW_LIGHT */
@@ -238,7 +246,9 @@ static void calc_wm_input_sizes( struct brw_context *brw )
 const struct brw_tracked_state brw_wm_input_sizes = {
    .dirty = {
       .mesa  = _NEW_LIGHT,
-      .brw   = BRW_NEW_VERTEX_PROGRAM | BRW_NEW_INPUT_DIMENSIONS,
+      .brw   = (BRW_NEW_FRAGMENT_PROGRAM |
+               BRW_NEW_VERTEX_PROGRAM |
+               BRW_NEW_INPUT_DIMENSIONS),
       .cache = 0
    },
    .prepare = calc_wm_input_sizes