Re: [RFC][PATCH 3/4 v2] drm_hwcomposer: Use client compositing if there is only one plane

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux