| Index: Source/core/rendering/FilterEffectRenderer.cpp
|
| diff --git a/Source/core/rendering/FilterEffectRenderer.cpp b/Source/core/rendering/FilterEffectRenderer.cpp
|
| index a4e007a87e22ad66e9924dcc302a180b43cca1a8..ff60e9b0d76bafa0a793130f70f85b16a2c9b00a 100644
|
| --- a/Source/core/rendering/FilterEffectRenderer.cpp
|
| +++ b/Source/core/rendering/FilterEffectRenderer.cpp
|
| @@ -40,6 +40,7 @@
|
| #include "platform/FloatConversion.h"
|
| #include "platform/LengthFunctions.h"
|
| #include "platform/graphics/ColorSpace.h"
|
| +#include "platform/graphics/UnacceleratedImageBufferSurface.h"
|
| #include "platform/graphics/filters/FEColorMatrix.h"
|
| #include "platform/graphics/filters/FEComponentTransfer.h"
|
| #include "platform/graphics/filters/FEDropShadow.h"
|
| @@ -48,6 +49,7 @@
|
| #include "platform/graphics/filters/custom/CustomFilterValidatedProgram.h"
|
| #include "platform/graphics/filters/custom/FECustomFilter.h"
|
| #include "platform/graphics/filters/custom/ValidatedCustomFilterOperation.h"
|
| +#include "platform/graphics/gpu/AcceleratedImageBufferSurface.h"
|
| #include "wtf/MathExtras.h"
|
| #include <algorithm>
|
|
|
| @@ -311,8 +313,16 @@ void FilterEffectRenderer::allocateBackingStoreIfNeeded()
|
| // buffer if we have not yet done so.
|
| if (!m_graphicsBufferAttached) {
|
| IntSize logicalSize(m_sourceDrawingRegion.width(), m_sourceDrawingRegion.height());
|
| - if (!sourceImage() || sourceImage()->logicalSize() != logicalSize)
|
| - setSourceImage(ImageBuffer::create(logicalSize, 1, renderingMode()));
|
| + if (!sourceImage() || sourceImage()->size() != logicalSize) {
|
| + OwnPtr<ImageBufferSurface> surface;
|
| + if (isAccelerated()) {
|
| + surface = adoptPtr(new AcceleratedImageBufferSurface(logicalSize));
|
| + }
|
| + if (!surface || !surface->isValid()) {
|
| + surface = adoptPtr(new UnacceleratedImageBufferSurface(logicalSize));
|
| + }
|
| + setSourceImage(ImageBuffer::create(surface.release()));
|
| + }
|
| m_graphicsBufferAttached = true;
|
| }
|
| }
|
|
|