surfacefligner: revert recent BE/FE split changes
This reverts the following changes:
"SF: Restructure message refresh"
"SF: Add sideband stream setup to setUpHwComposer"
"SF: Support SolidColor layers in setUpHwComposer"
"SF: Move config of HWComposer to setupHwComposer"
"SF: Use CompositionInfo to program HWComposer"
Bug: 76421986
Bug: 76426897
Bug: 76432611
Test: manual and CTS
Change-Id: Ia0c5edaa3a077ba148c8880bee740381fd72f2ca
diff --git a/services/surfaceflinger/BufferLayer.cpp b/services/surfaceflinger/BufferLayer.cpp
index 916576a..7dad780 100644
--- a/services/surfaceflinger/BufferLayer.cpp
+++ b/services/surfaceflinger/BufferLayer.cpp
@@ -593,14 +593,32 @@
const auto& viewport = displayDevice->getViewport();
Region visible = tr.transform(visibleRegion.intersect(viewport));
auto hwcId = displayDevice->getHwcDisplayId();
+ auto& hwcInfo = getBE().mHwcLayers[hwcId];
+ auto& hwcLayer = hwcInfo.layer;
+ auto error = (*hwcLayer)->setVisibleRegion(visible);
+ if (error != HWC2::Error::None) {
+ ALOGE("[%s] Failed to set visible region: %s (%d)", mName.string(),
+ to_string(error).c_str(), static_cast<int32_t>(error));
+ visible.dump(LOG_TAG);
+ }
- getBE().compositionInfo.hwc.visibleRegion = visible;
- getBE().compositionInfo.hwc.surfaceDamage = surfaceDamageRegion;
+ error = (*hwcLayer)->setSurfaceDamage(surfaceDamageRegion);
+ if (error != HWC2::Error::None) {
+ ALOGE("[%s] Failed to set surface damage: %s (%d)", mName.string(),
+ to_string(error).c_str(), static_cast<int32_t>(error));
+ surfaceDamageRegion.dump(LOG_TAG);
+ }
// Sideband layers
if (getBE().compositionInfo.hwc.sidebandStream.get()) {
setCompositionType(hwcId, HWC2::Composition::Sideband);
- getBE().compositionInfo.compositionType = HWC2::Composition::Sideband;
+ ALOGV("[%s] Requesting Sideband composition", mName.string());
+ error = (*hwcLayer)->setSidebandStream(getBE().compositionInfo.hwc.sidebandStream->handle());
+ if (error != HWC2::Error::None) {
+ ALOGE("[%s] Failed to set sideband stream %p: %s (%d)", mName.string(),
+ getBE().compositionInfo.hwc.sidebandStream->handle(), to_string(error).c_str(),
+ static_cast<int32_t>(error));
+ }
return;
}
@@ -613,13 +631,32 @@
setCompositionType(hwcId, HWC2::Composition::Device);
}
- getBE().compositionInfo.hwc.dataspace = mDrawingState.dataSpace;
- getBE().compositionInfo.hwc.hdrMetadata = mConsumer->getCurrentHdrMetadata();
+ ALOGV("setPerFrameData: dataspace = %d", mDrawingState.dataSpace);
+ error = (*hwcLayer)->setDataspace(mDrawingState.dataSpace);
+ if (error != HWC2::Error::None) {
+ ALOGE("[%s] Failed to set dataspace %d: %s (%d)", mName.string(), mDrawingState.dataSpace,
+ to_string(error).c_str(), static_cast<int32_t>(error));
+ }
+
+ const HdrMetadata& metadata = mConsumer->getCurrentHdrMetadata();
+ error = (*hwcLayer)->setHdrMetadata(metadata);
+ if (error != HWC2::Error::None && error != HWC2::Error::Unsupported) {
+ ALOGE("[%s] Failed to set hdrMetadata: %s (%d)", mName.string(),
+ to_string(error).c_str(), static_cast<int32_t>(error));
+ }
+
+ uint32_t hwcSlot = 0;
+ sp<GraphicBuffer> hwcBuffer;
+ getBE().mHwcLayers[hwcId].bufferCache.getHwcBuffer(mActiveBufferSlot, mActiveBuffer, &hwcSlot,
+ &hwcBuffer);
auto acquireFence = mConsumer->getCurrentFence();
- getBE().compositionInfo.mBufferSlot = mActiveBufferSlot;
- getBE().compositionInfo.mBuffer = mActiveBuffer;
- getBE().compositionInfo.hwc.fence = acquireFence;
+ error = (*hwcLayer)->setBuffer(hwcSlot, hwcBuffer, acquireFence);
+ if (error != HWC2::Error::None) {
+ ALOGE("[%s] Failed to set buffer %p: %s (%d)", mName.string(),
+ getBE().compositionInfo.mBuffer->handle, to_string(error).c_str(),
+ static_cast<int32_t>(error));
+ }
}
bool BufferLayer::isOpaque(const Layer::State& s) const {
@@ -793,17 +830,27 @@
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;
+ //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);
+
if (mCurrentState.dataSpace == HAL_DATASPACE_BT2020_ITU_PQ &&
mConsumer->getCurrentApi() == NATIVE_WINDOW_API_MEDIA &&
getBE().compositionInfo.mBuffer->getPixelFormat() == HAL_PIXEL_FORMAT_RGBA_1010102) {
- getBE().compositionInfo.re.Y410BT2020 = true;
+ engine.setSourceY410BT2020(true);
}
+
+ engine.drawMesh(getBE().mMesh);
+ engine.disableBlending();
+
+ engine.setSourceY410BT2020(false);
}
uint32_t BufferLayer::getProducerStickyTransform() const {