| Index: src/core/SkBitmapProcShader.cpp
|
| diff --git a/src/core/SkBitmapProcShader.cpp b/src/core/SkBitmapProcShader.cpp
|
| index 8e25530cee5dabe85cbfde36638fc0fe84533096..ec46d42c9cc99d14bdb5f7d245ddf5b368189b86 100644
|
| --- a/src/core/SkBitmapProcShader.cpp
|
| +++ b/src/core/SkBitmapProcShader.cpp
|
| @@ -183,13 +183,21 @@ SkBitmapProcShader::BitmapProcShaderContext::~BitmapProcShaderContext() {
|
| fState->~SkBitmapProcState();
|
| }
|
|
|
| -#define BUF_MAX 128
|
| +/* Defines the buffer size for sample pixel indexes, used in the sample proc function calls.
|
| + * If the operation is bigger than the buffer, it's split into multiple calls. This split is bad
|
| + * for the performance of SIMD optimizations.
|
| + * A display in portrait mode, with a width of 720 pixels, requires a buffer size of at least 721
|
| + * to run uninterrupted in the more basic operations.
|
| + * (Formula: Width + 1 for 'scale/translate with filter' procs.
|
| + * See description of SkBitmapProcState::maxCountForBufferSize for more information.)
|
| + */
|
| +#define BUF_MAX 1081
|
|
|
| #define TEST_BUFFER_OVERRITEx
|
|
|
| #ifdef TEST_BUFFER_OVERRITE
|
| #define TEST_BUFFER_EXTRA 32
|
| - #define TEST_PATTERN 0x88888888
|
| + #define TEST_PATTERN 0x88888888
|
| #else
|
| #define TEST_BUFFER_EXTRA 0
|
| #endif
|
| @@ -202,7 +210,9 @@ void SkBitmapProcShader::BitmapProcShaderContext::shadeSpan(int x, int y, SkPMCo
|
| return;
|
| }
|
|
|
| - uint32_t buffer[BUF_MAX + TEST_BUFFER_EXTRA];
|
| + // Align buffer to 16 bytes to enable more efficient SIMD optimizations.
|
| + uint32_t SK_ALIGN(16) buffer[BUF_MAX + TEST_BUFFER_EXTRA];
|
| +
|
| SkBitmapProcState::MatrixProc mproc = state.getMatrixProc();
|
| SkBitmapProcState::SampleProc32 sproc = state.getSampleProc32();
|
| int max = state.maxCountForBufferSize(sizeof(buffer[0]) * BUF_MAX);
|
| @@ -255,7 +265,9 @@ void SkBitmapProcShader::BitmapProcShaderContext::shadeSpan16(int x, int y, uint
|
| return;
|
| }
|
|
|
| - uint32_t buffer[BUF_MAX];
|
| + // Align buffer to 16 bytes to enable more efficient SIMD optimizations.
|
| + uint32_t SK_ALIGN(16) buffer[BUF_MAX];
|
| +
|
| SkBitmapProcState::MatrixProc mproc = state.getMatrixProc();
|
| SkBitmapProcState::SampleProc16 sproc = state.getSampleProc16();
|
| int max = state.maxCountForBufferSize(sizeof(buffer));
|
|
|