Loading libs/renderengine/skia/SkiaRenderEngine.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -544,7 +544,8 @@ sk_sp<SkShader> SkiaRenderEngine::createRuntimeEffectShader( } if (graphicBuffer && parameters.layer.luts) { shader = mLutShader.lutShader(shader, parameters.layer.luts); shader = mLutShader.lutShader(shader, parameters.layer.luts, toSkColorSpace(parameters.outputDataSpace)); } if (parameters.requiresLinearEffect) { Loading libs/renderengine/skia/filters/LutShader.cpp +10 −19 Original line number Diff line number Diff line Loading @@ -169,7 +169,8 @@ sk_sp<SkShader> LutShader::generateLutShader(sk_sp<SkShader> input, } sk_sp<SkShader> LutShader::lutShader(sk_sp<SkShader>& input, std::shared_ptr<gui::DisplayLuts> displayLuts) { std::shared_ptr<gui::DisplayLuts> displayLuts, sk_sp<SkColorSpace> outColorSpace) { if (mBuilder == nullptr) { const static SkRuntimeEffect::Result instance = SkRuntimeEffect::MakeForShader(kShader); mBuilder = std::make_unique<SkRuntimeShaderBuilder>(instance.effect); Loading @@ -179,14 +180,11 @@ sk_sp<SkShader> LutShader::lutShader(sk_sp<SkShader>& input, if (fd.ok()) { // de-gamma the image without changing the primaries SkImage* baseImage = input->isAImage((SkMatrix*)nullptr, (SkTileMode*)nullptr); if (baseImage) { sk_sp<SkColorSpace> baseColorSpace = baseImage->colorSpace() ? baseImage->refColorSpace() : SkColorSpace::MakeSRGB(); sk_sp<SkColorSpace> gainmapMathColorSpace = baseColorSpace->makeLinearGamma(); auto colorXformSdrToGainmap = SkColorFilterPriv::MakeColorSpaceXform(baseColorSpace, gainmapMathColorSpace); input = input->makeWithColorFilter(colorXformSdrToGainmap); } sk_sp<SkColorSpace> baseColorSpace = baseImage && baseImage->colorSpace() ? baseImage->refColorSpace() : SkColorSpace::MakeSRGB(); sk_sp<SkColorSpace> lutMathColorSpace = baseColorSpace->makeLinearGamma(); input = input->makeWithWorkingColorSpace(lutMathColorSpace); auto& offsets = displayLuts->offsets; auto& lutProperties = displayLuts->lutProperties; Loading Loading @@ -223,16 +221,9 @@ sk_sp<SkShader> LutShader::lutShader(sk_sp<SkShader>& input, lutProperties[i].samplingKey); } // re-gamma baseImage = input->isAImage((SkMatrix*)nullptr, (SkTileMode*)nullptr); if (baseImage) { sk_sp<SkColorSpace> baseColorSpace = baseImage->colorSpace() ? baseImage->refColorSpace() : SkColorSpace::MakeSRGB(); sk_sp<SkColorSpace> gainmapMathColorSpace = baseColorSpace->makeLinearGamma(); auto colorXformGainmapToDst = SkColorFilterPriv::MakeColorSpaceXform(gainmapMathColorSpace, baseColorSpace); input = input->makeWithColorFilter(colorXformGainmapToDst); } auto colorXformLutToDst = SkColorFilterPriv::MakeColorSpaceXform(lutMathColorSpace, outColorSpace); input = input->makeWithColorFilter(colorXformLutToDst); } return input; } Loading libs/renderengine/skia/filters/LutShader.h +2 −2 Original line number Diff line number Diff line Loading @@ -28,8 +28,8 @@ namespace skia { class LutShader { public: sk_sp<SkShader> lutShader(sk_sp<SkShader>& input, std::shared_ptr<gui::DisplayLuts> displayLuts); sk_sp<SkShader> lutShader(sk_sp<SkShader>& input, std::shared_ptr<gui::DisplayLuts> displayLuts, sk_sp<SkColorSpace> outColorSpace); private: sk_sp<SkShader> generateLutShader(sk_sp<SkShader> input, const std::vector<float>& buffers, Loading Loading
libs/renderengine/skia/SkiaRenderEngine.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -544,7 +544,8 @@ sk_sp<SkShader> SkiaRenderEngine::createRuntimeEffectShader( } if (graphicBuffer && parameters.layer.luts) { shader = mLutShader.lutShader(shader, parameters.layer.luts); shader = mLutShader.lutShader(shader, parameters.layer.luts, toSkColorSpace(parameters.outputDataSpace)); } if (parameters.requiresLinearEffect) { Loading
libs/renderengine/skia/filters/LutShader.cpp +10 −19 Original line number Diff line number Diff line Loading @@ -169,7 +169,8 @@ sk_sp<SkShader> LutShader::generateLutShader(sk_sp<SkShader> input, } sk_sp<SkShader> LutShader::lutShader(sk_sp<SkShader>& input, std::shared_ptr<gui::DisplayLuts> displayLuts) { std::shared_ptr<gui::DisplayLuts> displayLuts, sk_sp<SkColorSpace> outColorSpace) { if (mBuilder == nullptr) { const static SkRuntimeEffect::Result instance = SkRuntimeEffect::MakeForShader(kShader); mBuilder = std::make_unique<SkRuntimeShaderBuilder>(instance.effect); Loading @@ -179,14 +180,11 @@ sk_sp<SkShader> LutShader::lutShader(sk_sp<SkShader>& input, if (fd.ok()) { // de-gamma the image without changing the primaries SkImage* baseImage = input->isAImage((SkMatrix*)nullptr, (SkTileMode*)nullptr); if (baseImage) { sk_sp<SkColorSpace> baseColorSpace = baseImage->colorSpace() ? baseImage->refColorSpace() : SkColorSpace::MakeSRGB(); sk_sp<SkColorSpace> gainmapMathColorSpace = baseColorSpace->makeLinearGamma(); auto colorXformSdrToGainmap = SkColorFilterPriv::MakeColorSpaceXform(baseColorSpace, gainmapMathColorSpace); input = input->makeWithColorFilter(colorXformSdrToGainmap); } sk_sp<SkColorSpace> baseColorSpace = baseImage && baseImage->colorSpace() ? baseImage->refColorSpace() : SkColorSpace::MakeSRGB(); sk_sp<SkColorSpace> lutMathColorSpace = baseColorSpace->makeLinearGamma(); input = input->makeWithWorkingColorSpace(lutMathColorSpace); auto& offsets = displayLuts->offsets; auto& lutProperties = displayLuts->lutProperties; Loading Loading @@ -223,16 +221,9 @@ sk_sp<SkShader> LutShader::lutShader(sk_sp<SkShader>& input, lutProperties[i].samplingKey); } // re-gamma baseImage = input->isAImage((SkMatrix*)nullptr, (SkTileMode*)nullptr); if (baseImage) { sk_sp<SkColorSpace> baseColorSpace = baseImage->colorSpace() ? baseImage->refColorSpace() : SkColorSpace::MakeSRGB(); sk_sp<SkColorSpace> gainmapMathColorSpace = baseColorSpace->makeLinearGamma(); auto colorXformGainmapToDst = SkColorFilterPriv::MakeColorSpaceXform(gainmapMathColorSpace, baseColorSpace); input = input->makeWithColorFilter(colorXformGainmapToDst); } auto colorXformLutToDst = SkColorFilterPriv::MakeColorSpaceXform(lutMathColorSpace, outColorSpace); input = input->makeWithColorFilter(colorXformLutToDst); } return input; } Loading
libs/renderengine/skia/filters/LutShader.h +2 −2 Original line number Diff line number Diff line Loading @@ -28,8 +28,8 @@ namespace skia { class LutShader { public: sk_sp<SkShader> lutShader(sk_sp<SkShader>& input, std::shared_ptr<gui::DisplayLuts> displayLuts); sk_sp<SkShader> lutShader(sk_sp<SkShader>& input, std::shared_ptr<gui::DisplayLuts> displayLuts, sk_sp<SkColorSpace> outColorSpace); private: sk_sp<SkShader> generateLutShader(sk_sp<SkShader> input, const std::vector<float>& buffers, Loading