Chromium Code Reviews| Index: skia/ext/image_operations.cc |
| diff --git a/skia/ext/image_operations.cc b/skia/ext/image_operations.cc |
| index 51d2e4e252c26a690affc0a57232983df2228d72..e58f79d9d00604bbfead19d510a9cabdbea71467 100644 |
| --- a/skia/ext/image_operations.cc |
| +++ b/skia/ext/image_operations.cc |
| @@ -316,6 +316,8 @@ void ResizeFilter::ComputeFilters(int src_size, |
| output->AddFilter(src_begin, &fixed_filter_values[0], |
| static_cast<int>(fixed_filter_values->size())); |
| } |
| + |
| + output->PaddingForSIMD(8); |
|
evannier
2011/02/14 23:45:13
At the API layer, this seems wrong to be visible f
fbarchard
2011/02/15 23:16:45
should be 16?
jiesun
2011/02/17 20:17:58
I agree this is ugly, but there is no "finalizefil
jiesun
2011/02/17 20:17:58
16 byte = 8 coefficient because Fixed is short(2by
|
| } |
| ImageOperations::ResizeMethod ResizeMethodToAlgorithmMethod( |
| @@ -461,6 +463,32 @@ SkBitmap ImageOperations::ResizeSubpixel(const SkBitmap& source, |
| #endif // OS_POSIX && !OS_MACOSX |
| } |
| +#ifdef ARCH_CPU_X86_FAMILY |
| +#ifdef _MSC_VER |
| +#include <intrin.h> |
| +#endif |
| +#endif |
| + |
| +bool ImageOperations::hasSSE2() { |
| +#ifdef ARCH_CPU_X86_FAMILY |
| +#ifdef _MSC_VER |
| + int cpu_info[4] = {-1}; |
| + __cpuid(cpu_info, 0); |
| + int num_ids = cpu_info[0]; |
|
fbarchard
2011/02/15 23:16:45
is this necessary? i thought everyone that suppor
jiesun
2011/02/17 20:17:58
Done.
|
| + if (num_ids > 0) { |
| + __cpuid(cpu_info, 1); |
| + return (cpu_info[3] & (1<<26)) != 0; |
| + } |
| + return false; |
| +#else |
| + // TODO(jiesun): This has to be resolved. We could not use skia implementation. |
| + return true; |
| +#endif |
| +#else |
| + return false; |
| +#endif |
| +} |
| + |
| // static |
| SkBitmap ImageOperations::ResizeBasic(const SkBitmap& source, |
| ResizeMethod method, |
| @@ -509,7 +537,7 @@ SkBitmap ImageOperations::ResizeBasic(const SkBitmap& source, |
| BGRAConvolve2D(source_subset, static_cast<int>(source.rowBytes()), |
| !source.isOpaque(), filter.x_filter(), filter.y_filter(), |
| static_cast<int>(result.rowBytes()), |
| - static_cast<unsigned char*>(result.getPixels())); |
| + static_cast<unsigned char*>(result.getPixels()), hasSSE2()); |
| // Preserve the "opaque" flag for use as an optimization later. |
| result.setIsOpaque(source.isOpaque()); |