diff options
author | Dave Airlie <[email protected]> | 2012-01-05 15:36:43 +0000 |
---|---|---|
committer | Dave Airlie <[email protected]> | 2012-01-11 13:49:02 +0000 |
commit | 0fe2b397bbee346f72f48f364a78459e5a54c534 (patch) | |
tree | b06d8bf4bee458251d1ff820a429832b78aeb157 /src | |
parent | e809b7a6787e40f974883104606550fb3d53ba47 (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]>
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/drivers/softpipe/sp_quad_blend.c | 9 | ||||
-rw-r--r-- | src/gallium/drivers/softpipe/sp_screen.c | 2 |
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; } |