i965/fs: Drop our dead push constants before overflowing to pull constants.
authorEric Anholt <eric@anholt.net>
Tue, 29 Oct 2013 00:00:23 +0000 (17:00 -0700)
committerEric Anholt <eric@anholt.net>
Tue, 29 Oct 2013 20:43:01 +0000 (13:43 -0700)
The idea of the original order was that you'd dead code eliminate accesses
to push constants.  But I've never seen a case of that (nor has
shader-db), while we frequently see sparse accesses of large constant
arrays that would overflow into pull constants.

Cuts pull constant use on csgo, serious sam, planeshift, and the cave:

total instructions in shared programs: 1695103 -> 1688795 (-0.37%)
instructions in affected programs:     92024 -> 85716 (-6.85%)
GAINED:                                339
LOST:                                  0

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_fs.cpp

index 76d8a2997abc89d8bd5f538eefd2699e50db736e..a60941a6a98dfc217957525ec562481ad52762bb 100644 (file)
@@ -3070,6 +3070,7 @@ fs_visitor::run()
       split_virtual_grfs();
 
       move_uniform_array_access_to_pull_constants();
+      remove_dead_constants();
       setup_pull_constants();
 
       bool progress;
@@ -3090,8 +3091,6 @@ fs_visitor::run()
         progress = compute_to_mrf() || progress;
       } while (progress);
 
-      remove_dead_constants();
-
       schedule_instructions(false);
 
       lower_uniform_pull_constant_loads();