The next few patches will introduce an optimization that only works when integers are not represented as floating point values. v2: Re-word-wrap a line, as requested by Ian Romanick. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>tags/mesa-10.2-rc1
@@ -1444,7 +1444,8 @@ _mesa_glsl_compile_shader(struct gl_context *ctx, struct gl_shader *shader, | |||
/* Do some optimization at compile time to reduce shader IR size | |||
* and reduce later work if the same shader is linked multiple times | |||
*/ | |||
while (do_common_optimization(shader->ir, false, false, 32, options)) | |||
while (do_common_optimization(shader->ir, false, false, 32, options, | |||
ctx->Const.NativeIntegers)) | |||
; | |||
validate_ir_tree(shader->ir); | |||
@@ -1492,7 +1493,8 @@ bool | |||
do_common_optimization(exec_list *ir, bool linked, | |||
bool uniform_locations_assigned, | |||
unsigned max_unroll_iterations, | |||
const struct gl_shader_compiler_options *options) | |||
const struct gl_shader_compiler_options *options, | |||
bool native_integers) | |||
{ | |||
GLboolean progress = GL_FALSE; | |||
@@ -67,7 +67,8 @@ enum lower_packing_builtins_op { | |||
bool do_common_optimization(exec_list *ir, bool linked, | |||
bool uniform_locations_assigned, | |||
unsigned max_unroll_iterations, | |||
const struct gl_shader_compiler_options *options); | |||
const struct gl_shader_compiler_options *options, | |||
bool native_integers); | |||
bool do_algebraic(exec_list *instructions); | |||
bool do_constant_folding(exec_list *instructions); |
@@ -2298,7 +2298,9 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) | |||
unsigned max_unroll = ctx->ShaderCompilerOptions[i].MaxUnrollIterations; | |||
while (do_common_optimization(prog->_LinkedShaders[i]->ir, true, false, max_unroll, &ctx->ShaderCompilerOptions[i])) | |||
while (do_common_optimization(prog->_LinkedShaders[i]->ir, true, false, | |||
max_unroll, &ctx->ShaderCompilerOptions[i], | |||
ctx->Const.NativeIntegers)) | |||
; | |||
} | |||
@@ -64,7 +64,7 @@ do_optimization(struct exec_list *ir, const char *optimization, | |||
if (sscanf(optimization, "do_common_optimization ( %d , %d ) ", | |||
&int_0, &int_1) == 2) { | |||
return do_common_optimization(ir, int_0 != 0, false, int_1, options); | |||
return do_common_optimization(ir, int_0 != 0, false, int_1, options, true); | |||
} else if (strcmp(optimization, "do_algebraic") == 0) { | |||
return do_algebraic(ir); | |||
} else if (strcmp(optimization, "do_constant_folding") == 0) { |
@@ -202,7 +202,8 @@ brw_link_shader(struct gl_context *ctx, struct gl_shader_program *shProg) | |||
) || progress; | |||
progress = do_common_optimization(shader->base.ir, true, true, 32, | |||
&ctx->ShaderCompilerOptions[stage]) | |||
&ctx->ShaderCompilerOptions[stage], | |||
ctx->Const.NativeIntegers) | |||
|| progress; | |||
} while (progress); | |||
@@ -1344,7 +1344,8 @@ create_new_program(struct gl_context *ctx, struct state_key *key) | |||
const struct gl_shader_compiler_options *options = | |||
&ctx->ShaderCompilerOptions[MESA_SHADER_FRAGMENT]; | |||
while (do_common_optimization(p.shader->ir, false, false, 32, options)) | |||
while (do_common_optimization(p.shader->ir, false, false, 32, options, | |||
ctx->Const.NativeIntegers)) | |||
; | |||
reparent_ir(p.shader->ir, p.shader->ir); | |||
@@ -3008,7 +3008,7 @@ _mesa_ir_link_shader(struct gl_context *ctx, struct gl_shader_program *prog) | |||
progress = do_common_optimization(ir, true, true, | |||
options->MaxUnrollIterations, | |||
options) | |||
options, ctx->Const.NativeIntegers) | |||
|| progress; | |||
progress = lower_quadop_vector(ir, true) || progress; |
@@ -5358,7 +5358,9 @@ st_link_shader(struct gl_context *ctx, struct gl_shader_program *prog) | |||
progress = do_lower_jumps(ir, true, true, options->EmitNoMainReturn, options->EmitNoCont, options->EmitNoLoops) || progress; | |||
progress = do_common_optimization(ir, true, true, | |||
options->MaxUnrollIterations, options) | |||
options->MaxUnrollIterations, | |||
options, | |||
ctx->Const.NativeIntegers) | |||
|| progress; | |||
progress = lower_if_to_cond_assign(ir, options->MaxIfDepth) || progress; |