summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Airlie <[email protected]>2012-01-05 15:36:43 +0000
committerDave Airlie <[email protected]>2012-01-11 13:49:02 +0000
commit0fe2b397bbee346f72f48f364a78459e5a54c534 (patch)
treeb06d8bf4bee458251d1ff820a429832b78aeb157
parente809b7a6787e40f974883104606550fb3d53ba47 (diff)
softpipe: enable clamping control
This enables fragment clamping in softpipe, it passes more tests than it did previously with no regressions, There are still a couple of failures in the SNORM types to investigate. Signed-off-by: Dave Airlie <[email protected]>
-rw-r--r--src/gallium/drivers/softpipe/sp_quad_blend.c9
-rw-r--r--src/gallium/drivers/softpipe/sp_screen.c2
2 files changed, 8 insertions, 3 deletions
diff --git a/src/gallium/drivers/softpipe/sp_quad_blend.c b/src/gallium/drivers/softpipe/sp_quad_blend.c
index 7180fa11c82..d546b149573 100644
--- a/src/gallium/drivers/softpipe/sp_quad_blend.c
+++ b/src/gallium/drivers/softpipe/sp_quad_blend.c
@@ -894,7 +894,7 @@ blend_fallback(struct quad_stage *qs,
/* If fixed-point dest color buffer, need to clamp the incoming
* fragment colors now.
*/
- if (clamp) {
+ if (clamp || softpipe->rasterizer->clamp_fragment_color) {
clamp_colors(quadColor);
}
@@ -982,7 +982,7 @@ blend_single_add_src_alpha_inv_src_alpha(struct quad_stage *qs,
/* If fixed-point dest color buffer, need to clamp the incoming
* fragment colors now.
*/
- if (bqs->clamp[0]) {
+ if (bqs->clamp[0] || qs->softpipe->rasterizer->clamp_fragment_color) {
clamp_colors(quadColor);
}
@@ -1055,7 +1055,7 @@ blend_single_add_one_one(struct quad_stage *qs,
/* If fixed-point dest color buffer, need to clamp the incoming
* fragment colors now.
*/
- if (bqs->clamp[0]) {
+ if (bqs->clamp[0] || qs->softpipe->rasterizer->clamp_fragment_color) {
clamp_colors(quadColor);
}
@@ -1111,6 +1111,9 @@ single_output_color(struct quad_stage *qs,
const int itx = (quad->input.x0 & (TILE_SIZE-1));
const int ity = (quad->input.y0 & (TILE_SIZE-1));
+ if (qs->softpipe->rasterizer->clamp_fragment_color)
+ clamp_colors(quadColor);
+
rebase_colors(bqs->base_format[0], quadColor);
for (j = 0; j < QUAD_SIZE; j++) {
diff --git a/src/gallium/drivers/softpipe/sp_screen.c b/src/gallium/drivers/softpipe/sp_screen.c
index a9d70f94790..37aa5852f62 100644
--- a/src/gallium/drivers/softpipe/sp_screen.c
+++ b/src/gallium/drivers/softpipe/sp_screen.c
@@ -128,6 +128,8 @@ softpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
return 7;
case PIPE_CAP_CONDITIONAL_RENDER:
return 1;
+ case PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL:
+ return 1;
default:
return 0;
}