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

Commit 6773c78f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "SF: Support SolidColor layers in setUpHwComposer"

parents 5487f60d 14fe0367
Loading
Loading
Loading
Loading
+7 −17
Original line number Diff line number Diff line
@@ -794,27 +794,17 @@ void BufferLayer::drawWithOpenGL(const RenderArea& renderArea, bool useIdentityT
    texCoords[2] = vec2(right, 1.0f - bottom);
    texCoords[3] = vec2(right, 1.0f - top);

    //getBE().compositionInfo.re.preMultipliedAlpha = mPremultipliedAlpha;
    //getBE().compositionInfo.re.opaque = isOpaque(s);
    //getBE().compositionInfo.re.disableTexture = false;
    //getBE().compositionInfo.re.color = getColor();
    //getBE().compositionInfo.hwc.dataspace = mCurrentState.dataSpace;

  auto& engine(mFlinger->getRenderEngine());
    engine.setupLayerBlending(mPremultipliedAlpha, isOpaque(s), false /* disableTexture */,
                              getColor());
    engine.setSourceDataSpace(mCurrentState.dataSpace);
    getBE().compositionInfo.re.preMultipliedAlpha = mPremultipliedAlpha;
    getBE().compositionInfo.re.opaque = isOpaque(s);
    getBE().compositionInfo.re.disableTexture = false;
    getBE().compositionInfo.re.color = getColor();
    getBE().compositionInfo.hwc.dataspace = mCurrentState.dataSpace;

    if (mCurrentState.dataSpace == HAL_DATASPACE_BT2020_ITU_PQ &&
        mConsumer->getCurrentApi() == NATIVE_WINDOW_API_MEDIA &&
        getBE().compositionInfo.mBuffer->getPixelFormat() == HAL_PIXEL_FORMAT_RGBA_1010102) {
        engine.setSourceY410BT2020(true);
        getBE().compositionInfo.re.Y410BT2020 = true;
    }

    engine.drawMesh(getBE().mMesh);
    engine.disableBlending();

    engine.setSourceY410BT2020(false);
}

