Loading libs/renderengine/skia/SkiaRenderEngine.cpp +10 −5 Original line number Diff line number Diff line Loading @@ -511,7 +511,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; Loading Loading @@ -907,12 +908,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 Loading Loading @@ -1019,7 +1022,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; Loading Loading @@ -1083,7 +1087,8 @@ void SkiaRenderEngine::drawLayersInternal( .undoPremultipliedAlpha = false, .requiresLinearEffect = requiresLinearEffect, .layerDimmingRatio = layerDimmingRatio, .outputDataSpace = runtimeEffectDataspace})); .outputDataSpace = display.outputDataspace, .fakeOutputDataspace = fakeDataspace})); } if (layer.disableBlending) { Loading libs/renderengine/skia/SkiaRenderEngine.h +1 −0 Original line number Diff line number Diff line Loading @@ -157,6 +157,7 @@ private: bool requiresLinearEffect; float layerDimmingRatio; const ui::Dataspace outputDataSpace; const ui::Dataspace fakeOutputDataspace; }; sk_sp<SkShader> createRuntimeEffectShader(const RuntimeEffectShaderParameters&); Loading libs/shaders/shaders.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -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)); } )"); } Loading Loading
libs/renderengine/skia/SkiaRenderEngine.cpp +10 −5 Original line number Diff line number Diff line Loading @@ -511,7 +511,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; Loading Loading @@ -907,12 +908,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 Loading Loading @@ -1019,7 +1022,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; Loading Loading @@ -1083,7 +1087,8 @@ void SkiaRenderEngine::drawLayersInternal( .undoPremultipliedAlpha = false, .requiresLinearEffect = requiresLinearEffect, .layerDimmingRatio = layerDimmingRatio, .outputDataSpace = runtimeEffectDataspace})); .outputDataSpace = display.outputDataspace, .fakeOutputDataspace = fakeDataspace})); } if (layer.disableBlending) { Loading
libs/renderengine/skia/SkiaRenderEngine.h +1 −0 Original line number Diff line number Diff line Loading @@ -157,6 +157,7 @@ private: bool requiresLinearEffect; float layerDimmingRatio; const ui::Dataspace outputDataSpace; const ui::Dataspace fakeOutputDataspace; }; sk_sp<SkShader> createRuntimeEffectShader(const RuntimeEffectShaderParameters&); Loading
libs/shaders/shaders.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -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)); } )"); } Loading