Loading services/surfaceflinger/BufferLayer.cpp +7 −17 Original line number Diff line number Diff line Loading @@ -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 { Loading services/surfaceflinger/SurfaceFlinger.cpp +57 −62 Original line number Diff line number Diff line Loading @@ -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)", Loading @@ -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)", Loading @@ -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, Loading @@ -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: " Loading @@ -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, Loading @@ -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); Loading Loading @@ -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; } Loading services/surfaceflinger/SurfaceFlinger.h +1 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading
services/surfaceflinger/BufferLayer.cpp +7 −17 Original line number Diff line number Diff line Loading @@ -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 { Loading
services/surfaceflinger/SurfaceFlinger.cpp +57 −62 Original line number Diff line number Diff line Loading @@ -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)", Loading @@ -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)", Loading @@ -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, Loading @@ -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: " Loading @@ -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, Loading @@ -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); Loading Loading @@ -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; } Loading
services/surfaceflinger/SurfaceFlinger.h +1 −0 Original line number Diff line number Diff line Loading @@ -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; Loading