diff options
author | Tom Stellard <tstellar@gmail.com> | 2010-06-18 21:20:57 -0700 |
---|---|---|
committer | Marek Olšák <maraeo@gmail.com> | 2010-07-03 04:32:31 +0200 |
commit | f381c52081b2cbff31c2f38abf16dffcc08f681c (patch) | |
tree | 487291353936ffb561cb3924845d491df5db6171 /src/mesa/drivers/dri/r300/compiler/r3xx_fragprog.c | |
parent | 3c3b7e02eb80727382f7239c7d53f90bc748a194 (diff) |
r300/compiler: Use hardware flow control instructions for loops on r500.
Diffstat (limited to 'src/mesa/drivers/dri/r300/compiler/r3xx_fragprog.c')
-rw-r--r-- | src/mesa/drivers/dri/r300/compiler/r3xx_fragprog.c | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/src/mesa/drivers/dri/r300/compiler/r3xx_fragprog.c b/src/mesa/drivers/dri/r300/compiler/r3xx_fragprog.c index 147b0710db..b53571ab4e 100644 --- a/src/mesa/drivers/dri/r300/compiler/r3xx_fragprog.c +++ b/src/mesa/drivers/dri/r300/compiler/r3xx_fragprog.c @@ -103,15 +103,14 @@ void r3xx_compile_fragment_program(struct r300_fragment_program_compiler* c) debug_program_log(c, "before compilation"); - /* XXX Ideally this should be done only for r3xx, but since - * we don't have branching support for r5xx, we use the emulation - * on all chipsets. */ - - rc_transform_unroll_loops(&c->Base, &loop_state); - - debug_program_log(c, "after transform loops"); - - if (!c->Base.is_r500){ + if (c->Base.is_r500){ + r500_transform_unroll_loops(&c->Base, &loop_state); + debug_program_log(c, "after r500 transform loops"); + } + else{ + rc_transform_unroll_loops(&c->Base, &loop_state); + debug_program_log(c, "after transform loops"); + rc_emulate_branches(&c->Base); debug_program_log(c, "after emulate branches"); } @@ -161,14 +160,10 @@ void r3xx_compile_fragment_program(struct r300_fragment_program_compiler* c) debug_program_log(c, "after deadcode"); - if(c->Base.is_r500){ - rc_emulate_loops(&loop_state, R500_PFS_MAX_INST); - } - else{ + if(!c->Base.is_r500){ rc_emulate_loops(&loop_state, R300_PFS_MAX_ALU_INST); + debug_program_log(c, "after emulate loops"); } - - debug_program_log(c, "after emulate looops"); rc_optimize(&c->Base); |