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

Commit b583b3bb authored by Chia-I Wu's avatar Chia-I Wu Committed by Android (Google) Code Review
Browse files

Merge "surfaceflinger: force client composition for Y410" into pi-dev

parents 3e273065 07376a98
Loading
Loading
Loading
Loading
+8 −3
Original line number Original line Diff line number Diff line
@@ -815,6 +815,13 @@ bool BufferLayer::getOpacityForFormat(uint32_t format) {
    return true;
    return true;
}
}


bool BufferLayer::isHdrY410() const {
    // pixel format is HDR Y410 masquerading as RGBA_1010102
    return (mCurrentDataSpace == ui::Dataspace::BT2020_ITU_PQ &&
            mConsumer->getCurrentApi() == NATIVE_WINDOW_API_MEDIA &&
            getBE().compositionInfo.mBuffer->getPixelFormat() == HAL_PIXEL_FORMAT_RGBA_1010102);
}

void BufferLayer::drawWithOpenGL(const RenderArea& renderArea, bool useIdentityTransform) const {
void BufferLayer::drawWithOpenGL(const RenderArea& renderArea, bool useIdentityTransform) const {
    ATRACE_CALL();
    ATRACE_CALL();
    const State& s(getDrawingState());
    const State& s(getDrawingState());
@@ -868,9 +875,7 @@ void BufferLayer::drawWithOpenGL(const RenderArea& renderArea, bool useIdentityT
                              getColor());
                              getColor());
    engine.setSourceDataSpace(mCurrentDataSpace);
    engine.setSourceDataSpace(mCurrentDataSpace);


    if (mCurrentDataSpace == ui::Dataspace::BT2020_ITU_PQ &&
    if (isHdrY410()) {
        mConsumer->getCurrentApi() == NATIVE_WINDOW_API_MEDIA &&
        getBE().compositionInfo.mBuffer->getPixelFormat() == HAL_PIXEL_FORMAT_RGBA_1010102) {
        engine.setSourceY410BT2020(true);
        engine.setSourceY410BT2020(true);
    }
    }


+2 −0
Original line number Original line Diff line number Diff line
@@ -129,6 +129,8 @@ public:
    bool isBufferLatched() const override { return mRefreshPending; }
    bool isBufferLatched() const override { return mRefreshPending; }
    void setDefaultBufferSize(uint32_t w, uint32_t h) override;
    void setDefaultBufferSize(uint32_t w, uint32_t h) override;


    bool isHdrY410() const override;

    void setPerFrameData(const sp<const DisplayDevice>& displayDevice) override;
    void setPerFrameData(const sp<const DisplayDevice>& displayDevice) override;


    bool isOpaque(const Layer::State& s) const override;
    bool isOpaque(const Layer::State& s) const override;
+2 −0
Original line number Original line Diff line number Diff line
@@ -378,6 +378,8 @@ protected:
public:
public:
    virtual void setDefaultBufferSize(uint32_t /*w*/, uint32_t /*h*/) {}
    virtual void setDefaultBufferSize(uint32_t /*w*/, uint32_t /*h*/) {}


    virtual bool isHdrY410() const { return false; }

    void setGeometry(const sp<const DisplayDevice>& displayDevice, uint32_t z);
    void setGeometry(const sp<const DisplayDevice>& displayDevice, uint32_t z);
    void forceClientComposition(int32_t hwcId);
    void forceClientComposition(int32_t hwcId);
    bool getForceClientComposition(int32_t hwcId);
    bool getForceClientComposition(int32_t hwcId);
+6 −5
Original line number Original line Diff line number Diff line
@@ -2031,12 +2031,13 @@ void SurfaceFlinger::setUpHWComposer() {
                    "display %zd: %d", displayId, result);
                    "display %zd: %d", displayId, result);
        }
        }
        for (auto& layer : displayDevice->getVisibleLayersSortedByZ()) {
        for (auto& layer : displayDevice->getVisibleLayersSortedByZ()) {
            if ((layer->getDataSpace() == Dataspace::BT2020_PQ ||
            if (layer->isHdrY410()) {
                layer->forceClientComposition(hwcId);
            } else if ((layer->getDataSpace() == Dataspace::BT2020_PQ ||
                        layer->getDataSpace() == Dataspace::BT2020_ITU_PQ) &&
                        layer->getDataSpace() == Dataspace::BT2020_ITU_PQ) &&
                    !displayDevice->hasHDR10Support()) {
                    !displayDevice->hasHDR10Support()) {
                layer->forceClientComposition(hwcId);
                layer->forceClientComposition(hwcId);
            }
            } else if ((layer->getDataSpace() == Dataspace::BT2020_HLG ||
            if ((layer->getDataSpace() == Dataspace::BT2020_HLG ||
                        layer->getDataSpace() == Dataspace::BT2020_ITU_HLG) &&
                        layer->getDataSpace() == Dataspace::BT2020_ITU_HLG) &&
                    !displayDevice->hasHLGSupport()) {
                    !displayDevice->hasHLGSupport()) {
                layer->forceClientComposition(hwcId);
                layer->forceClientComposition(hwcId);