diff options
author | Zou Nan hai <nanhai.zou@intel.com> | 2008-03-13 14:46:38 +0800 |
---|---|---|
committer | Zou Nan hai <nanhai.zou@intel.com> | 2008-03-13 14:46:38 +0800 |
commit | fcb7cb9e72ecac7c165a3a6ed7a033e2e6793a26 (patch) | |
tree | 8508705f5659c61d28f972307faacae97bfa5795 /src/mesa/drivers/dri/i965/brw_wm_fp.c | |
parent | 9110425c72e45f618131b559eba883fd6c5536b4 (diff) |
[i965] multiple rendering target support
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_wm_fp.c')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_wm_fp.c | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_wm_fp.c b/src/mesa/drivers/dri/i965/brw_wm_fp.c index 77cb3b27e3..682b16d74d 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_fp.c +++ b/src/mesa/drivers/dri/i965/brw_wm_fp.c @@ -861,14 +861,28 @@ static void emit_fb_write( struct brw_wm_compile *c ) struct prog_src_register outcolor = src_reg(PROGRAM_OUTPUT, FRAG_RESULT_COLR); struct prog_src_register payload_r0_depth = src_reg(PROGRAM_PAYLOAD, PAYLOAD_DEPTH); struct prog_src_register outdepth = src_reg(PROGRAM_OUTPUT, FRAG_RESULT_DEPR); + GLuint i; - emit_op(c, - WM_FB_WRITE, - dst_mask(dst_undef(),0), - 0, 0, 0, - outcolor, - payload_r0_depth, - outdepth); + struct prog_instruction *inst; + struct brw_context *brw = c->func.brw; + + /* inst->Sampler is not used by backend, + use it for fb write target and eot */ + + inst = emit_op(c, WM_FB_WRITE, dst_mask(dst_undef(),0), + 0, 0, 0, outcolor, payload_r0_depth, outdepth); + inst->Sampler = (brw->state.nr_draw_regions > 1 ? 0: 1)|(0<<1); + + if (brw->state.nr_draw_regions > 1) { + for (i = 0 ; i < brw->state.nr_draw_regions; i++) { + outcolor = src_reg(PROGRAM_OUTPUT, FRAG_RESULT_DATA0 + i); + inst = emit_op(c, + WM_FB_WRITE, dst_mask(dst_undef(),0), 0, 0, 0, + outcolor, payload_r0_depth, outdepth); + inst->Sampler = ((i == brw->state.nr_draw_regions - 1) ? 1: 0); + inst->Sampler |= (i<<1); + } + } } |