i965g: gs nr_attrs also tracks nr fragment shader inputs
authorKeith Whitwell <keithw@vmware.com>
Mon, 23 Nov 2009 03:06:58 +0000 (03:06 +0000)
committerKeith Whitwell <keithw@vmware.com>
Mon, 23 Nov 2009 03:06:58 +0000 (03:06 +0000)
Or, equivalently, nr of outputs of active vertex shader varient.

src/gallium/drivers/i965/brw_gs.c

index ce77be24f608a7454019823e0de2b0b5aca34a48..921b201bae2c65790f5e410bbbb791fcefd5fd19 100644 (file)
@@ -154,10 +154,12 @@ static const unsigned gs_prim[PIPE_PRIM_MAX] = {
 static void populate_key( struct brw_context *brw,
                          struct brw_gs_prog_key *key )
 {
+   const struct brw_fs_signature *sig = &brw->curr.fragment_shader->signature;
+
    memset(key, 0, sizeof(*key));
 
-   /* CACHE_NEW_VS_PROG */
-   key->nr_attrs = brw->vs.prog_data->nr_outputs;
+   /* PIPE_NEW_FRAGMENT_SIGNATURE */
+   key->nr_attrs = sig->nr_inputs + 1;
 
    /* BRW_NEW_PRIMITIVE */
    key->primitive = gs_prim[brw->primitive];
@@ -206,9 +208,9 @@ static int prepare_gs_prog(struct brw_context *brw)
 
 const struct brw_tracked_state brw_gs_prog = {
    .dirty = {
-      .mesa  = 0,
+      .mesa  = PIPE_NEW_FRAGMENT_SIGNATURE,
       .brw   = BRW_NEW_PRIMITIVE,
-      .cache = CACHE_NEW_VS_PROG
+      .cache = 0,
    },
    .prepare = prepare_gs_prog
 };