diff --git a/libweston/backend-drm/state-helpers.c b/libweston/backend-drm/state-helpers.c index 68df71d75..52746c755 100644 --- a/libweston/backend-drm/state-helpers.c +++ b/libweston/backend-drm/state-helpers.c @@ -315,9 +315,10 @@ drm_plane_state_coords_for_paint_node(struct drm_plane_state *state, /* The alpha of the view is normalized to alpha value range * [min_alpha, max_alpha] that got from drm. The alpha value would - * never exceed max_alpha if ev->alpha <= 1.0. + * never exceed max_alpha if pnode->view_alpha <= 1.0. */ - state->alpha = min_alpha + (uint16_t)round((max_alpha - min_alpha) * ev->alpha); + state->alpha = min_alpha + + (uint16_t)round((max_alpha - min_alpha) * pnode->view_alpha); } /** diff --git a/libweston/backend-drm/state-propose.c b/libweston/backend-drm/state-propose.c index 2e080567f..33cd4651b 100644 --- a/libweston/backend-drm/state-propose.c +++ b/libweston/backend-drm/state-propose.c @@ -577,7 +577,7 @@ pnode_can_use_plane(struct drm_output_state *output_state, } /* if view has alpha check if this plane supports plane alpha */ - if (pnode->view->alpha != 1.0f && plane->alpha_max == plane->alpha_min) { + if (pnode->view_alpha != 1.0f && plane->alpha_max == plane->alpha_min) { drm_debug(b, "\t\t\t\t[plane] not trying plane %d:" "plane-alpha not supported\n", plane->plane_id); diff --git a/libweston/compositor.c b/libweston/compositor.c index 3ef78b572..c6b9fcbfd 100644 --- a/libweston/compositor.c +++ b/libweston/compositor.c @@ -279,6 +279,9 @@ paint_node_update_early(struct weston_paint_node *pnode) pnode->on_cursor_layer = pnode->view->layer_link.layer == &compositor->cursor_layer; + if (view_dirty) + pnode->view_alpha = pnode->view->alpha; + pnode->output->paint_node_changes |= pnode->status; pnode->status &= ~(WESTON_PAINT_NODE_VIEW_DIRTY | \ WESTON_PAINT_NODE_OUTPUT_DIRTY | diff --git a/libweston/libweston-internal.h b/libweston/libweston-internal.h index 843a09aab..4b24acee7 100644 --- a/libweston/libweston-internal.h +++ b/libweston/libweston-internal.h @@ -721,6 +721,7 @@ struct weston_paint_node { bool is_fully_opaque; bool is_fully_blended; bool on_cursor_layer; + float view_alpha; /* This node's contents are solid, either from a solid buffer or a * placeholder.