18317a1832f55e175531ee7ae7ccd12a3a15e3c75mtklein/* 28317a1832f55e175531ee7ae7ccd12a3a15e3c75mtklein * Copyright 2015 Google Inc. 38317a1832f55e175531ee7ae7ccd12a3a15e3c75mtklein * 48317a1832f55e175531ee7ae7ccd12a3a15e3c75mtklein * Use of this source code is governed by a BSD-style license that can be 58317a1832f55e175531ee7ae7ccd12a3a15e3c75mtklein * found in the LICENSE file. 68317a1832f55e175531ee7ae7ccd12a3a15e3c75mtklein */ 78317a1832f55e175531ee7ae7ccd12a3a15e3c75mtklein 88317a1832f55e175531ee7ae7ccd12a3a15e3c75mtklein#ifndef SkOpts_DEFINED 98317a1832f55e175531ee7ae7ccd12a3a15e3c75mtklein#define SkOpts_DEFINED 108317a1832f55e175531ee7ae7ccd12a3a15e3c75mtklein 11baaf8ad95237d1defdb7d93077d9bf8410d8ad7fMike Klein#include "SkRasterPipeline.h" 128317a1832f55e175531ee7ae7ccd12a3a15e3c75mtklein#include "SkTypes.h" 13d47067392848ba132d4e86ffbeebe2dcacda9534Mike Reed#include "SkXfermodePriv.h" 14490b61569d27c9b7ba164fbc4394994d2e7cb022mtklein 15490b61569d27c9b7ba164fbc4394994d2e7cb022mtkleinstruct ProcCoeff; 168317a1832f55e175531ee7ae7ccd12a3a15e3c75mtklein 178317a1832f55e175531ee7ae7ccd12a3a15e3c75mtkleinnamespace SkOpts { 188317a1832f55e175531ee7ae7ccd12a3a15e3c75mtklein // Call to replace pointers to portable functions with pointers to CPU-specific functions. 198317a1832f55e175531ee7ae7ccd12a3a15e3c75mtklein // Thread-safe and idempotent. 2005db63b5fc262136da9b289418b871180cd1359bmtklein // Called by SkGraphics::Init(). 218317a1832f55e175531ee7ae7ccd12a3a15e3c75mtklein void Init(); 228317a1832f55e175531ee7ae7ccd12a3a15e3c75mtklein 23f684a78d9ea988883c9b2c7bcc4ea4d5e68bd998mtklein // Declare function pointers here... 24f684a78d9ea988883c9b2c7bcc4ea4d5e68bd998mtklein 25490b61569d27c9b7ba164fbc4394994d2e7cb022mtklein // May return nullptr if we haven't specialized the given Mode. 26ce9514c6cd91c7225ec0d7ccfffd1d964cb1ac6aMike Reed extern SkXfermode* (*create_xfermode)(SkBlendMode); 27dce5ce4276e2825efc6d8c4daa819c965794cd12mtklein 28d029ded92d409a004f2096c78f5a99b524206481mtklein typedef void (*Morph)(const SkPMColor*, SkPMColor*, int, int, int, int, int); 29d029ded92d409a004f2096c78f5a99b524206481mtklein extern Morph dilate_x, dilate_y, erode_x, erode_y; 30b6394746ff546a9c60d68e3be162cb38feffa803mtklein 314977983510028712528743aa877f6da83781b381mtklein extern void (*blit_mask_d32_a8)(SkPMColor*, size_t, const SkAlpha*, size_t, SkColor, int, int); 324a37d08382a16717cde52c3d2687b021c5413464mtklein extern void (*blit_row_color32)(SkPMColor*, const SkPMColor*, int, SkPMColor); 33b4a7dc99b1a01cdd5c0cd5913b630436ca696210mtklein extern void (*blit_row_s32a_opaque)(SkPMColor*, const SkPMColor*, int, U8CPU); 342d141ba2df8f7506848aa9369f502944e837cd09mtklein 358bf7b79cf9776b4edb3f6810e5ab8c80c49d3480mtklein // Swizzle input into some sort of 8888 pixel, {premul,unpremul} x {rgba,bgra}. 368bf7b79cf9776b4edb3f6810e5ab8c80c49d3480mtklein typedef void (*Swizzle_8888)(uint32_t*, const void*, int); 37c5c322d8ecfc05718f9f04360956c4f1f9dc33c1msarett extern Swizzle_8888 RGBA_to_BGRA, // i.e. just swap RB 38c5c322d8ecfc05718f9f04360956c4f1f9dc33c1msarett RGBA_to_rgbA, // i.e. just premultiply 39c5c322d8ecfc05718f9f04360956c4f1f9dc33c1msarett RGBA_to_bgrA, // i.e. swap RB and premultiply 40c5c322d8ecfc05718f9f04360956c4f1f9dc33c1msarett RGB_to_RGB1, // i.e. insert an opaque alpha 41c5c322d8ecfc05718f9f04360956c4f1f9dc33c1msarett RGB_to_BGR1, // i.e. swap RB and insert an opaque alpha 42c5c322d8ecfc05718f9f04360956c4f1f9dc33c1msarett gray_to_RGB1, // i.e. expand to color channels + an opaque alpha 43c5c322d8ecfc05718f9f04360956c4f1f9dc33c1msarett grayA_to_RGBA, // i.e. expand to color channels 44c5c322d8ecfc05718f9f04360956c4f1f9dc33c1msarett grayA_to_rgbA, // i.e. expand to color channels and premultiply 45c5c322d8ecfc05718f9f04360956c4f1f9dc33c1msarett inverted_CMYK_to_RGB1, // i.e. convert color space 46c5c322d8ecfc05718f9f04360956c4f1f9dc33c1msarett inverted_CMYK_to_BGR1; // i.e. convert color space 47a525cb151bb39fb6362af051f69b6d633f660fd9mtklein 4887db00111596d432908882a13982adde79793a7cMike Klein extern void (*memset16)(uint16_t[], uint16_t, int); 492fbf1bc8c96f749a4c098bcfc827053445c2e12dDerek Sollenberger extern void SK_API (*memset32)(uint32_t[], uint32_t, int); 5087db00111596d432908882a13982adde79793a7cMike Klein extern void (*memset64)(uint64_t[], uint64_t, int); 5187db00111596d432908882a13982adde79793a7cMike Klein 524e97607d9a1cef66fac16f347c5ca813ec4f9515mtklein // The fastest high quality 32-bit hash we can provide on this platform. 534e97607d9a1cef66fac16f347c5ca813ec4f9515mtklein extern uint32_t (*hash_fn)(const void*, size_t, uint32_t seed); 544e97607d9a1cef66fac16f347c5ca813ec4f9515mtklein static inline uint32_t hash(const void* data, size_t bytes, uint32_t seed=0) { 554e97607d9a1cef66fac16f347c5ca813ec4f9515mtklein return hash_fn(data, bytes, seed); 564e97607d9a1cef66fac16f347c5ca813ec4f9515mtklein } 578317a1832f55e175531ee7ae7ccd12a3a15e3c75mtklein} 588317a1832f55e175531ee7ae7ccd12a3a15e3c75mtklein 598317a1832f55e175531ee7ae7ccd12a3a15e3c75mtklein#endif//SkOpts_DEFINED 60