| Index: src/core/SkColorSpaceXform.cpp
|
| diff --git a/src/core/SkColorSpaceXform.cpp b/src/core/SkColorSpaceXform.cpp
|
| index 1c0dd880e779669e2ae6ef186eb6ee1e342c29ac..beca9034d1a1898b12c49a809cc4e875fa19f7c9 100644
|
| --- a/src/core/SkColorSpaceXform.cpp
|
| +++ b/src/core/SkColorSpaceXform.cpp
|
| @@ -8,7 +8,7 @@
|
| #include "SkColorPriv.h"
|
| #include "SkColorSpace_Base.h"
|
| #include "SkColorSpacePriv.h"
|
| -#include "SkColorSpaceXform.h"
|
| +#include "SkColorSpaceXform_Base.h"
|
| #include "SkHalf.h"
|
| #include "SkOpts.h"
|
| #include "SkSRGB.h"
|
| @@ -584,8 +584,9 @@ static void interp_3d_clut(float dst[3], float src[3], const SkColorLookUpTable*
|
| }
|
| }
|
|
|
| -static void handle_color_lut(uint32_t* dst, const uint32_t* src, int len,
|
| +static void handle_color_lut(uint32_t* dst, const void* vsrc, int len,
|
| SkColorLookUpTable* colorLUT) {
|
| + const uint32_t* src = (const uint32_t*) vsrc;
|
| while (len-- > 0) {
|
| uint8_t r = (*src >> 0) & 0xFF,
|
| g = (*src >> 8) & 0xFF,
|
| @@ -1012,10 +1013,11 @@ typedef decltype(store_generic_1<kRGBA_Order> )* Store1Fn;
|
|
|
| template <SkAlphaType kAlphaType,
|
| ColorSpaceMatch kCSM>
|
| -static inline void do_color_xform(void* dst, const uint32_t* src, int len,
|
| +static inline void do_color_xform(void* dst, const void* vsrc, int len,
|
| const float* const srcTables[3], const float matrix[16],
|
| const uint8_t* const dstTables[3], LoadFn load, Load1Fn load_1,
|
| StoreFn store, Store1Fn store_1, size_t sizeOfDstPixel) {
|
| + const uint32_t* src = (const uint32_t*) vsrc;
|
| Sk4f rXgXbX, rYgYbY, rZgZbZ, rTgTbT;
|
| load_matrix(matrix, rXgXbX, rYgYbY, rZgZbZ, rTgTbT);
|
|
|
| @@ -1117,7 +1119,7 @@ template <SrcFormat kSrc,
|
| DstFormat kDst,
|
| SkAlphaType kAlphaType,
|
| ColorSpaceMatch kCSM>
|
| -static void color_xform_RGBA(void* dst, const uint32_t* src, int len,
|
| +static void color_xform_RGBA(void* dst, const void* src, int len,
|
| const float* const srcTables[3], const float matrix[16],
|
| const uint8_t* const dstTables[3]) {
|
| LoadFn load;
|
| @@ -1276,27 +1278,29 @@ SkColorSpaceXform_Base<kSrc, kDst, kCSM>
|
| ///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
| template <SrcFormat kSrc, DstFormat kDst, ColorSpaceMatch kCSM>
|
| -static inline void apply_set_alpha(void* dst, const uint32_t* src, int len, SkAlphaType alphaType,
|
| +static inline bool apply_set_alpha(void* dst, const void* src, int len, SkAlphaType alphaType,
|
| const float* const srcTables[3], const float matrix[16],
|
| const uint8_t* const dstTables[3]) {
|
| switch (alphaType) {
|
| case kOpaque_SkAlphaType:
|
| - return color_xform_RGBA<kSrc, kDst, kOpaque_SkAlphaType, kCSM>
|
| + color_xform_RGBA<kSrc, kDst, kOpaque_SkAlphaType, kCSM>
|
| (dst, src, len, srcTables, matrix, dstTables);
|
| + return true;
|
| case kPremul_SkAlphaType:
|
| - return color_xform_RGBA<kSrc, kDst, kPremul_SkAlphaType, kCSM>
|
| + color_xform_RGBA<kSrc, kDst, kPremul_SkAlphaType, kCSM>
|
| (dst, src, len, srcTables, matrix, dstTables);
|
| + return true;
|
| case kUnpremul_SkAlphaType:
|
| - return color_xform_RGBA<kSrc, kDst, kUnpremul_SkAlphaType, kCSM>
|
| + color_xform_RGBA<kSrc, kDst, kUnpremul_SkAlphaType, kCSM>
|
| (dst, src, len, srcTables, matrix, dstTables);
|
| + return true;
|
| default:
|
| - SkASSERT(false);
|
| - return;
|
| + return false;
|
| }
|
| }
|
|
|
| template <SrcGamma kSrc, DstFormat kDst, ColorSpaceMatch kCSM>
|
| -static inline void apply_set_src(void* dst, const uint32_t* src, int len, SkAlphaType alphaType,
|
| +static inline bool apply_set_src(void* dst, const void* src, int len, SkAlphaType alphaType,
|
| const float* const srcTables[3], const float matrix[16],
|
| const uint8_t* const dstTables[3],
|
| SkColorSpaceXform::ColorFormat srcColorFormat) {
|
| @@ -1320,15 +1324,14 @@ static inline void apply_set_src(void* dst, const uint32_t* src, int len, SkAlph
|
| (dst, src, len, alphaType, srcTables, matrix, dstTables);
|
| }
|
| default:
|
| - SkASSERT(false);
|
| + return false;
|
| }
|
| }
|
|
|
| template <SrcGamma kSrc, DstGamma kDst, ColorSpaceMatch kCSM>
|
| -void SkColorSpaceXform_Base<kSrc, kDst, kCSM>
|
| -::apply(void* dst, const uint32_t* src, int len, ColorFormat dstColorFormat,
|
| - ColorFormat srcColorFormat, SkAlphaType alphaType)
|
| -const
|
| +bool SkColorSpaceXform_Base<kSrc, kDst, kCSM>
|
| +::onApply(ColorFormat dstColorFormat, void* dst, ColorFormat srcColorFormat, const void* src,
|
| + int len, SkAlphaType alphaType) const
|
| {
|
| if (kFull_ColorSpaceMatch == kCSM) {
|
| switch (alphaType) {
|
| @@ -1339,16 +1342,17 @@ const
|
| default:
|
| switch (dstColorFormat) {
|
| case kRGBA_8888_ColorFormat:
|
| - return (void) memcpy(dst, src, len * sizeof(uint32_t));
|
| + memcpy(dst, src, len * sizeof(uint32_t));
|
| + return true;
|
| case kBGRA_8888_ColorFormat:
|
| - return SkOpts::RGBA_to_BGRA((uint32_t*) dst, src, len);
|
| + SkOpts::RGBA_to_BGRA((uint32_t*) dst, src, len);
|
| + return true;
|
| case kRGBA_F16_ColorFormat:
|
| case kRGBA_F32_ColorFormat:
|
| // There's still work to do to xform to linear floats.
|
| break;
|
| default:
|
| - SkASSERT(false);
|
| - return;
|
| + return false;
|
| }
|
| }
|
| }
|
| @@ -1412,8 +1416,7 @@ const
|
| (dst, src, len, alphaType, fSrcGammaTables, fSrcToDst, nullptr,
|
| srcColorFormat);
|
| default:
|
| - SkASSERT(false);
|
| - return;
|
| + return false;
|
| }
|
| case kRGBA_F32_ColorFormat:
|
| switch (kDst) {
|
| @@ -1422,12 +1425,10 @@ const
|
| (dst, src, len, alphaType, fSrcGammaTables, fSrcToDst, nullptr,
|
| srcColorFormat);
|
| default:
|
| - SkASSERT(false);
|
| - return;
|
| + return false;
|
| }
|
| default:
|
| - SkASSERT(false);
|
| - return;
|
| + return false;
|
| }
|
| }
|
|
|
|
|