drm_hwcomposer: make sure primary plane is allocated for squash
There are instances where the primary plane may have been disabled, look
through disabled planes as well to find primary plane to use for squash.
Signed-off-by: Adrian Salido <salidoa@google.com>
Reviewed-by: Robert Foss <robert.foss@collabora.com>
diff --git a/drmdisplaycompositor.cpp b/drmdisplaycompositor.cpp
index 036a45e..8225726 100644
--- a/drmdisplaycompositor.cpp
+++ b/drmdisplaycompositor.cpp
@@ -933,10 +933,13 @@
goto move_layers_back;
}
- if (comp_plane.type() == DrmCompositionPlane::Type::kDisable) {
+ if (comp_plane.plane()->type() == DRM_PLANE_TYPE_PRIMARY)
+ squashed_comp.set_plane(comp_plane.plane());
+ else
dst->AddPlaneDisable(comp_plane.plane());
+
+ if (comp_plane.type() == DrmCompositionPlane::Type::kDisable)
continue;
- }
for (auto i : comp_plane.source_layers()) {
DrmHwcLayer &layer = src_layers[i];
@@ -955,11 +958,12 @@
squashed_comp.source_layers().push_back(
squashed_comp.source_layers().size());
}
+ }
- if (comp_plane.plane()->type() == DRM_PLANE_TYPE_PRIMARY)
- squashed_comp.set_plane(comp_plane.plane());
- else
- dst->AddPlaneDisable(comp_plane.plane());
+ if (squashed_comp.plane() == NULL) {
+ ALOGE("Primary plane not found for squash");
+ ret = -ENOTSUP;
+ goto move_layers_back;
}
ret = dst->SetLayers(dst_layers.data(), dst_layers.size(), false);