Browse Source

glsl: Skip the rest of loop unrolling if no loops were found.

Shaves 1.6% (+/- 1.0%) off of ff_fragment_shader glean texCombine time
(n=5).
tags/android-x86-2.2-r2
Eric Anholt 14 years ago
parent
commit
58c988ada5
3 changed files with 9 additions and 2 deletions
  1. 4
    2
      src/glsl/glsl_parser_extras.cpp
  2. 3
    0
      src/glsl/loop_analysis.cpp
  3. 2
    0
      src/glsl/loop_analysis.h

+ 4
- 2
src/glsl/glsl_parser_extras.cpp View File

@@ -748,8 +748,10 @@ do_common_optimization(exec_list *ir, bool linked, unsigned max_unroll_iteration
progress = optimize_redundant_jumps(ir) || progress;

loop_state *ls = analyze_loop_variables(ir);
progress = set_loop_controls(ir, ls) || progress;
progress = unroll_loops(ir, ls, max_unroll_iterations) || progress;
if (ls->loop_found) {
progress = set_loop_controls(ir, ls) || progress;
progress = unroll_loops(ir, ls, max_unroll_iterations) || progress;
}
delete ls;

return progress;

+ 3
- 0
src/glsl/loop_analysis.cpp View File

@@ -38,6 +38,7 @@ loop_state::loop_state()
this->ht = hash_table_ctor(0, hash_table_pointer_hash,
hash_table_pointer_compare);
this->mem_ctx = talloc_init("loop state");
this->loop_found = false;
}


@@ -52,7 +53,9 @@ loop_variable_state *
loop_state::insert(ir_loop *ir)
{
loop_variable_state *ls = new(this->mem_ctx) loop_variable_state;

hash_table_insert(this->ht, ls, ir);
this->loop_found = true;

return ls;
}

+ 2
- 0
src/glsl/loop_analysis.h View File

@@ -214,6 +214,8 @@ public:

loop_variable_state *insert(ir_loop *ir);

bool loop_found;

private:
loop_state();


Loading…
Cancel
Save