diff options
Diffstat (limited to 'src/opts/opts_check_SSE2.cpp')
-rw-r--r-- | src/opts/opts_check_SSE2.cpp | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/src/opts/opts_check_SSE2.cpp b/src/opts/opts_check_SSE2.cpp index 938e3cb17d..5a7fa3ea4e 100644 --- a/src/opts/opts_check_SSE2.cpp +++ b/src/opts/opts_check_SSE2.cpp @@ -55,8 +55,13 @@ static inline bool hasSSE2() { } #endif +static bool cachedHasSSE2() { + static bool gHasSSE2 = hasSSE2(); + return gHasSSE2; +} + void SkBitmapProcState::platformProcs() { - if (hasSSE2()) { + if (cachedHasSSE2()) { if (fSampleProc32 == S32_opaque_D32_filter_DX) { fSampleProc32 = S32_opaque_D32_filter_DX_SSE2; } else if (fSampleProc32 == S32_alpha_D32_filter_DX) { @@ -81,7 +86,7 @@ SkBlitRow::Proc SkBlitRow::PlatformProcs565(unsigned flags) { } SkBlitRow::ColorProc SkBlitRow::PlatformColorProc() { - if (hasSSE2()) { + if (cachedHasSSE2()) { return Color32_SSE2; } else { return NULL; @@ -89,7 +94,7 @@ SkBlitRow::ColorProc SkBlitRow::PlatformColorProc() { } SkBlitRow::Proc32 SkBlitRow::PlatformProcs32(unsigned flags) { - if (hasSSE2()) { + if (cachedHasSSE2()) { return platform_32_procs[flags]; } else { return NULL; @@ -98,15 +103,20 @@ SkBlitRow::Proc32 SkBlitRow::PlatformProcs32(unsigned flags) { SkBlitMask::Proc SkBlitMask::PlatformProcs(SkBitmap::Config dstConfig, + SkMask::Format maskFormat, SkColor color) { + if (SkMask::kA8_Format != maskFormat) { + return NULL; + } + SkBlitMask::Proc proc = NULL; - if (hasSSE2()) { + if (cachedHasSSE2()) { switch (dstConfig) { case SkBitmap::kARGB_8888_Config: // The SSE2 version is not (yet) faster for black, so we check // for that. if (SK_ColorBLACK != color) { - proc = SkARGB32_BlitMask_SSE2; + proc = SkARGB32_A8_BlitMask_SSE2; } break; default: @@ -117,7 +127,7 @@ SkBlitMask::Proc SkBlitMask::PlatformProcs(SkBitmap::Config dstConfig, } SkMemset16Proc SkMemset16GetPlatformProc() { - if (hasSSE2()) { + if (cachedHasSSE2()) { return sk_memset16_SSE2; } else { return NULL; @@ -125,7 +135,7 @@ SkMemset16Proc SkMemset16GetPlatformProc() { } SkMemset32Proc SkMemset32GetPlatformProc() { - if (hasSSE2()) { + if (cachedHasSSE2()) { return sk_memset32_SSE2; } else { return NULL; |