2007-06-20 14:29:14 -06:00
|
|
|
|
|
|
|
|
|
|
|
#include "sp_context.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
sp_build_quad_pipeline(struct softpipe_context *sp)
|
|
|
|
{
|
2007-06-20 17:20:02 -06:00
|
|
|
/* build up the pipeline in reverse order... */
|
2007-06-20 14:29:14 -06:00
|
|
|
|
|
|
|
sp->quad.first = sp->quad.output;
|
|
|
|
|
2007-09-14 04:08:58 -04:00
|
|
|
if (sp->blend->colormask != 0xf) {
|
2007-07-12 12:20:14 -06:00
|
|
|
sp->quad.colormask->next = sp->quad.first;
|
|
|
|
sp->quad.first = sp->quad.colormask;
|
|
|
|
}
|
|
|
|
|
2007-09-14 04:08:58 -04:00
|
|
|
if (sp->blend->blend_enable) {
|
2007-06-20 14:29:14 -06:00
|
|
|
sp->quad.blend->next = sp->quad.first;
|
|
|
|
sp->quad.first = sp->quad.blend;
|
|
|
|
}
|
|
|
|
|
2007-07-12 14:13:48 -06:00
|
|
|
if (sp->framebuffer.num_cbufs == 1) {
|
|
|
|
/* the usual case: write to exactly one colorbuf */
|
|
|
|
sp->cbuf = sp->framebuffer.cbufs[0];
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
/* insert bufloop stage */
|
|
|
|
sp->quad.bufloop->next = sp->quad.first;
|
|
|
|
sp->quad.first = sp->quad.bufloop;
|
|
|
|
}
|
|
|
|
|
2007-09-17 11:55:18 -04:00
|
|
|
if (sp->depth_stencil->depth.occlusion_count) {
|
2007-07-13 09:25:57 -06:00
|
|
|
sp->quad.occlusion->next = sp->quad.first;
|
|
|
|
sp->quad.first = sp->quad.occlusion;
|
|
|
|
}
|
|
|
|
|
2007-09-17 12:59:50 -04:00
|
|
|
if (sp->rasterizer->poly_smooth ||
|
|
|
|
sp->rasterizer->line_smooth ||
|
|
|
|
sp->rasterizer->point_smooth) {
|
2007-07-13 10:33:48 -06:00
|
|
|
sp->quad.coverage->next = sp->quad.first;
|
|
|
|
sp->quad.first = sp->quad.coverage;
|
|
|
|
}
|
|
|
|
|
2007-09-17 11:55:18 -04:00
|
|
|
if ( sp->depth_stencil->stencil.front_enabled
|
|
|
|
|| sp->depth_stencil->stencil.back_enabled) {
|
2007-07-10 16:37:18 -06:00
|
|
|
sp->quad.stencil_test->next = sp->quad.first;
|
|
|
|
sp->quad.first = sp->quad.stencil_test;
|
|
|
|
}
|
2007-09-17 11:55:18 -04:00
|
|
|
else if (sp->depth_stencil->depth.enabled &&
|
2007-08-13 15:21:01 -06:00
|
|
|
sp->framebuffer.zbuf) {
|
2007-06-20 17:20:02 -06:00
|
|
|
sp->quad.depth_test->next = sp->quad.first;
|
|
|
|
sp->quad.first = sp->quad.depth_test;
|
|
|
|
}
|
|
|
|
|
2007-09-21 07:00:20 -04:00
|
|
|
if (sp->alpha_test->enabled) {
|
2007-06-21 20:08:10 -06:00
|
|
|
sp->quad.alpha_test->next = sp->quad.first;
|
|
|
|
sp->quad.first = sp->quad.alpha_test;
|
|
|
|
}
|
|
|
|
|
2007-06-20 14:29:14 -06:00
|
|
|
/* XXX always enable shader? */
|
|
|
|
if (1) {
|
|
|
|
sp->quad.shade->next = sp->quad.first;
|
|
|
|
sp->quad.first = sp->quad.shade;
|
|
|
|
}
|
|
|
|
|
2007-09-17 12:59:50 -04:00
|
|
|
if (sp->rasterizer->poly_stipple_enable) {
|
2007-07-11 11:34:19 -06:00
|
|
|
sp->quad.polygon_stipple->next = sp->quad.first;
|
|
|
|
sp->quad.first = sp->quad.polygon_stipple;
|
|
|
|
}
|
2007-06-20 14:29:14 -06:00
|
|
|
}
|