glsl: Pass in options to do_algebraic().

Will be used in the next commit.

Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
Matt Turner
2014-02-28 17:49:20 -08:00
parent 1d9f74eda7
commit f043971097
4 changed files with 12 additions and 6 deletions

View File

@@ -1570,7 +1570,7 @@ do_common_optimization(exec_list *ir, bool linked,
progress = do_constant_folding(ir) || progress; progress = do_constant_folding(ir) || progress;
progress = do_cse(ir) || progress; progress = do_cse(ir) || progress;
progress = do_rebalance_tree(ir) || progress; progress = do_rebalance_tree(ir) || progress;
progress = do_algebraic(ir, native_integers) || progress; progress = do_algebraic(ir, native_integers, options) || progress;
progress = do_lower_jumps(ir) || progress; progress = do_lower_jumps(ir) || progress;
progress = do_vec_index_to_swizzle(ir) || progress; progress = do_vec_index_to_swizzle(ir) || progress;
progress = lower_vector_insert(ir, false) || progress; progress = lower_vector_insert(ir, false) || progress;

View File

@@ -72,7 +72,8 @@ bool do_common_optimization(exec_list *ir, bool linked,
bool native_integers); bool native_integers);
bool do_rebalance_tree(exec_list *instructions); bool do_rebalance_tree(exec_list *instructions);
bool do_algebraic(exec_list *instructions, bool native_integers); bool do_algebraic(exec_list *instructions, bool native_integers,
const struct gl_shader_compiler_options *options);
bool do_constant_folding(exec_list *instructions); bool do_constant_folding(exec_list *instructions);
bool do_constant_variable(exec_list *instructions); bool do_constant_variable(exec_list *instructions);
bool do_constant_variable_unlinked(exec_list *instructions); bool do_constant_variable_unlinked(exec_list *instructions);

View File

@@ -45,7 +45,9 @@ namespace {
class ir_algebraic_visitor : public ir_rvalue_visitor { class ir_algebraic_visitor : public ir_rvalue_visitor {
public: public:
ir_algebraic_visitor(bool native_integers) ir_algebraic_visitor(bool native_integers,
const struct gl_shader_compiler_options *options)
: options(options)
{ {
this->progress = false; this->progress = false;
this->mem_ctx = NULL; this->mem_ctx = NULL;
@@ -69,6 +71,7 @@ public:
ir_rvalue *swizzle_if_required(ir_expression *expr, ir_rvalue *swizzle_if_required(ir_expression *expr,
ir_rvalue *operand); ir_rvalue *operand);
const struct gl_shader_compiler_options *options;
void *mem_ctx; void *mem_ctx;
bool native_integers; bool native_integers;
@@ -380,6 +383,7 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir)
} }
} }
} }
break; break;
case ir_binop_sub: case ir_binop_sub:
@@ -647,9 +651,10 @@ ir_algebraic_visitor::handle_rvalue(ir_rvalue **rvalue)
} }
bool bool
do_algebraic(exec_list *instructions, bool native_integers) do_algebraic(exec_list *instructions, bool native_integers,
const struct gl_shader_compiler_options *options)
{ {
ir_algebraic_visitor v(native_integers); ir_algebraic_visitor v(native_integers, options);
visit_list_elements(&v, instructions); visit_list_elements(&v, instructions);

View File

@@ -65,7 +65,7 @@ do_optimization(struct exec_list *ir, const char *optimization,
if (sscanf(optimization, "do_common_optimization ( %d ) ", &int_0) == 1) { if (sscanf(optimization, "do_common_optimization ( %d ) ", &int_0) == 1) {
return do_common_optimization(ir, int_0 != 0, false, options, true); return do_common_optimization(ir, int_0 != 0, false, options, true);
} else if (strcmp(optimization, "do_algebraic") == 0) { } else if (strcmp(optimization, "do_algebraic") == 0) {
return do_algebraic(ir, true); return do_algebraic(ir, true, options);
} else if (strcmp(optimization, "do_constant_folding") == 0) { } else if (strcmp(optimization, "do_constant_folding") == 0) {
return do_constant_folding(ir); return do_constant_folding(ir);
} else if (strcmp(optimization, "do_constant_variable") == 0) { } else if (strcmp(optimization, "do_constant_variable") == 0) {