diff options
author | Eric Anholt <[email protected]> | 2018-07-11 11:02:11 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2018-07-12 11:31:08 -0700 |
commit | 97ddeed949c608742c096dadb64b7c28a56cf920 (patch) | |
tree | 5c63b30b009ae182080d9878441a9a918ca2065f /src/gallium/drivers/v3d | |
parent | e0dbbf9987c6f75b8aeb38ac70fb906a3e0d9493 (diff) |
v3d: Fix MRT blending with independent blending disabled.
We were only emitting the RT blend state for RT 0 and only enabling it for
RT 0, when the gallium API for !independent_blend is for rt0's state to
apply to all of them.
Fixes piglit fbo-drawbuffers-blend-add.
Diffstat (limited to 'src/gallium/drivers/v3d')
-rw-r--r-- | src/gallium/drivers/v3d/v3dx_emit.c | 5 | ||||
-rw-r--r-- | src/gallium/drivers/v3d/v3dx_state.c | 15 |
2 files changed, 14 insertions, 6 deletions
diff --git a/src/gallium/drivers/v3d/v3dx_emit.c b/src/gallium/drivers/v3d/v3dx_emit.c index 9c97bb6c25d..4402218f404 100644 --- a/src/gallium/drivers/v3d/v3dx_emit.c +++ b/src/gallium/drivers/v3d/v3dx_emit.c @@ -286,7 +286,10 @@ emit_rt_blend(struct v3d_context *v3d, struct v3d_job *job, cl_emit(&job->bcl, BLEND_CONFIG, config) { #if V3D_VERSION >= 40 - config.render_target_mask = 1 << rt; + if (blend->independent_blend_enable) + config.render_target_mask = 1 << rt; + else + config.render_target_mask = (1 << VC5_MAX_DRAW_BUFFERS) - 1; #else assert(rt == 0); #endif diff --git a/src/gallium/drivers/v3d/v3dx_state.c b/src/gallium/drivers/v3d/v3dx_state.c index f775c531e5f..a092b1fb9e1 100644 --- a/src/gallium/drivers/v3d/v3dx_state.c +++ b/src/gallium/drivers/v3d/v3dx_state.c @@ -126,12 +126,17 @@ v3d_create_blend_state(struct pipe_context *pctx, so->base = *cso; - for (int i = 0; i < VC5_MAX_DRAW_BUFFERS; i++) { - so->blend_enables |= cso->rt[i].blend_enable << i; + if (cso->independent_blend_enable) { + for (int i = 0; i < VC5_MAX_DRAW_BUFFERS; i++) { + so->blend_enables |= cso->rt[i].blend_enable << i; - /* V3D 4.x is when we got independent blend enables. */ - assert(V3D_VERSION >= 40 || - cso->rt[i].blend_enable == cso->rt[0].blend_enable); + /* V3D 4.x is when we got independent blend enables. */ + assert(V3D_VERSION >= 40 || + cso->rt[i].blend_enable == cso->rt[0].blend_enable); + } + } else { + if (cso->rt[0].blend_enable) + so->blend_enables = (1 << VC5_MAX_DRAW_BUFFERS) - 1; } return so; |