diff options
author | 2025-01-09 22:01:04 -0800 | |
---|---|---|
committer | 2025-01-10 18:18:05 -0800 | |
commit | 1ed7dec9b3a047e6d4c61a019ba7934f737cf900 (patch) | |
tree | 766ce02560e1fcdce2f13f12a03e69fe7e74aa96 | |
parent | a17adea50dce1ca2b360a83edbe50903b33526b3 (diff) |
[Lut] in client composition, we should pass hwc.luts into lutShader to
render the layer
Bug: 380894872
Test: libcompositionengine_test
Flag: EXEMPT the lut is protected under the pointer
Change-Id: I3c326ba4dd3e4c42dcdd776a229495d446f97562
3 files changed, 6 insertions, 2 deletions
diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/LayerFE.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/LayerFE.h index 20aceb1a82..42e1a1922d 100644 --- a/services/surfaceflinger/CompositionEngine/include/compositionengine/LayerFE.h +++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/LayerFE.h @@ -121,6 +121,8 @@ public: // True if layers with 170M dataspace should be overridden to sRGB. const bool treat170mAsSrgb; + + std::shared_ptr<gui::DisplayLuts> luts; }; // A superset of LayerSettings required by RenderEngine to compose a layer diff --git a/services/surfaceflinger/CompositionEngine/src/Output.cpp b/services/surfaceflinger/CompositionEngine/src/Output.cpp index 734d76404e..de1d13a8d1 100644 --- a/services/surfaceflinger/CompositionEngine/src/Output.cpp +++ b/services/surfaceflinger/CompositionEngine/src/Output.cpp @@ -1564,7 +1564,9 @@ std::vector<LayerFE::LayerSettings> Output::generateClientCompositionRequests( .clearContent = !clientComposition, .blurSetting = blurSetting, .whitePointNits = layerState.whitePointNits, - .treat170mAsSrgb = outputState.treat170mAsSrgb}; + .treat170mAsSrgb = outputState.treat170mAsSrgb, + .luts = layer->getState().hwc ? layer->getState().hwc->luts + : nullptr}; if (auto clientCompositionSettings = layerFE.prepareClientComposition(targetSettings)) { clientCompositionLayers.push_back(std::move(*clientCompositionSettings)); diff --git a/services/surfaceflinger/LayerFE.cpp b/services/surfaceflinger/LayerFE.cpp index dbb1ed3a9f..e331e68c35 100644 --- a/services/surfaceflinger/LayerFE.cpp +++ b/services/surfaceflinger/LayerFE.cpp @@ -173,7 +173,7 @@ std::optional<compositionengine::LayerFE::LayerSettings> LayerFE::prepareClientC layerSettings.edgeExtensionEffect = mSnapshot->edgeExtensionEffect; // Record the name of the layer for debugging further down the stack. layerSettings.name = mSnapshot->name; - layerSettings.luts = mSnapshot->luts; + layerSettings.luts = mSnapshot->luts ? mSnapshot->luts : targetSettings.luts; if (hasEffect() && !hasBufferOrSidebandStream()) { prepareEffectsClientComposition(layerSettings, targetSettings); |