drm-backend: iterate paint nodes
Iterate paint nodes instead of the global view list. Right now this does not change behavior. This is a step towards using per-output view lists that can then be optimized for the output in libweston core. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
This commit is contained in:
@@ -784,9 +784,9 @@ drm_output_propose_state(struct weston_output *output_base,
|
|||||||
{
|
{
|
||||||
struct drm_output *output = to_drm_output(output_base);
|
struct drm_output *output = to_drm_output(output_base);
|
||||||
struct drm_backend *b = to_drm_backend(output->base.compositor);
|
struct drm_backend *b = to_drm_backend(output->base.compositor);
|
||||||
|
struct weston_paint_node *pnode;
|
||||||
struct drm_output_state *state;
|
struct drm_output_state *state;
|
||||||
struct drm_plane_state *scanout_state = NULL;
|
struct drm_plane_state *scanout_state = NULL;
|
||||||
struct weston_view *ev;
|
|
||||||
|
|
||||||
pixman_region32_t renderer_region;
|
pixman_region32_t renderer_region;
|
||||||
pixman_region32_t occluded_region;
|
pixman_region32_t occluded_region;
|
||||||
@@ -859,7 +859,9 @@ drm_output_propose_state(struct weston_output *output_base,
|
|||||||
pixman_region32_init(&renderer_region);
|
pixman_region32_init(&renderer_region);
|
||||||
pixman_region32_init(&occluded_region);
|
pixman_region32_init(&occluded_region);
|
||||||
|
|
||||||
wl_list_for_each(ev, &output_base->compositor->view_list, link) {
|
wl_list_for_each(pnode, &output->base.paint_node_z_order_list,
|
||||||
|
z_order_link) {
|
||||||
|
struct weston_view *ev = pnode->view;
|
||||||
struct drm_plane_state *ps = NULL;
|
struct drm_plane_state *ps = NULL;
|
||||||
bool force_renderer = false;
|
bool force_renderer = false;
|
||||||
pixman_region32_t clipped_view;
|
pixman_region32_t clipped_view;
|
||||||
@@ -873,6 +875,7 @@ drm_output_propose_state(struct weston_output *output_base,
|
|||||||
|
|
||||||
/* If this view doesn't touch our output at all, there's no
|
/* If this view doesn't touch our output at all, there's no
|
||||||
* reason to do anything with it. */
|
* reason to do anything with it. */
|
||||||
|
/* TODO: turn this into assert once z_order_list is pruned. */
|
||||||
if (!(ev->output_mask & (1u << output->base.id))) {
|
if (!(ev->output_mask & (1u << output->base.id))) {
|
||||||
drm_debug(b, "\t\t\t\t[view] ignoring view %p "
|
drm_debug(b, "\t\t\t\t[view] ignoring view %p "
|
||||||
"(not on our output)\n", ev);
|
"(not on our output)\n", ev);
|
||||||
@@ -1028,7 +1031,7 @@ drm_assign_planes(struct weston_output *output_base, void *repaint_data)
|
|||||||
struct drm_output *output = to_drm_output(output_base);
|
struct drm_output *output = to_drm_output(output_base);
|
||||||
struct drm_output_state *state = NULL;
|
struct drm_output_state *state = NULL;
|
||||||
struct drm_plane_state *plane_state;
|
struct drm_plane_state *plane_state;
|
||||||
struct weston_view *ev;
|
struct weston_paint_node *pnode;
|
||||||
struct weston_plane *primary = &output_base->compositor->primary_plane;
|
struct weston_plane *primary = &output_base->compositor->primary_plane;
|
||||||
enum drm_output_propose_state_mode mode = DRM_OUTPUT_PROPOSE_STATE_PLANES_ONLY;
|
enum drm_output_propose_state_mode mode = DRM_OUTPUT_PROPOSE_STATE_PLANES_ONLY;
|
||||||
|
|
||||||
@@ -1064,11 +1067,14 @@ drm_assign_planes(struct weston_output *output_base, void *repaint_data)
|
|||||||
drm_debug(b, "\t[repaint] Using %s composition\n",
|
drm_debug(b, "\t[repaint] Using %s composition\n",
|
||||||
drm_propose_state_mode_to_string(mode));
|
drm_propose_state_mode_to_string(mode));
|
||||||
|
|
||||||
wl_list_for_each(ev, &output_base->compositor->view_list, link) {
|
wl_list_for_each(pnode, &output->base.paint_node_z_order_list,
|
||||||
|
z_order_link) {
|
||||||
|
struct weston_view *ev = pnode->view;
|
||||||
struct drm_plane *target_plane = NULL;
|
struct drm_plane *target_plane = NULL;
|
||||||
|
|
||||||
/* If this view doesn't touch our output at all, there's no
|
/* If this view doesn't touch our output at all, there's no
|
||||||
* reason to do anything with it. */
|
* reason to do anything with it. */
|
||||||
|
/* TODO: turn this into assert once z_order_list is pruned. */
|
||||||
if (!(ev->output_mask & (1u << output->base.id)))
|
if (!(ev->output_mask & (1u << output->base.id)))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user