r300-gallium: Re-translate shaders if constants change.
authorCorbin Simpson <MostAwesomeDude@gmail.com>
Sun, 5 Apr 2009 08:32:00 +0000 (01:32 -0700)
committerCorbin Simpson <MostAwesomeDude@gmail.com>
Sun, 5 Apr 2009 08:32:28 +0000 (01:32 -0700)
src/gallium/drivers/r300/r300_state.c
src/gallium/drivers/r300/r300_state_derived.c

index 5b3bb328ddfe5ec5b4217bc1d8cd5306f4b372d1..095df04630f46971616afb6c2253a6c774d42051 100644 (file)
@@ -153,8 +153,13 @@ static void
 
     /* If the number of constants have changed, invalidate the shader. */
     if (r300->shader_constants[shader].user_count != i) {
-        r300->fs->translated = FALSE;
-        r300_translate_fragment_shader(r300, r300->fs);
+        if (shader == PIPE_SHADER_FRAGMENT && r300->fs) {
+            r300->fs->translated = FALSE;
+            r300_translate_fragment_shader(r300, r300->fs);
+        } else if (shader == PIPE_SHADER_VERTEX && r300->vs) {
+            r300->vs->translated = FALSE;
+            r300_translate_vertex_shader(r300, r300->vs);
+        }
     }
 }
 
index 2f34698e359f8db49ff31625a2a53481293dcb15..f1feafbcf91b40f9d24dc2bc42166e16cd107afd 100644 (file)
@@ -305,7 +305,8 @@ static void r300_update_rs_block(struct r300_context* r300)
 
 void r300_update_derived_state(struct r300_context* r300)
 {
-    if (r300->dirty_state & R300_NEW_FRAGMENT_SHADER) {
+    if (r300->dirty_state &
+            (R300_NEW_FRAGMENT_SHADER | R300_NEW_VERTEX_SHADER)) {
         r300_update_vertex_layout(r300);
     }