On Tue, Jan 23, 2018 at 5:16 PM, John Stultz <[email protected]> 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 <[email protected]>
> Cc: Sean Paul <[email protected]>
> Cc: Dmitry Shmidt <[email protected]>
> Cc: Robert Foss <[email protected]>
> Cc: Matt Szczesiak <[email protected]>
> Cc: Liviu Dudau <[email protected]>
> Cc: David Hanna <[email protected]>
> Cc: Rob Herring <[email protected]>
> Signed-off-by: John Stultz <[email protected]>
> ---
> 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
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel