r300-gallium: Properly redo shaders when constant buffer changes size.
authorCorbin Simpson <MostAwesomeDude@gmail.com>
Mon, 30 Mar 2009 23:58:20 +0000 (16:58 -0700)
committerCorbin Simpson <MostAwesomeDude@gmail.com>
Mon, 30 Mar 2009 23:58:20 +0000 (16:58 -0700)
src/gallium/drivers/r300/r300_state.c

index 8c38f7c706e31e569f7a8b875520f11e15962b60..c9a20c9e8ace0c069f9453ba3d93b1279d4c0e6e 100644 (file)
@@ -132,6 +132,7 @@ static void
                              const struct pipe_constant_buffer* buffer)
 {
     struct r300_context* r300 = r300_context(pipe);
+    int i = r300->shader_constants[shader].user_count;
 
     /* This entire chunk of code seems ever-so-slightly baked.
      * It's as if I've got pipe_buffer* matryoshkas... */
@@ -149,6 +150,12 @@ static void
     }
 
     r300->dirty_state |= R300_NEW_CONSTANTS;
+
+    /* 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);
+    }
 }
 
 /* Create a new depth, stencil, and alpha state based on the CSO dsa state.