st/mesa: be more careful about state validation in st_Bitmap()
authorBrian Paul <brianp@vmware.com>
Wed, 6 Jan 2016 01:11:14 +0000 (18:11 -0700)
committerBrian Paul <brianp@vmware.com>
Wed, 6 Jan 2016 22:53:46 +0000 (15:53 -0700)
If the only dirty state is mesa's _NEW_PROGRAM_CONSTANTS flag, we can
skip state validation before drawing a bitmap since that state doesn't
effect bitmap rendering.

This further increases the performance of the ipers demo on llvmpipe
to about what it was before commit 36c93a6fae27561.

Reviewed-by: José Fonseca <jfonseca@vmware.com>
src/mesa/state_tracker/st_cb_bitmap.c

index c2cbcbd6fc7b67fb47fd5a571c81dbce1b10215b..191f1443131f356460baf0290de5eadfa240537d 100644 (file)
@@ -622,7 +622,14 @@ st_Bitmap(struct gl_context *ctx, GLint x, GLint y,
    if (width == 0 || height == 0)
       return;
 
-   st_validate_state(st);
+   /* We only need to validate state of the st dirty flags are set or
+    * any non-_NEW_PROGRAM_CONSTANTS mesa flags are set.  The VS we use
+    * for bitmap drawing uses no constants and the FS constants are
+    * explicitly uploaded in the draw_bitmap_quad() function.
+    */
+   if ((st->dirty.mesa & ~_NEW_PROGRAM_CONSTANTS) || st->dirty.st) {
+      st_validate_state(st);
+   }
 
    if (!st->bitmap.vs) {
       /* create pass-through vertex shader now */