r300g: Demonstratory kludge to unbreak glxgears.
authorCorbin Simpson <MostAwesomeDude@gmail.com>
Mon, 19 Oct 2009 20:51:28 +0000 (13:51 -0700)
committerCorbin Simpson <MostAwesomeDude@gmail.com>
Mon, 19 Oct 2009 21:43:33 +0000 (14:43 -0700)
We *must* recalculate something in vformat every rebind; let's see
if we can't narrow it down a bit.

src/gallium/drivers/r300/r300_state_derived.c

index 1468b9d36ed857cff30bc998486e3779fdf8f016..5df1a0cd635f269d78251e7609eb43e31ebc8feb 100644 (file)
@@ -460,32 +460,36 @@ static void r300_update_derived_shader_state(struct r300_context* r300)
     value = (struct r300_shader_derived_value*)
         util_hash_table_get(r300->shader_hash_table, (void*)key);
     if (value) {
-        vformat = value->vformat;
+        //vformat = value->vformat;
         rs_block = value->rs_block;
 
         FREE(key);
     } else {
-        vformat = CALLOC_STRUCT(r300_vertex_format);
         rs_block = CALLOC_STRUCT(r300_rs_block);
         value = CALLOC_STRUCT(r300_shader_derived_value);
 
-        for (i = 0; i < 16; i++) {
-            vformat->vs_tab[i] = -1;
-            vformat->fs_tab[i] = -1;
-        }
-
-        r300_vs_tab_routes(r300, vformat);
-        r300_vertex_psc(r300, vformat);
-        r300_update_fs_tab(r300, vformat);
-
         r300_update_rs_block(r300, rs_block);
 
-        value->vformat = vformat;
+        //value->vformat = vformat;
         value->rs_block = rs_block;
         util_hash_table_set(r300->shader_hash_table,
             (void*)key, (void*)value);
     }
 
+    /* XXX This will be refactored ASAP. */
+    vformat = CALLOC_STRUCT(r300_vertex_format);
+
+    for (i = 0; i < 16; i++) {
+        vformat->vs_tab[i] = -1;
+        vformat->fs_tab[i] = -1;
+    }
+
+    r300_vs_tab_routes(r300, vformat);
+    r300_vertex_psc(r300, vformat);
+    r300_update_fs_tab(r300, vformat);
+
+    FREE(r300->vertex_info);
+
     r300->vertex_info = vformat;
     r300->rs_block = rs_block;
     r300->dirty_state |= (R300_NEW_VERTEX_FORMAT | R300_NEW_RS_BLOCK);