summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2015-01-11 15:30:39 +1300
committerEric Anholt <[email protected]>2015-01-11 17:17:20 +1300
commitff1948a1be42196cfb3087593606f8e2bb947ac3 (patch)
tree4e6ba0fc11d79e5a5b5a0bbe5341b91aa356a124 /src
parent1519a1928a6009904359d2de188c65632385f401 (diff)
vc4: Clamp the inputs to the blend equation to [0, 1].
Fixes the remaining ARB_color_buffer_float rendering tests.
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/vc4/vc4_program.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/gallium/drivers/vc4/vc4_program.c b/src/gallium/drivers/vc4/vc4_program.c
index 2b546eeb433..ff2bdf2099d 100644
--- a/src/gallium/drivers/vc4/vc4_program.c
+++ b/src/gallium/drivers/vc4/vc4_program.c
@@ -1596,6 +1596,15 @@ vc4_blend(struct vc4_compile *c, struct qreg *result,
return;
}
+ struct qreg clamped_src[4];
+ struct qreg clamped_dst[4];
+ for (int i = 0; i < 4; i++) {
+ clamped_src[i] = qir_SAT(c, src_color[i]);
+ clamped_dst[i] = qir_SAT(c, dst_color[i]);
+ }
+ src_color = clamped_src;
+ dst_color = clamped_dst;
+
struct qreg src_blend[4], dst_blend[4];
for (int i = 0; i < 3; i++) {
src_blend[i] = vc4_blend_channel(c,
@@ -2793,7 +2802,7 @@ vc4_write_uniforms(struct vc4_context *vc4, struct vc4_compiled_shader *shader,
case QUNIFORM_BLEND_CONST_COLOR:
cl_aligned_f(&vc4->uniforms,
- vc4->blend_color.color[uinfo->data[i]]);
+ CLAMP(vc4->blend_color.color[uinfo->data[i]], 0, 1));
break;
case QUNIFORM_STENCIL: