| Index: src/core/SkColorSpaceXform.cpp
|
| diff --git a/src/core/SkColorSpaceXform.cpp b/src/core/SkColorSpaceXform.cpp
|
| index d655d162faf9599c7668564c478034fc9e86fe1b..ce2c961a2b53467d5de2b3ce2f770b0daed57213 100644
|
| --- a/src/core/SkColorSpaceXform.cpp
|
| +++ b/src/core/SkColorSpaceXform.cpp
|
| @@ -665,6 +665,43 @@ void SkColorSpaceXform_Base<SkColorSpace::kNonStandard_GammaNamed>
|
|
|
| template <>
|
| void SkColorSpaceXform_Base<SkColorSpace::kSRGB_GammaNamed>
|
| +::applyToRGBAPremul(SkPMColor* dst, const RGBA32* src, int len) const
|
| +{
|
| + if (fColorLUT) {
|
| + handle_color_lut(dst, src, len, fColorLUT.get());
|
| + src = dst;
|
| + }
|
| +
|
| + SkOpts::color_xform_RGB1_to_srgb_premul(dst, src, len, fSrcGammaTables, fSrcToDst);
|
| +}
|
| +
|
| +template <>
|
| +void SkColorSpaceXform_Base<SkColorSpace::k2Dot2Curve_GammaNamed>
|
| +::applyToRGBAPremul(SkPMColor* dst, const RGBA32* src, int len) const
|
| +{
|
| + if (fColorLUT) {
|
| + handle_color_lut(dst, src, len, fColorLUT.get());
|
| + src = dst;
|
| + }
|
| +
|
| + SkOpts::color_xform_RGB1_to_2dot2_premul(dst, src, len, fSrcGammaTables, fSrcToDst);
|
| +}
|
| +
|
| +template <>
|
| +void SkColorSpaceXform_Base<SkColorSpace::kNonStandard_GammaNamed>
|
| +::applyToRGBAPremul(SkPMColor* dst, const RGBA32* src, int len) const
|
| +{
|
| + if (fColorLUT) {
|
| + handle_color_lut(dst, src, len, fColorLUT.get());
|
| + src = dst;
|
| + }
|
| +
|
| + SkOpts::color_xform_RGB1_to_table_premul(dst, src, len, fSrcGammaTables, fSrcToDst,
|
| + fDstGammaTables);
|
| +}
|
| +
|
| +template <>
|
| +void SkColorSpaceXform_Base<SkColorSpace::kSRGB_GammaNamed>
|
| ::applyToBGRA(SkPMColor* dst, const RGBA32* src, int len) const
|
| {
|
| if (fColorLUT) {
|
| @@ -700,6 +737,43 @@ void SkColorSpaceXform_Base<SkColorSpace::kNonStandard_GammaNamed>
|
| fDstGammaTables);
|
| }
|
|
|
| +template <>
|
| +void SkColorSpaceXform_Base<SkColorSpace::kSRGB_GammaNamed>
|
| +::applyToBGRAPremul(SkPMColor* dst, const RGBA32* src, int len) const
|
| +{
|
| + if (fColorLUT) {
|
| + handle_color_lut(dst, src, len, fColorLUT.get());
|
| + src = dst;
|
| + }
|
| +
|
| + SkOpts::color_xform_RGB1_to_srgb_premul_swaprb(dst, src, len, fSrcGammaTables, fSrcToDst);
|
| +}
|
| +
|
| +template <>
|
| +void SkColorSpaceXform_Base<SkColorSpace::k2Dot2Curve_GammaNamed>
|
| +::applyToBGRAPremul(SkPMColor* dst, const RGBA32* src, int len) const
|
| +{
|
| + if (fColorLUT) {
|
| + handle_color_lut(dst, src, len, fColorLUT.get());
|
| + src = dst;
|
| + }
|
| +
|
| + SkOpts::color_xform_RGB1_to_2dot2_premul_swaprb(dst, src, len, fSrcGammaTables, fSrcToDst);
|
| +}
|
| +
|
| +template <>
|
| +void SkColorSpaceXform_Base<SkColorSpace::kNonStandard_GammaNamed>
|
| +::applyToBGRAPremul(SkPMColor* dst, const RGBA32* src, int len) const
|
| +{
|
| + if (fColorLUT) {
|
| + handle_color_lut(dst, src, len, fColorLUT.get());
|
| + src = dst;
|
| + }
|
| +
|
| + SkOpts::color_xform_RGB1_to_table_premul_swaprb(dst, src, len, fSrcGammaTables, fSrcToDst,
|
| + fDstGammaTables);
|
| +}
|
| +
|
| template <SkColorSpace::GammaNamed T>
|
| void SkColorSpaceXform_Base<T>
|
| ::applyToF16(RGBAF16* dst, const RGBA32* src, int len) const
|
| @@ -714,3 +788,49 @@ void SkColorSpaceXform_Base<T>
|
|
|
| SkOpts::color_xform_RGB1_to_linear(dst, src, len, fSrcGammaTables, fSrcToDst);
|
| }
|
| +
|
| +template <SkColorSpace::GammaNamed T>
|
| +void SkColorSpaceXform_Base<T>
|
| +::applyToF16Premul(RGBAF16* dst, const RGBA32* src, int len) const
|
| +{
|
| + if (fColorLUT) {
|
| + size_t storageBytes = len * sizeof(RGBA32);
|
| + fStorage.reset(storageBytes);
|
| +
|
| + handle_color_lut((RGBA32*) fStorage.get(), src, len, fColorLUT.get());
|
| + src = (const RGBA32*) fStorage.get();
|
| + }
|
| +
|
| + SkOpts::color_xform_RGB1_to_linear_premul(dst, src, len, fSrcGammaTables, fSrcToDst);
|
| +}
|
| +
|
| +template <SkColorSpace::GammaNamed T>
|
| +void SkColorSpaceXform_Base<T>
|
| +::apply(void* dst, const RGBA32* src, int len, SkColorType dstColorType, bool premul) const
|
| +{
|
| + if (premul) {
|
| + switch (dstColorType) {
|
| + case kRGBA_8888_SkColorType:
|
| + return this->applyToRGBAPremul((RGBA32*) dst, src, len);
|
| + case kBGRA_8888_SkColorType:
|
| + return this->applyToBGRAPremul((BGRA32*) dst, src, len);
|
| + case kRGBA_F16_SkColorType:
|
| + return this->applyToF16Premul((RGBAF16*) dst, src, len);
|
| + default:
|
| + SkASSERT(false);
|
| + return;
|
| + }
|
| + }
|
| +
|
| + switch (dstColorType) {
|
| + case kRGBA_8888_SkColorType:
|
| + return this->applyToRGBA((RGBA32*) dst, src, len);
|
| + case kBGRA_8888_SkColorType:
|
| + return this->applyToBGRA((BGRA32*) dst, src, len);
|
| + case kRGBA_F16_SkColorType:
|
| + return this->applyToF16((RGBAF16*) dst, src, len);
|
| + default:
|
| + SkASSERT(false);
|
| + return;
|
| + }
|
| +}
|
|
|