summaryrefslogtreecommitdiff
path: root/src/mesa/pipe/softpipe/sp_quad_output.c
diff options
context:
space:
mode:
authorBrian <brian.paul@tungstengraphics.com>2007-07-12 14:13:48 -0600
committerBrian <brian.paul@tungstengraphics.com>2007-07-12 14:13:48 -0600
commita48d767cf2ec82d0c0f893a22d22e8593901b206 (patch)
tree732104c0465295a05709e4caf786b722b393769e /src/mesa/pipe/softpipe/sp_quad_output.c
parente8ceb5a2eb174f5444eaf5f52925fa161ea7d0a9 (diff)
Add a quad 'bufloop' stage to handle glDrawBuffer(GL_FRONT_AND_BACK).
This removes the notion of multiple color buffers from all other stages. Will need a bit more work when shaders with multiple render targets arrive.
Diffstat (limited to 'src/mesa/pipe/softpipe/sp_quad_output.c')
-rw-r--r--src/mesa/pipe/softpipe/sp_quad_output.c28
1 files changed, 10 insertions, 18 deletions
diff --git a/src/mesa/pipe/softpipe/sp_quad_output.c b/src/mesa/pipe/softpipe/sp_quad_output.c
index e898757a06..12ab1eca1c 100644
--- a/src/mesa/pipe/softpipe/sp_quad_output.c
+++ b/src/mesa/pipe/softpipe/sp_quad_output.c
@@ -65,28 +65,21 @@ static void
output_quad(struct quad_stage *qs, struct quad_header *quad)
{
struct softpipe_context *softpipe = qs->softpipe;
- GLuint i;
+ struct softpipe_surface *sps = softpipe_surface(softpipe->cbuf);
- for (i = 0; i < softpipe->framebuffer.num_cbufs; i++) {
- struct softpipe_surface *sps
- = softpipe_surface(softpipe->framebuffer.cbufs[i]);
+ if (quad->mask != MASK_ALL) {
+ GLfloat tmp[4][QUAD_SIZE];
- if (quad->mask != MASK_ALL) {
- GLfloat tmp[4][QUAD_SIZE];
+ /* XXX probably add a masked-write function someday */
- /* Yes, we'll probably have a masked write as well, but this is
- * how blend will be done at least.
- */
+ sps->read_quad_f_swz(sps, quad->x0, quad->y0, tmp);
- sps->read_quad_f_swz(sps, quad->x0, quad->y0, tmp);
+ mask_copy( tmp, quad->outputs.color, quad->mask );
- mask_copy( tmp, quad->outputs.color, quad->mask );
-
- sps->write_quad_f_swz(sps, quad->x0, quad->y0, tmp);
- }
- else {
- sps->write_quad_f_swz(sps, quad->x0, quad->y0, quad->outputs.color);
- }
+ sps->write_quad_f_swz(sps, quad->x0, quad->y0, tmp);
+ }
+ else if (quad->mask) {
+ sps->write_quad_f_swz(sps, quad->x0, quad->y0, quad->outputs.color);
}
}
@@ -100,4 +93,3 @@ struct quad_stage *sp_quad_output_stage( struct softpipe_context *softpipe )
return stage;
}
-