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 <airlied@redhat.com>
This commit is contained in:
Dave Airlie 2012-01-05 15:36:43 +00:00
parent e809b7a678
commit 0fe2b397bb
2 changed files with 8 additions and 3 deletions

View file

@ -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++) {

View file

@ -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;
}