aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/opts/opts_check_SSE2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/opts/opts_check_SSE2.cpp')
-rw-r--r--src/opts/opts_check_SSE2.cpp24
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;