summaryrefslogtreecommitdiff
path: root/src/mesa/pipe/softpipe/sp_quad.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/pipe/softpipe/sp_quad.c')
-rw-r--r--src/mesa/pipe/softpipe/sp_quad.c71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/mesa/pipe/softpipe/sp_quad.c b/src/mesa/pipe/softpipe/sp_quad.c
new file mode 100644
index 0000000000..0053b16e68
--- /dev/null
+++ b/src/mesa/pipe/softpipe/sp_quad.c
@@ -0,0 +1,71 @@
+
+
+#include "sp_context.h"
+
+
+
+void
+sp_build_quad_pipeline(struct softpipe_context *sp)
+{
+ /* build up the pipeline in reverse order... */
+
+ sp->quad.first = sp->quad.output;
+
+ if (sp->blend.colormask != 0xf) {
+ sp->quad.colormask->next = sp->quad.first;
+ sp->quad.first = sp->quad.colormask;
+ }
+
+ if (sp->blend.blend_enable) {
+ sp->quad.blend->next = sp->quad.first;
+ sp->quad.first = sp->quad.blend;
+ }
+
+ 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;
+ }
+
+ if (sp->depth_test.occlusion_count) {
+ sp->quad.occlusion->next = sp->quad.first;
+ sp->quad.first = sp->quad.occlusion;
+ }
+
+ if (sp->setup.poly_smooth ||
+ sp->setup.line_smooth ||
+ sp->setup.point_smooth) {
+ sp->quad.coverage->next = sp->quad.first;
+ sp->quad.first = sp->quad.coverage;
+ }
+
+ if ( sp->stencil.front_enabled
+ || sp->stencil.front_enabled) {
+ sp->quad.stencil_test->next = sp->quad.first;
+ sp->quad.first = sp->quad.stencil_test;
+ }
+ else if (sp->depth_test.enabled) {
+ sp->quad.depth_test->next = sp->quad.first;
+ sp->quad.first = sp->quad.depth_test;
+ }
+
+ if (sp->alpha_test.enabled) {
+ sp->quad.alpha_test->next = sp->quad.first;
+ sp->quad.first = sp->quad.alpha_test;
+ }
+
+ /* XXX always enable shader? */
+ if (1) {
+ sp->quad.shade->next = sp->quad.first;
+ sp->quad.first = sp->quad.shade;
+ }
+
+ if (sp->setup.poly_stipple_enable) {
+ sp->quad.polygon_stipple->next = sp->quad.first;
+ sp->quad.first = sp->quad.polygon_stipple;
+ }
+}