blob: 74a21dc54b42964f15c7117b0b21080d4d838178 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
#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_stencil->depth.occlusion_count) {
sp->quad.occlusion->next = sp->quad.first;
sp->quad.first = sp->quad.occlusion;
}
if (sp->rasterizer->poly_smooth ||
sp->rasterizer->line_smooth ||
sp->rasterizer->point_smooth) {
sp->quad.coverage->next = sp->quad.first;
sp->quad.first = sp->quad.coverage;
}
if ( sp->depth_stencil->stencil.front_enabled
|| sp->depth_stencil->stencil.back_enabled) {
sp->quad.stencil_test->next = sp->quad.first;
sp->quad.first = sp->quad.stencil_test;
}
else if (sp->depth_stencil->depth.enabled &&
sp->framebuffer.zbuf) {
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->rasterizer->poly_stipple_enable) {
sp->quad.polygon_stipple->next = sp->quad.first;
sp->quad.first = sp->quad.polygon_stipple;
}
}
|