On Tue, Jan 23, 2018 at 5:16 PM, John Stultz <john.stultz@xxxxxxxxxx> wrote: > Originally based on work by Rob Herring, this patch changes > ValidateDisplay() so that if there is only one plane, we modify > Device composited layers to be Client composited. > > Without this, on devices with just one plane, nothing gets > displayed on the screen. > > Suggestions for alternative solutions here would be greatly > appreciated! > > Cc: Marissa Wall <marissaw@xxxxxxxxxx> > Cc: Sean Paul <seanpaul@xxxxxxxxxx> > Cc: Dmitry Shmidt <dimitrysh@xxxxxxxxxx> > Cc: Robert Foss <robert.foss@xxxxxxxxxxxxx> > Cc: Matt Szczesiak <matt.szczesiak@xxxxxxx> > Cc: Liviu Dudau <Liviu.Dudau@xxxxxxx> > Cc: David Hanna <david.hanna11@xxxxxxxxx> > Cc: Rob Herring <rob.herring@xxxxxxxxxx> > Signed-off-by: John Stultz <john.stultz@xxxxxxxxxx> > --- > v2: > * Rework Rob's change to check planes > --- > drmhwctwo.cpp | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/drmhwctwo.cpp b/drmhwctwo.cpp > index dfca1a6..6d88c5c 100644 > --- a/drmhwctwo.cpp > +++ b/drmhwctwo.cpp > @@ -695,6 +695,13 @@ HWC2::Error DrmHwcTwo::HwcDisplay::ValidateDisplay(uint32_t *num_types, > layer.set_validated_type(HWC2::Composition::Client); > ++*num_types; > break; > + case HWC2::Composition::Device: > + /* If we only have one plane, always do Client composition */ > + if (primary_planes_.size() + overlay_planes_.size() == 1) { > + layer.set_validated_type(HWC2::Composition::Client); > + ++*num_types; > + break; > + } This needs to be conditional on GL compositing being disabled (either thru init failure or a property flag). Also, this can be generalized to use as many planes as we have. Something like the following patch. BTW, "gl_enabled" doesn't exist. I left that for you to figure out how to set and propagate. diff --git a/drmhwctwo.cpp b/drmhwctwo.cpp index dfca1a6e9d2d..d7a85bbf67dd 100644 --- a/drmhwctwo.cpp +++ b/drmhwctwo.cpp @@ -684,6 +684,8 @@ HWC2::Error DrmHwcTwo::HwcDisplay::SetVsyncEnabled(int32_t enabled) { HWC2::Error DrmHwcTwo::HwcDisplay::ValidateDisplay(uint32_t *num_types, uint32_t *num_requests) { supported(__func__); + int planes = primary_planes_.size() + overlay_planes_.size(); + *num_types = 0; *num_requests = 0; for (std::pair<const hwc2_layer_t, DrmHwcTwo::HwcLayer> &l : layers_) { @@ -696,7 +698,12 @@ HWC2::Error DrmHwcTwo::HwcDisplay::ValidateDisplay(uint32_t *num_types, ++*num_types; break; default: - layer.set_validated_type(layer.sf_type()); + if (--planes > 0 || gl_enabled) { + layer.set_validated_type(layer.sf_type()); + } else { + layer.set_validated_type(HWC2::Composition::Client); + ++*num_types; + } break; } } _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel