Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8fd9696e authored by Baldev Sahu's avatar Baldev Sahu Committed by Linux Build Service Account
Browse files

SurfaceFlinger: Add support for MDP3

This change is porting of following commits related to MDP3

1) SurfaceFlinger: Change to support framebuffer flip for 2D blitters
- Surfaceflinger does not flip framebuffers when there are
  no layers marked for HWC_FRAMEBUFFER
- This change checks for the HWC_BLIT flag and will request a flip
  to a new FB_TARGET buffer even if there are no FRAMEBUFFER layers

  "Change-Id: I1cb44389a05c9ec049d7f0d39c288feccb11a91c"

2) SF: Avoid wormhole clear for BLIT calls
- Do not call GPU clear from SF when composition
  type is BLIT as it'll be taken care in HAL.

  "Change-Id: Ia613eb9b824c6484ecc8c8fa4ee883545d8541b8"

3) surfaceflinger: Allow gpu to render widevine level3
- Allow gpu to render widevine level3 but keep
  blocking screen shots.

  "Change-Id: I914232a062acbb7b17901dbf2b414973230e59d9"

4) surfaceflinger: Do not allow gpu to render widevine for screen shot or
   screen record
- In MDP3 we are using the widevine level3 for secure  content display.
  And this should applicable only for primary display not for screen shot
  or screen recording.

  "Change-Id: I99be2d81287ab746d5c4a2375c3106c59e61a8fc"
  CRs-Fixed: 595469

Change-Id: I35eef9eb1597af21c195e07d5fe4c0c73ab3a269
parent ee88d8dd
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -730,6 +730,9 @@ status_t HWComposer::prepare() {
                    if (l.compositionType == HWC_OVERLAY) {
                        disp.hasOvComp = true;
                    }
                    if (isCompositionTypeBlit(l.compositionType)) {
                        disp.hasFbComp = true;
                    }
                    if (l.compositionType == HWC_CURSOR_OVERLAY) {
                        disp.hasOvComp = true;
                    }
@@ -1278,7 +1281,7 @@ void HWComposer::dump(String8& result) const {
                    if (hwcHasApiVersion(mHwc, HWC_DEVICE_API_VERSION_1_3)) {
                        result.appendFormat(
                                " %9s | %08" PRIxPTR " | %04x | %04x | %02x | %04x | %-11s |%7.1f,%7.1f,%7.1f,%7.1f |%5d,%5d,%5d,%5d | %s\n",
                                        compositionTypeName[type],
                                        (isCompositionTypeBlit(l.compositionType)) ? "HWC_BLIT" : compositionTypeName[type],
                                        intptr_t(l.handle), l.hints, l.flags, l.transform, l.blending, formatStr.string(),
                                        l.sourceCropf.left, l.sourceCropf.top, l.sourceCropf.right, l.sourceCropf.bottom,
                                        l.displayFrame.left, l.displayFrame.top, l.displayFrame.right, l.displayFrame.bottom,
@@ -1286,7 +1289,7 @@ void HWComposer::dump(String8& result) const {
                    } else {
                        result.appendFormat(
                                " %9s | %08" PRIxPTR " | %04x | %04x | %02x | %04x | %-11s |%7d,%7d,%7d,%7d |%5d,%5d,%5d,%5d | %s\n",
                                        compositionTypeName[type],
                                        (isCompositionTypeBlit(l.compositionType)) ? "HWC_BLIT" : compositionTypeName[type],
                                        intptr_t(l.handle), l.hints, l.flags, l.transform, l.blending, formatStr.string(),
                                        l.sourceCrop.left, l.sourceCrop.top, l.sourceCrop.right, l.sourceCrop.bottom,
                                        l.displayFrame.left, l.displayFrame.top, l.displayFrame.right, l.displayFrame.bottom,
+5 −0
Original line number Diff line number Diff line
@@ -314,6 +314,11 @@ public:
     */
    virtual inline bool isVDSEnabled() const { return true; };

    // Extension
    virtual bool isCompositionTypeBlit(const int32_t /*compType*/) const {
            return false;
    };

private:
    void loadHwcModule();
    int loadFbHalModule();
+3 −1
Original line number Diff line number Diff line
@@ -826,6 +826,7 @@ void Layer::setAcquireFence(const sp<const DisplayDevice>& /* hw */,
            }
        }
    }
    setAcquiredFenceIfBlit(fenceFd, layer);
    layer.setAcquireFenceFd(fenceFd);
}

@@ -916,7 +917,8 @@ void Layer::onDraw(const sp<const DisplayDevice>& hw, const Region& clip,

    RenderEngine& engine(mFlinger->getRenderEngine());

    if (!blackOutLayer) {
    if (!blackOutLayer ||
            ((hw->getDisplayType() == HWC_DISPLAY_PRIMARY) && canAllowGPUForProtected())) {
        // TODO: we could be more subtle with isFixedSize()
        const bool useFiltering = getFiltering() || needsFiltering(hw) || isFixedSize();

+4 −0
Original line number Diff line number Diff line
@@ -349,6 +349,10 @@ public:
    virtual void setPosition(const sp<const DisplayDevice>& /*hw*/,
                             HWComposer::HWCLayerInterface& /*layer*/,
                             const State& /*state*/) { }
    virtual void setAcquiredFenceIfBlit(int& /*fenceFd */,
                       HWComposer::HWCLayerInterface& /*layer */) { }
    virtual bool canAllowGPUForProtected() const { return false; }


    /*
     * returns the rectangle that crops the content of the layer and scales it
+4 −0
Original line number Diff line number Diff line
@@ -276,6 +276,10 @@ private:
                     const int32_t& /*id*/) { }

    virtual void updateVisibleRegionsDirty() { }
    virtual void  drawWormHoleIfRequired(HWComposer::LayerListIterator &cur,
        const HWComposer::LayerListIterator &end,
        const sp<const DisplayDevice>& hw,
        const Region& region);
    /* ------------------------------------------------------------------------
     * Message handling
     */
Loading