summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/llvmpipe/lp_quad_pipe.c
diff options
context:
space:
mode:
authorKeith Whitwell <keithw@vmware.com>2009-07-24 16:49:35 +0100
committerJosé Fonseca <jfonseca@vmware.com>2009-08-29 09:21:18 +0100
commitbdbb4beb21876010b14785569a920fa65a67d1ad (patch)
tree40b8f2d0f6d4020c4229ab2e582f9b7e2a03bb5c /src/gallium/drivers/llvmpipe/lp_quad_pipe.c
parent4486012245c5f526059d3872ac3561f53705d1cf (diff)
llvmpipe: expand quad pipeline to process >1 quad at a time
This is part one -- we still only pass a single quad down, but the code can now cope with more. The quads must all be from the same tile.
Diffstat (limited to 'src/gallium/drivers/llvmpipe/lp_quad_pipe.c')
-rw-r--r--src/gallium/drivers/llvmpipe/lp_quad_pipe.c88
1 files changed, 45 insertions, 43 deletions
diff --git a/src/gallium/drivers/llvmpipe/lp_quad_pipe.c b/src/gallium/drivers/llvmpipe/lp_quad_pipe.c
index d738d08d9e..60ec31eaf3 100644
--- a/src/gallium/drivers/llvmpipe/lp_quad_pipe.c
+++ b/src/gallium/drivers/llvmpipe/lp_quad_pipe.c
@@ -55,50 +55,52 @@ void
lp_build_quad_pipeline(struct llvmpipe_context *lp)
{
boolean early_depth_test =
- lp->depth_stencil->depth.enabled &&
- lp->framebuffer.zsbuf &&
- !lp->depth_stencil->alpha.enabled &&
- !lp->fs->info.uses_kill &&
- !lp->fs->info.writes_z;
+ lp->depth_stencil->depth.enabled &&
+ lp->framebuffer.zsbuf &&
+ !lp->depth_stencil->alpha.enabled &&
+ !lp->fs->info.uses_kill &&
+ !lp->fs->info.writes_z;
/* build up the pipeline in reverse order... */
- lp->quad.first = lp->quad.output;
-
- if (lp->blend->colormask != 0xf) {
- lp_push_quad_first( lp, lp->quad.colormask );
- }
-
- if (lp->blend->blend_enable ||
- lp->blend->logicop_enable) {
- lp_push_quad_first( lp, lp->quad.blend );
- }
-
- if (lp->active_query_count) {
- lp_push_quad_first( lp, lp->quad.occlusion );
- }
-
- if (lp->rasterizer->poly_smooth ||
- lp->rasterizer->line_smooth ||
- lp->rasterizer->point_smooth) {
- lp_push_quad_first( lp, lp->quad.coverage );
- }
-
- if (!early_depth_test) {
- lp_build_depth_stencil( lp );
- }
-
- if (lp->depth_stencil->alpha.enabled) {
- lp_push_quad_first( lp, lp->quad.alpha_test );
- }
-
- /* XXX always enable shader? */
- if (1) {
- lp_push_quad_first( lp, lp->quad.shade );
- }
-
- if (early_depth_test) {
- lp_build_depth_stencil( lp );
- lp_push_quad_first( lp, lp->quad.earlyz );
- }
+
+ /* Color combine
+ */
+ lp->quad.first = lp->quad.output;
+
+ if (lp->blend->colormask != 0xf) {
+ lp_push_quad_first( lp, lp->quad.colormask );
+ }
+
+ if (lp->blend->blend_enable ||
+ lp->blend->logicop_enable) {
+ lp_push_quad_first( lp, lp->quad.blend );
+ }
+
+ if (lp->rasterizer->poly_smooth ||
+ lp->rasterizer->line_smooth ||
+ lp->rasterizer->point_smooth) {
+ lp_push_quad_first( lp, lp->quad.coverage );
+ }
+
+ /* Shade/Depth/Stencil/Alpha
+ */
+ if (lp->active_query_count) {
+ lp_push_quad_first( lp, lp->quad.occlusion );
+ }
+
+ if (!early_depth_test) {
+ lp_build_depth_stencil( lp );
+ }
+
+ if (lp->depth_stencil->alpha.enabled) {
+ lp_push_quad_first( lp, lp->quad.alpha_test );
+ }
+
+ lp_push_quad_first( lp, lp->quad.shade );
+
+ if (early_depth_test) {
+ lp_build_depth_stencil( lp );
+ lp_push_quad_first( lp, lp->quad.earlyz );
+ }
}