uint32_t BufferLayer::getProducerStickyTransform() const {
+57 −62
Original line number Diff line number Diff line
@@ -1967,21 +1967,18 @@ android_dataspace SurfaceFlinger::bestTargetDataSpace(
    return HAL_DATASPACE_V0_SRGB;
}

void SurfaceFlinger::configureDeviceComposition(const CompositionInfo& compositionInfo) const
void SurfaceFlinger::configureHwcCommonData(const CompositionInfo& compositionInfo) const
{
    HWC2::Error error;

    if (!compositionInfo.hwc.skipGeometry) {
        if (compositionInfo.hwc.blendMode != HWC2::BlendMode::Invalid) {
        error = (*compositionInfo.hwc.hwcLayer)->setBlendMode(compositionInfo.hwc.blendMode);
        ALOGE_IF(error != HWC2::Error::None,
                 "[SF] Failed to set blend mode %s:"
                 " %s (%d)",
                 to_string(compositionInfo.hwc.blendMode).c_str(), to_string(error).c_str(),
                 static_cast<int32_t>(error));
        }

        if (compositionInfo.hwc.displayFrame.isValid()) {
        error = (*compositionInfo.hwc.hwcLayer)->setDisplayFrame(compositionInfo.hwc.displayFrame);
        ALOGE_IF(error != HWC2::Error::None,
                "[SF] Failed to set the display frame [%d, %d, %d, %d] %s (%d)",
@@ -1990,9 +1987,7 @@ void SurfaceFlinger::configureDeviceComposition(const CompositionInfo& compositi
                compositionInfo.hwc.displayFrame.top,
                compositionInfo.hwc.displayFrame.bottom,
                to_string(error).c_str(), static_cast<int32_t>(error));
        }

        if ((compositionInfo.hwc.sourceCrop.getWidth() > 0) && (compositionInfo.hwc.sourceCrop.getHeight() > 0)) {
        error = (*compositionInfo.hwc.hwcLayer)->setSourceCrop(compositionInfo.hwc.sourceCrop);
        ALOGE_IF(error != HWC2::Error::None,
                "[SF] Failed to set source crop [%.3f, %.3f, %.3f, %.3f]: %s (%d)",
@@ -2001,7 +1996,6 @@ void SurfaceFlinger::configureDeviceComposition(const CompositionInfo& compositi
                compositionInfo.hwc.sourceCrop.top,
                compositionInfo.hwc.sourceCrop.bottom,
                to_string(error).c_str(), static_cast<int32_t>(error));
        }

        error = (*compositionInfo.hwc.hwcLayer)->setPlaneAlpha(compositionInfo.hwc.alpha);
        ALOGE_IF(error != HWC2::Error::None,
@@ -2017,12 +2011,12 @@ void SurfaceFlinger::configureDeviceComposition(const CompositionInfo& compositi
                compositionInfo.hwc.z,
                to_string(error).c_str(), static_cast<int32_t>(error));

        error = (*compositionInfo.hwc.hwcLayer)->setInfo(compositionInfo.hwc.type, compositionInfo.hwc.appId);
        error = (*compositionInfo.hwc.hwcLayer)
                        ->setInfo(compositionInfo.hwc.type, compositionInfo.hwc.appId);
        ALOGE_IF(error != HWC2::Error::None,
                "[SF] Failed to set info (%d)",
                static_cast<int32_t>(error));

        if (compositionInfo.hwc.transform != HWC2::Transform::None) {
        error = (*compositionInfo.hwc.hwcLayer)->setTransform(compositionInfo.hwc.transform);
        ALOGE_IF(error != HWC2::Error::None,
                 "[SF] Failed to set transform %s: "
@@ -2030,21 +2024,6 @@ void SurfaceFlinger::configureDeviceComposition(const CompositionInfo& compositi
                 to_string(compositionInfo.hwc.transform).c_str(), to_string(error).c_str(),
                 static_cast<int32_t>(error));
    }
    }

    if (!compositionInfo.hwc.visibleRegion.isEmpty()) {
        error = (*compositionInfo.hwc.hwcLayer)->setVisibleRegion(compositionInfo.hwc.visibleRegion);
        ALOGE_IF(error != HWC2::Error::None,
                "[SF] Failed to set visible region: %s (%d)",
                to_string(error).c_str(), static_cast<int32_t>(error));
    }

    if (!compositionInfo.hwc.surfaceDamage.isEmpty()) {
        error = (*compositionInfo.hwc.hwcLayer)->setSurfaceDamage(compositionInfo.hwc.surfaceDamage);
        ALOGE_IF(error != HWC2::Error::None,
                "[SF] Failed to set surface damage: %s (%d)",
                to_string(error).c_str(), static_cast<int32_t>(error));
    }

    error = (*compositionInfo.hwc.hwcLayer)->setCompositionType(compositionInfo.compositionType);
    ALOGE_IF(error != HWC2::Error::None,
@@ -2061,6 +2040,26 @@ void SurfaceFlinger::configureDeviceComposition(const CompositionInfo& compositi
            "[SF] Failed to set hdrMetadata: %s (%d)",
            to_string(error).c_str(), static_cast<int32_t>(error));

    error = (*compositionInfo.hwc.hwcLayer)->setColor(compositionInfo.hwc.color);
    ALOGE_IF(error != HWC2::Error::None,
            "[SF] Failed to set color: %s (%d)",
            to_string(error).c_str(), static_cast<int32_t>(error));

    error = (*compositionInfo.hwc.hwcLayer)->setVisibleRegion(compositionInfo.hwc.visibleRegion);
    ALOGE_IF(error != HWC2::Error::None,
            "[SF] Failed to set visible region: %s (%d)",
            to_string(error).c_str(), static_cast<int32_t>(error));
}

void SurfaceFlinger::configureDeviceComposition(const CompositionInfo& compositionInfo) const
{
    HWC2::Error error;

    error = (*compositionInfo.hwc.hwcLayer)->setSurfaceDamage(compositionInfo.hwc.surfaceDamage);
    ALOGE_IF(error != HWC2::Error::None,
            "[SF] Failed to set surface damage: %s (%d)",
            to_string(error).c_str(), static_cast<int32_t>(error));

    if (compositionInfo.updateBuffer) {
        error = (*compositionInfo.hwc.hwcLayer)->setBuffer(compositionInfo.mBufferSlot,
                compositionInfo.mBuffer, compositionInfo.hwc.fence);
@@ -2113,21 +2112,17 @@ void SurfaceFlinger::setUpHWComposer() {
            switch (compositionInfo.compositionType)
            {
                case HWC2::Composition::Invalid:
                    break;

                case HWC2::Composition::Client:
                    break;

                case HWC2::Composition::SolidColor:
                    break;

                case HWC2::Composition::Cursor:
                case HWC2::Composition::Sideband:
                    break;

                case HWC2::Composition::Sideband:
                case HWC2::Composition::SolidColor:
                    configureHwcCommonData(compositionInfo);
                    break;

                case HWC2::Composition::Device:
                    configureHwcCommonData(compositionInfo);
                    configureDeviceComposition(compositionInfo);
                break;
            }
+1 −0
Original line number Diff line number Diff line
@@ -742,6 +742,7 @@ private:

    // helper methods
    void configureDeviceComposition(const CompositionInfo& compositionInfo) const;
    void configureHwcCommonData(const CompositionInfo& compositionInfo) const;

    // constant members (no synchronization needed for access)
    nsecs_t mBootTime;