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 /* Enable blending if
* - blend enabled in blend state * - blend enabled in blend state
* - NOT source factor is ONE and destination factor ZERO for both rgb and * - NOT source factor is ONE and destination factor ZERO and eq is ADD for
* alpha (which would mean that blending is effectively disabled) * both rgb and alpha (which mean that blending is effectively disabled)
*/ */
alpha_enable = rt0->blend_enable && alpha_enable = rt0->blend_enable &&
!(rt0->rgb_src_factor == PIPE_BLENDFACTOR_ONE && !(rt0->rgb_src_factor == PIPE_BLENDFACTOR_ONE &&
rt0->rgb_dst_factor == PIPE_BLENDFACTOR_ZERO && rt0->rgb_dst_factor == PIPE_BLENDFACTOR_ZERO &&
rt0->rgb_func == PIPE_BLEND_ADD &&
rt0->alpha_src_factor == PIPE_BLENDFACTOR_ONE && 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 /* Enable separate alpha if
* - Blending enabled (see above) * - Blending enabled (see above)
* - NOT source factor is equal to destination factor for both rgb abd * - NOT source/destination factor and eq is same for both rgb and alpha
* alpha (which would effectively that mean alpha is not separate) * (which would effectively that mean alpha is not separate), and
*/ */
bool separate_alpha = alpha_enable && bool separate_alpha = alpha_enable &&
!(rt0->rgb_src_factor == rt0->alpha_src_factor && !(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) { if (alpha_enable) {
co->PE_ALPHA_CONFIG = co->PE_ALPHA_CONFIG =