diff options
author | Eric Anholt <eric@anholt.net> | 2010-07-19 10:21:58 -0700 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2010-07-19 10:47:08 -0700 |
commit | 95c08920ea3d040360e5cc51d8a852d21a0329ee (patch) | |
tree | b199e096f3611df9971a4c0e8e09c2a97d62a029 /src/mesa/shader/ir_to_mesa.cpp | |
parent | 29ce44ad2b8d37ea54923f1d1856b44ef26903e5 (diff) |
i915: Ask the compiler to flatten out all the if statements that it can.
Diffstat (limited to 'src/mesa/shader/ir_to_mesa.cpp')
-rw-r--r-- | src/mesa/shader/ir_to_mesa.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/mesa/shader/ir_to_mesa.cpp b/src/mesa/shader/ir_to_mesa.cpp index 84cfff4010..58320c9217 100644 --- a/src/mesa/shader/ir_to_mesa.cpp +++ b/src/mesa/shader/ir_to_mesa.cpp @@ -2026,8 +2026,10 @@ link_uniforms_to_shared_uniform_list(struct gl_uniform_list *uniforms, } struct gl_program * -get_mesa_program(GLcontext *ctx, void *mem_ctx, struct gl_shader *shader) +get_mesa_program(GLcontext *ctx, struct gl_shader_program *shader_program, + struct gl_shader *shader) { + void *mem_ctx = shader_program; ir_to_mesa_visitor v; struct prog_instruction *mesa_instructions, *mesa_inst; ir_instruction **mesa_instruction_annotation; @@ -2112,6 +2114,13 @@ get_mesa_program(GLcontext *ctx, void *mem_ctx, struct gl_shader *shader) mesa_inst->TexShadow = inst->tex_shadow; mesa_instruction_annotation[i] = inst->ir; + if (ctx->Shader.EmitNoIfs && mesa_inst->Opcode == OPCODE_IF) { + shader_program->InfoLog = + talloc_asprintf_append(shader_program->InfoLog, + "Couldn't flatten if statement\n"); + shader_program->LinkStatus = false; + } + if (mesa_inst->Opcode == OPCODE_BGNSUB) inst->function->inst = i; else if (mesa_inst->Opcode == OPCODE_CAL) @@ -2206,6 +2215,8 @@ _mesa_glsl_compile_shader(GLcontext *ctx, struct gl_shader *shader) progress = do_constant_variable_unlinked(shader->ir) || progress; progress = do_constant_folding(shader->ir) || progress; progress = do_if_return(shader->ir) || progress; + if (ctx->Shader.EmitNoIfs) + progress = do_if_to_cond_assign(shader->ir) || progress; progress = do_vec_index_to_swizzle(shader->ir) || progress; /* Do this one after the previous to let the easier pass handle |