@@ -169,7 +169,8 @@ sk_sp<SkShader> LutShader::generateLutShader(sk_sp<SkShader> input,
169169}
170170
171171sk_sp<SkShader> LutShader::lutShader (sk_sp<SkShader>& input,
172- std::shared_ptr<gui::DisplayLuts> displayLuts) {
172+ std::shared_ptr<gui::DisplayLuts> displayLuts,
173+ sk_sp<SkColorSpace> outColorSpace) {
173174 if (mBuilder == nullptr ) {
174175 const static SkRuntimeEffect::Result instance = SkRuntimeEffect::MakeForShader (kShader );
175176 mBuilder = std::make_unique<SkRuntimeShaderBuilder>(instance.effect );
@@ -179,14 +180,11 @@ sk_sp<SkShader> LutShader::lutShader(sk_sp<SkShader>& input,
179180 if (fd.ok ()) {
180181 // de-gamma the image without changing the primaries
181182 SkImage* baseImage = input->isAImage ((SkMatrix*)nullptr , (SkTileMode*)nullptr );
182- if (baseImage) {
183- sk_sp<SkColorSpace> baseColorSpace =
184- baseImage->colorSpace () ? baseImage->refColorSpace () : SkColorSpace::MakeSRGB ();
185- sk_sp<SkColorSpace> gainmapMathColorSpace = baseColorSpace->makeLinearGamma ();
186- auto colorXformSdrToGainmap =
187- SkColorFilterPriv::MakeColorSpaceXform (baseColorSpace, gainmapMathColorSpace);
188- input = input->makeWithColorFilter (colorXformSdrToGainmap);
189- }
183+ sk_sp<SkColorSpace> baseColorSpace = baseImage && baseImage->colorSpace ()
184+ ? baseImage->refColorSpace ()
185+ : SkColorSpace::MakeSRGB ();
186+ sk_sp<SkColorSpace> lutMathColorSpace = baseColorSpace->makeLinearGamma ();
187+ input = input->makeWithWorkingColorSpace (lutMathColorSpace);
190188
191189 auto & offsets = displayLuts->offsets ;
192190 auto & lutProperties = displayLuts->lutProperties ;
@@ -223,16 +221,9 @@ sk_sp<SkShader> LutShader::lutShader(sk_sp<SkShader>& input,
223221 lutProperties[i].samplingKey );
224222 }
225223
226- // re-gamma
227- baseImage = input->isAImage ((SkMatrix*)nullptr , (SkTileMode*)nullptr );
228- if (baseImage) {
229- sk_sp<SkColorSpace> baseColorSpace =
230- baseImage->colorSpace () ? baseImage->refColorSpace () : SkColorSpace::MakeSRGB ();
231- sk_sp<SkColorSpace> gainmapMathColorSpace = baseColorSpace->makeLinearGamma ();
232- auto colorXformGainmapToDst =
233- SkColorFilterPriv::MakeColorSpaceXform (gainmapMathColorSpace, baseColorSpace);
234- input = input->makeWithColorFilter (colorXformGainmapToDst);
235- }
224+ auto colorXformLutToDst =
225+ SkColorFilterPriv::MakeColorSpaceXform (lutMathColorSpace, outColorSpace);
226+ input = input->makeWithColorFilter (colorXformLutToDst);
236227 }
237228 return input;
238229}
0 commit comments