Mesa (master): r300g: Demonstratory kludge to unbreak glxgears.

Corbin Simpson csimpson at kemper.freedesktop.org
Mon Oct 19 21:43:36 UTC 2009


Module: Mesa
Branch: master
Commit: e5f1f6a0bece3d035bf5ac1685b5335af4862cea
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e5f1f6a0bece3d035bf5ac1685b5335af4862cea

Author: Corbin Simpson <MostAwesomeDude at gmail.com>
Date:   Mon Oct 19 13:51:28 2009 -0700

r300g: Demonstratory kludge to unbreak glxgears.

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 |   28 ++++++++++++++----------
 1 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/src/gallium/drivers/r300/r300_state_derived.c b/src/gallium/drivers/r300/r300_state_derived.c
index 1468b9d..5df1a0c 100644
--- a/src/gallium/drivers/r300/r300_state_derived.c
+++ b/src/gallium/drivers/r300/r300_state_derived.c
@@ -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);




More information about the mesa-commit mailing list