| Index: Source/core/rendering/FilterEffectRenderer.cpp
|
| diff --git a/Source/core/rendering/FilterEffectRenderer.cpp b/Source/core/rendering/FilterEffectRenderer.cpp
|
| index 03556781265670816e053f4dd72b5f8b531f4995..67a8bacc959b926d524567bc07a4611381b5a0c4 100644
|
| --- a/Source/core/rendering/FilterEffectRenderer.cpp
|
| +++ b/Source/core/rendering/FilterEffectRenderer.cpp
|
| @@ -40,6 +40,7 @@
|
| #include "core/platform/graphics/filters/custom/CustomFilterValidatedProgram.h"
|
| #include "core/platform/graphics/filters/custom/FECustomFilter.h"
|
| #include "core/platform/graphics/filters/custom/ValidatedCustomFilterOperation.h"
|
| +#include "core/platform/graphics/gpu/AcceleratedImageBufferSurface.h"
|
| #include "core/rendering/RenderLayer.h"
|
| #include "core/rendering/RenderView.h"
|
| #include "core/rendering/svg/ReferenceFilterBuilder.h"
|
| @@ -48,6 +49,7 @@
|
| #include "platform/FloatConversion.h"
|
| #include "platform/LengthFunctions.h"
|
| #include "platform/graphics/ColorSpace.h"
|
| +#include "platform/graphics/UnacceleratedImageBufferSurface.h"
|
| #include "wtf/MathExtras.h"
|
| #include <algorithm>
|
|
|
| @@ -311,8 +313,18 @@ 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()->logicalSize() != logicalSize) {
|
| + OwnPtr<ImageBufferSurface> surface;
|
| + if (isAccelerated()) {
|
| + surface = adoptPtr(new AcceleratedImageBufferSurface(logicalSize));
|
| + }
|
| + if (!surface || !surface->isValid()) {
|
| + surface = adoptPtr(new UnacceleratedImageBufferSurface(logicalSize));
|
| + }
|
| + if (surface->isValid()) {
|
| + setSourceImage(adoptPtr(new ImageBuffer(surface.release())));
|
| + }
|
| + }
|
| m_graphicsBufferAttached = true;
|
| }
|
| }
|
|
|