From de02766bd9bf7c1ab5aed723edc96dc2dd1183bf Mon Sep 17 00:00:00 2001 From: HeYue Date: Tue, 8 Oct 2019 10:33:56 +0800 Subject: [PATCH] Fix the ICL 3 displays issue On ICL the 3 displays resolution are different, causing the clone/extend display mode work abnormal. Change-Id: I6f48f8add254a60993a582ada8b11dec146ef24e Tests: 3 display work well on icl. Tracked-On: https://jira.devtools.intel.com/browse/OAM-86688 Signed-off-by: HeYue --- common/display/displayplanemanager.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/common/display/displayplanemanager.cpp b/common/display/displayplanemanager.cpp index be40ff66b..3921696f4 100644 --- a/common/display/displayplanemanager.cpp +++ b/common/display/displayplanemanager.cpp @@ -240,6 +240,13 @@ bool DisplayPlaneManager::ValidateLayers( // it. bool fall_back = FallbacktoGPU(plane, layer, composition); test_commit_done = true; + bool force_separate = false; + size_t composition_size = composition.size(); + + if (fall_back && !prefer_seperate_plane && composition_size > 1) { + force_separate = + ForceSeparatePlane(composition.at(composition_size - 1), layer); + } if (fall_back) { ISURFACETRACE( "Force GPU rander the plane[%d], for the layer[%d] isVideo: " @@ -249,6 +256,18 @@ bool DisplayPlaneManager::ValidateLayers( layer->GetAlpha()); last_plane.ForceGPURendering(); } + if (!fall_back || prefer_seperate_plane || force_separate || + composition.size() == 1) { + // Separate plane added + } else if (composition.size() > 1) { + // Add to the back instead of seprate plane + composition.pop_back(); + DisplayPlaneState &last_plane = composition.back(); + ISURFACETRACE("Added Layer: %d %d validate_final_layers: %d \n", + layer->GetZorder(), composition.size(), + validate_final_layers); + last_plane.AddLayer(layer); + } } else { // Add to last plane when plane has been used up DisplayPlaneState &last_plane = composition.back();