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

Commit bce04b30 authored by Alec Mouri's avatar Alec Mouri Committed by Automerger Merge Worker
Browse files

Merge "Fix extended range handling when Gamma OETF is used" into udc-d1-dev...

Merge "Fix extended range handling when Gamma OETF is used" into udc-d1-dev am: a34acd1a am: f17dadd6

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/native/+/24325778



Change-Id: Ib47ee022f56b61144a484a56226febfb8b25b69d
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 0ee66a51 f17dadd6
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -510,7 +510,8 @@ sk_sp<SkShader> SkiaRenderEngine::createRuntimeEffectShader(
        auto effect =
                shaders::LinearEffect{.inputDataspace = parameters.layer.sourceDataspace,
                                      .outputDataspace = parameters.outputDataSpace,
                                      .undoPremultipliedAlpha = parameters.undoPremultipliedAlpha};
                                      .undoPremultipliedAlpha = parameters.undoPremultipliedAlpha,
                                      .fakeOutputDataspace = parameters.fakeOutputDataspace};

        auto effectIter = mRuntimeEffects.find(effect);
        sk_sp<SkRuntimeEffect> runtimeEffect = nullptr;
@@ -906,12 +907,14 @@ void SkiaRenderEngine::drawLayersInternal(
                (display.outputDataspace & ui::Dataspace::TRANSFER_MASK) ==
                        static_cast<int32_t>(ui::Dataspace::TRANSFER_SRGB);

        const ui::Dataspace runtimeEffectDataspace = !dimInLinearSpace && isExtendedHdr
        const bool useFakeOutputDataspaceForRuntimeEffect = !dimInLinearSpace && isExtendedHdr;

        const ui::Dataspace fakeDataspace = useFakeOutputDataspaceForRuntimeEffect
                ? static_cast<ui::Dataspace>(
                          (display.outputDataspace & ui::Dataspace::STANDARD_MASK) |
                          ui::Dataspace::TRANSFER_GAMMA2_2 |
                          (display.outputDataspace & ui::Dataspace::RANGE_MASK))
                : display.outputDataspace;
                : ui::Dataspace::UNKNOWN;

        // If the input dataspace is range extended, the output dataspace transfer is sRGB
        // and dimmingStage is GAMMA_OETF, dim in linear space instead, and
@@ -1018,7 +1021,8 @@ void SkiaRenderEngine::drawLayersInternal(
                                                  .layerDimmingRatio = dimInLinearSpace
                                                          ? layerDimmingRatio
                                                          : 1.f,
                                                  .outputDataSpace = runtimeEffectDataspace}));
                                                  .outputDataSpace = display.outputDataspace,
                                                  .fakeOutputDataspace = fakeDataspace}));

            // Turn on dithering when dimming beyond this (arbitrary) threshold...
            static constexpr float kDimmingThreshold = 0.2f;
@@ -1082,7 +1086,8 @@ void SkiaRenderEngine::drawLayersInternal(
                                                  .undoPremultipliedAlpha = false,
                                                  .requiresLinearEffect = requiresLinearEffect,
                                                  .layerDimmingRatio = layerDimmingRatio,
                                                  .outputDataSpace = runtimeEffectDataspace}));
                                                  .outputDataSpace = display.outputDataspace,
                                                  .fakeOutputDataspace = fakeDataspace}));
        }

        if (layer.disableBlending) {
+1 −0
Original line number Diff line number Diff line
@@ -157,6 +157,7 @@ private:
        bool requiresLinearEffect;
        float layerDimmingRatio;
        const ui::Dataspace outputDataSpace;
        const ui::Dataspace fakeOutputDataspace;
    };
    sk_sp<SkShader> createRuntimeEffectShader(const RuntimeEffectShaderParameters&);

+2 −2
Original line number Diff line number Diff line
@@ -168,8 +168,8 @@ void generateOOTF(ui::Dataspace inputDataspace, ui::Dataspace outputDataspace,
void generateOETF(std::string& shader) {
    // Only support gamma 2.2 for now
    shader.append(R"(
        float OETF(float3 linear) {
            return sign(linear) * pow(abs(linear), (1.0 / 2.2));
        float3 OETF(float3 linear) {
            return sign(linear) * pow(abs(linear), float3(1.0 / 2.2));
        }
    )");
}