summaryrefslogtreecommitdiff
path: root/services/surfaceflinger/SurfaceFlinger.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'services/surfaceflinger/SurfaceFlinger.cpp')
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp40
1 files changed, 15 insertions, 25 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 588d24c45f..c687e9db93 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -2963,10 +2963,8 @@ bool SurfaceFlinger::doComposeSurfaces(const sp<const DisplayDevice>& displayDev
ATRACE_INT("hasClientComposition", hasClientComposition);
bool applyColorMatrix = false;
- bool applyLegacyColorMatrix = false;
- mat4 colorMatrix;
- mat4 legacyColorMatrix;
- const mat4* currentColorMatrix = nullptr;
+ bool needsLegacyColorMatrix = false;
+ bool legacyColorMatrixApplied = false;
if (hasClientComposition) {
ALOGV("hasClientComposition");
@@ -2985,19 +2983,12 @@ bool SurfaceFlinger::doComposeSurfaces(const sp<const DisplayDevice>& displayDev
applyColorMatrix = !hasDeviceComposition && !skipClientColorTransform;
if (applyColorMatrix) {
- colorMatrix = mDrawingState.colorMatrix;
+ getRenderEngine().setupColorTransform(mDrawingState.colorMatrix);
}
- applyLegacyColorMatrix = (mDisplayColorSetting == DisplayColorSetting::ENHANCED &&
+ needsLegacyColorMatrix = (mDisplayColorSetting == DisplayColorSetting::ENHANCED &&
outputDataspace != Dataspace::UNKNOWN &&
outputDataspace != Dataspace::SRGB);
- if (applyLegacyColorMatrix) {
- if (applyColorMatrix) {
- legacyColorMatrix = colorMatrix * mLegacySrgbSaturationMatrix;
- } else {
- legacyColorMatrix = mLegacySrgbSaturationMatrix;
- }
- }
if (!displayDevice->makeCurrent()) {
ALOGW("DisplayDevice::makeCurrent failed. Aborting surface composition for display %s",
@@ -3085,18 +3076,14 @@ bool SurfaceFlinger::doComposeSurfaces(const sp<const DisplayDevice>& displayDev
}
case HWC2::Composition::Client: {
// switch color matrices lazily
- if (layer->isLegacyDataSpace()) {
- if (applyLegacyColorMatrix && currentColorMatrix != &legacyColorMatrix) {
- // TODO(b/78891890) Legacy sRGB saturation matrix should be set
- // separately.
- getRenderEngine().setupColorTransform(legacyColorMatrix);
- currentColorMatrix = &legacyColorMatrix;
- }
- } else {
- if (applyColorMatrix && currentColorMatrix != &colorMatrix) {
- getRenderEngine().setupColorTransform(colorMatrix);
- currentColorMatrix = &colorMatrix;
+ if (layer->isLegacyDataSpace() && needsLegacyColorMatrix) {
+ if (!legacyColorMatrixApplied) {
+ getRenderEngine().setSaturationMatrix(mLegacySrgbSaturationMatrix);
+ legacyColorMatrixApplied = true;
}
+ } else if (legacyColorMatrixApplied) {
+ getRenderEngine().setSaturationMatrix(mat4());
+ legacyColorMatrixApplied = false;
}
layer->draw(renderArea, clip);
@@ -3111,9 +3098,12 @@ bool SurfaceFlinger::doComposeSurfaces(const sp<const DisplayDevice>& displayDev
firstLayer = false;
}
- if (applyColorMatrix || applyLegacyColorMatrix) {
+ if (applyColorMatrix) {
getRenderEngine().setupColorTransform(mat4());
}
+ if (needsLegacyColorMatrix && legacyColorMatrixApplied) {
+ getRenderEngine().setSaturationMatrix(mat4());
+ }
// disable scissor at the end of the frame
getBE().mRenderEngine->disableScissor();