diff options
author | Tom Stellard <tstellar@gmail.com> | 2010-08-03 15:23:23 -0700 |
---|---|---|
committer | Tom Stellard <tstellar@gmail.com> | 2010-08-03 19:11:08 -0700 |
commit | 2824d5687a19e42ba0da8fd08e80610c4469a3b3 (patch) | |
tree | 62c397d260f054fc1fd502c796963b7ecbc78605 /src/gallium/drivers/r300/r300_fs.c | |
parent | 9dcc5006660037665fe98bf2d9fb966e620a038b (diff) | |
download | external_mesa3d-2824d5687a19e42ba0da8fd08e80610c4469a3b3.zip external_mesa3d-2824d5687a19e42ba0da8fd08e80610c4469a3b3.tar.gz external_mesa3d-2824d5687a19e42ba0da8fd08e80610c4469a3b3.tar.bz2 |
r300/compiler: r500 hw support for break and continue in loops.
The BGNLOOP and ENDLOOP instructions are now being used correctly, which
makes break and continue possible. The deadcode pass has been modified to
handle breaks, and the compiler is more careful about which loops are
unrolled.
Diffstat (limited to 'src/gallium/drivers/r300/r300_fs.c')
-rw-r--r-- | src/gallium/drivers/r300/r300_fs.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/gallium/drivers/r300/r300_fs.c b/src/gallium/drivers/r300/r300_fs.c index db52699..87ff49a 100644 --- a/src/gallium/drivers/r300/r300_fs.c +++ b/src/gallium/drivers/r300/r300_fs.c @@ -248,13 +248,18 @@ static void r300_emit_fs_code_to_buffer( shader->cb_code_size = 19 + ((code->inst_end + 1) * 6) + - imm_count * 7; + imm_count * 7 + + code->int_constant_count * 2; NEW_CB(shader->cb_code, shader->cb_code_size); OUT_CB_REG(R500_US_CONFIG, R500_ZERO_TIMES_ANYTHING_EQUALS_ZERO); OUT_CB_REG(R500_US_PIXSIZE, code->max_temp_idx); OUT_CB_REG(R500_US_FC_CTRL, code->us_fc_ctrl); - OUT_CB_REG(R500_US_CODE_RANGE, + for(i = 0; i < code->int_constant_count; i++){ + OUT_CB_REG(R500_US_FC_INT_CONST_0 + (i * 4), + code->int_constants[i]); + } + OUT_CB_REG(R500_US_CODE_RANGE, R500_US_CODE_RANGE_ADDR(0) | R500_US_CODE_RANGE_SIZE(code->inst_end)); OUT_CB_REG(R500_US_CODE_OFFSET, 0); OUT_CB_REG(R500_US_CODE_ADDR, |