etnaviv: fix alpha blending cases

We need to check rgb_func/alpha_func when determining if blend or separate
alpha is required.

Signed-off-by: Jonathan Marek <jonathan@marek.ca>
Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com>
This commit is contained in:
Jonathan Marek 2019-07-03 14:04:20 -04:00
parent 6c3c05dc38
commit 5f73726013
1 changed files with 9 additions and 6 deletions

View File

@ -49,23 +49,26 @@ etna_blend_state_create(struct pipe_context *pctx,
/* Enable blending if
* - blend enabled in blend state
* - NOT source factor is ONE and destination factor ZERO for both rgb and
* alpha (which would mean that blending is effectively disabled)
* - NOT source factor is ONE and destination factor ZERO and eq is ADD for
* both rgb and alpha (which mean that blending is effectively disabled)
*/
alpha_enable = rt0->blend_enable &&
!(rt0->rgb_src_factor == PIPE_BLENDFACTOR_ONE &&
rt0->rgb_dst_factor == PIPE_BLENDFACTOR_ZERO &&
rt0->rgb_func == PIPE_BLEND_ADD &&
rt0->alpha_src_factor == PIPE_BLENDFACTOR_ONE &&
rt0->alpha_dst_factor == PIPE_BLENDFACTOR_ZERO);
rt0->alpha_dst_factor == PIPE_BLENDFACTOR_ZERO &&
rt0->alpha_func == PIPE_BLEND_ADD);
/* Enable separate alpha if
* - Blending enabled (see above)
* - NOT source factor is equal to destination factor for both rgb abd
* alpha (which would effectively that mean alpha is not separate)
* - NOT source/destination factor and eq is same for both rgb and alpha
* (which would effectively that mean alpha is not separate), and
*/
bool separate_alpha = alpha_enable &&
!(rt0->rgb_src_factor == rt0->alpha_src_factor &&
rt0->rgb_dst_factor == rt0->alpha_dst_factor);
rt0->rgb_dst_factor == rt0->alpha_dst_factor &&
rt0->rgb_func == rt0->alpha_func);
if (alpha_enable) {
co->PE_ALPHA_CONFIG =