diff options
author | Keith Whitwell <[email protected]> | 2010-01-13 16:29:39 +0000 |
---|---|---|
committer | Keith Whitwell <[email protected]> | 2010-01-13 16:29:39 +0000 |
commit | db83ad4b4353ea6f9c755f18bf1455ea78b5bf12 (patch) | |
tree | d9eff0ffb0a0e2fbb3a5d49f250a340c40679baf /src/gallium/drivers/llvmpipe/lp_rast.c | |
parent | f4b29e6ad38939318ce233ad28c70a608e7db0bd (diff) |
llvmpipe: improve empty-bin test further
Remove unused param, add comments. Thanks to Brian for review.
Diffstat (limited to 'src/gallium/drivers/llvmpipe/lp_rast.c')
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_rast.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/gallium/drivers/llvmpipe/lp_rast.c b/src/gallium/drivers/llvmpipe/lp_rast.c index 9606418a375..0a8d730580a 100644 --- a/src/gallium/drivers/llvmpipe/lp_rast.c +++ b/src/gallium/drivers/llvmpipe/lp_rast.c @@ -576,13 +576,23 @@ rasterize_bin( struct lp_rasterizer *rast, lp_rast_end_tile( rast, thread_index ); } +/* An empty bin is one that just loads the contents of the tile and + * stores them again unchanged. This typically happens when bins have + * been flushed for some reason in the middle of a frame, or when + * incremental updates are being made to a render target. + * + * Try to avoid doing pointless work in this case. + */ static boolean -is_empty_bin( struct lp_rasterizer *rast, - const struct cmd_bin *bin ) +is_empty_bin( const struct cmd_bin *bin ) { const struct cmd_block *head = bin->commands.head; int i; + /* We emit at most two load-tile commands at the start of the first + * command block. If there are more than two commands in the + * block, we know that the bin is non-empty. + */ if (head->next != NULL || head->count > 2) return FALSE; @@ -626,7 +636,7 @@ rasterize_scene( struct lp_rasterizer *rast, assert(scene); while ((bin = lp_scene_bin_iter_next(scene, &x, &y))) { - if (!is_empty_bin( rast, bin )) + if (!is_empty_bin( bin )) rasterize_bin( rast, thread_index, bin, x * TILE_SIZE, y * TILE_SIZE); } } |