summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r--src/mesa/drivers/dri/i965/brw_fs.cpp136
-rw-r--r--src/mesa/drivers/dri/i965/brw_fs.h1
2 files changed, 72 insertions, 65 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
index 0bdd8abcf8a..d2e963fc482 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -3443,6 +3443,76 @@ fs_visitor::opt_drop_redundant_mov_to_flags()
}
}
+void
+fs_visitor::optimize()
+{
+ calculate_cfg();
+
+ split_virtual_grfs();
+
+ move_uniform_array_access_to_pull_constants();
+ assign_constant_locations();
+ demote_pull_constants();
+
+ opt_drop_redundant_mov_to_flags();
+
+#define OPT(pass, args...) do { \
+ pass_num++; \
+ bool this_progress = pass(args); \
+ \
+ if (unlikely(INTEL_DEBUG & DEBUG_OPTIMIZER) && this_progress) { \
+ char filename[64]; \
+ snprintf(filename, 64, "fs%d-%04d-%02d-%02d-" #pass, \
+ dispatch_width, shader_prog ? shader_prog->Name : 0, iteration, pass_num); \
+ \
+ backend_visitor::dump_instructions(filename); \
+ } \
+ \
+ progress = progress || this_progress; \
+ } while (false)
+
+ if (unlikely(INTEL_DEBUG & DEBUG_OPTIMIZER)) {
+ char filename[64];
+ snprintf(filename, 64, "fs%d-%04d-00-start",
+ dispatch_width, shader_prog ? shader_prog->Name : 0);
+
+ backend_visitor::dump_instructions(filename);
+ }
+
+ bool progress;
+ int iteration = 0;
+ do {
+ progress = false;
+ iteration++;
+ int pass_num = 0;
+
+ OPT(remove_duplicate_mrf_writes);
+
+ OPT(opt_algebraic);
+ OPT(opt_cse);
+ OPT(opt_copy_propagate);
+ OPT(opt_peephole_predicated_break);
+ OPT(dead_code_eliminate);
+ OPT(opt_peephole_sel);
+ OPT(dead_control_flow_eliminate, this);
+ OPT(opt_register_renaming);
+ OPT(opt_saturate_propagation);
+ OPT(register_coalesce);
+ OPT(compute_to_mrf);
+
+ OPT(compact_virtual_grfs);
+ } while (progress);
+
+ if (lower_load_payload()) {
+ split_virtual_grfs();
+ register_coalesce();
+ compute_to_mrf();
+ dead_code_eliminate();
+ }
+
+ lower_uniform_pull_constant_loads();
+}
+
bool
fs_visitor::run()
{
@@ -3510,71 +3580,7 @@ fs_visitor::run()
emit_fb_writes();
- calculate_cfg();
-
- split_virtual_grfs();
-
- move_uniform_array_access_to_pull_constants();
- assign_constant_locations();
- demote_pull_constants();
-
- opt_drop_redundant_mov_to_flags();
-
-#define OPT(pass, args...) do { \
- pass_num++; \
- bool this_progress = pass(args); \
- \
- if (unlikely(INTEL_DEBUG & DEBUG_OPTIMIZER) && this_progress) { \
- char filename[64]; \
- snprintf(filename, 64, "fs%d-%04d-%02d-%02d-" #pass, \
- dispatch_width, shader_prog ? shader_prog->Name : 0, iteration, pass_num); \
- \
- backend_visitor::dump_instructions(filename); \
- } \
- \
- progress = progress || this_progress; \
- } while (false)
-
- if (unlikely(INTEL_DEBUG & DEBUG_OPTIMIZER)) {
- char filename[64];
- snprintf(filename, 64, "fs%d-%04d-00-start",
- dispatch_width, shader_prog ? shader_prog->Name : 0);
-
- backend_visitor::dump_instructions(filename);
- }
-
- bool progress;
- int iteration = 0;
- do {
- progress = false;
- iteration++;
- int pass_num = 0;
-
- OPT(remove_duplicate_mrf_writes);
-
- OPT(opt_algebraic);
- OPT(opt_cse);
- OPT(opt_copy_propagate);
- OPT(opt_peephole_predicated_break);
- OPT(dead_code_eliminate);
- OPT(opt_peephole_sel);
- OPT(dead_control_flow_eliminate, this);
- OPT(opt_register_renaming);
- OPT(opt_saturate_propagation);
- OPT(register_coalesce);
- OPT(compute_to_mrf);
-
- OPT(compact_virtual_grfs);
- } while (progress);
-
- if (lower_load_payload()) {
- split_virtual_grfs();
- register_coalesce();
- compute_to_mrf();
- dead_code_eliminate();
- }
-
- lower_uniform_pull_constant_loads();
+ optimize();
assign_curb_setup();
assign_urb_setup();
diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h
index 8a8b72158bd..676087ed876 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.h
+++ b/src/mesa/drivers/dri/i965/brw_fs.h
@@ -403,6 +403,7 @@ public:
uint32_t const_offset);
bool run();
+ void optimize();
void assign_binding_table_offsets();
void setup_payload_gen4();
void setup_payload_gen6();