summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/softpipe/sp_quad_coverage.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/softpipe/sp_quad_coverage.c')
-rw-r--r--src/gallium/drivers/softpipe/sp_quad_coverage.c48
1 files changed, 31 insertions, 17 deletions
diff --git a/src/gallium/drivers/softpipe/sp_quad_coverage.c b/src/gallium/drivers/softpipe/sp_quad_coverage.c
index 4aeee85870..eda5ce8e63 100644
--- a/src/gallium/drivers/softpipe/sp_quad_coverage.c
+++ b/src/gallium/drivers/softpipe/sp_quad_coverage.c
@@ -42,33 +42,47 @@
/**
* Multiply quad's alpha values by the fragment coverage.
*/
-static void
+static INLINE void
coverage_quad(struct quad_stage *qs, struct quad_header *quad)
{
struct softpipe_context *softpipe = qs->softpipe;
- const uint prim = quad->input.prim;
+ uint cbuf;
+
+ /* loop over colorbuffer outputs */
+ for (cbuf = 0; cbuf < softpipe->framebuffer.nr_cbufs; cbuf++) {
+ float (*quadColor)[4] = quad->output.color[cbuf];
+ unsigned j;
+ for (j = 0; j < QUAD_SIZE; j++) {
+ assert(quad->input.coverage[j] >= 0.0);
+ assert(quad->input.coverage[j] <= 1.0);
+ quadColor[3][j] *= quad->input.coverage[j];
+ }
+ }
+}
+
+
+/* XXX: Incorporate into shader after alpha_test.
+ */
+static void
+coverage_run(struct quad_stage *qs,
+ struct quad_header *quads[],
+ unsigned nr)
+{
+ struct softpipe_context *softpipe = qs->softpipe;
+ const uint prim = quads[0]->input.prim;
+ unsigned i;
if ((softpipe->rasterizer->poly_smooth && prim == QUAD_PRIM_TRI) ||
(softpipe->rasterizer->line_smooth && prim == QUAD_PRIM_LINE) ||
(softpipe->rasterizer->point_smooth && prim == QUAD_PRIM_POINT)) {
- uint cbuf;
-
- /* loop over colorbuffer outputs */
- for (cbuf = 0; cbuf < softpipe->framebuffer.nr_cbufs; cbuf++) {
- float (*quadColor)[4] = quad->output.color[cbuf];
- unsigned j;
- for (j = 0; j < QUAD_SIZE; j++) {
- assert(quad->input.coverage[j] >= 0.0);
- assert(quad->input.coverage[j] <= 1.0);
- quadColor[3][j] *= quad->input.coverage[j];
- }
- }
+
+ for (i = 0; i < nr; i++)
+ coverage_quad( qs, quads[i] );
}
- qs->next->run(qs->next, quad);
+ qs->next->run(qs->next, quads, nr);
}
-
static void coverage_begin(struct quad_stage *qs)
{
qs->next->begin(qs->next);
@@ -87,7 +101,7 @@ struct quad_stage *sp_quad_coverage_stage( struct softpipe_context *softpipe )
stage->softpipe = softpipe;
stage->begin = coverage_begin;
- stage->run = coverage_quad;
+ stage->run = coverage_run;
stage->destroy = coverage_destroy;
return stage;