Changeset 125462 in webkit


Ignore:
Timestamp:
Aug 13, 2012 3:37:21 PM (12 years ago)
Author:
fmalita@chromium.org
Message:

WebKit+SVG does not support color-interpolation-filters or draw filters in correct colorspace
https://bugs.webkit.org/show_bug.cgi?id=6033

Reviewed by Dirk Schulze.

Source/WebCore:

This patch adds support for SVG color-interpolation-filters. All non-CG plarforms now
perform color space conversions as needed (CG performs color space adjustments internally),
and the new default color space for filters is linearRGB
(http://www.w3.org/TR/SVG/filters.html#FilterPrimitivesOverviewIntro).

FilterEffect tracks the color-interpolation-filters attribute (m_colorSpace) and the
current result color space (m_resultColorSpace). When applying, the input results are
converted to the current FilterEffect's color space, and at the end of the filter effect
chain the result is finally converted to ColorSpaceDeviceRGB.

FilterEffect::transformResultColorSpace() handles non-CG color space converion (CG has
built in support for different color spaces) by first converting the result to an image
buffer, and then using the platform specific ImageBuffer::transformColorSpace(). This can
be expensive for filter chains with alternating color-interpolation-filters, but can be
optimized if/when color space support is added to all the graphics backends similarly to CG.

As expected, lots of filter-related pixel results will require rebaselining after this lands.

Test: svg/filters/color-interpolation-filters.svg

  • platform/graphics/filters/FilterEffect.cpp:

(WebCore::FilterEffect::FilterEffect):
(WebCore::FilterEffect::apply):
(WebCore::FilterEffect::asImageBuffer):
(WebCore::FilterEffect::createImageBufferResult):
(WebCore::FilterEffect::transformResultColorSpace):
(WebCore):

  • platform/graphics/filters/FilterEffect.h:

(WebCore::FilterEffect::colorSpace):
(WebCore::FilterEffect::setColorSpace):
(FilterEffect):

  • platform/graphics/filters/SourceGraphic.h:

(WebCore::SourceGraphic::SourceGraphic):

  • rendering/FilterEffectRenderer.cpp:

(WebCore::FilterEffectRenderer::apply):

  • rendering/svg/RenderSVGResourceFilter.cpp:

(WebCore::RenderSVGResourceFilter::buildPrimitives):
(WebCore::RenderSVGResourceFilter::postApplyResource):

LayoutTests:

  • platform/chromium-linux/css3/filters/crash-hw-sw-switch-expected.png:
  • platform/chromium-linux/css3/filters/custom/custom-filter-shader-cache-expected.png:
  • platform/chromium-linux/css3/filters/custom/effect-custom-expected.png:
  • platform/chromium-linux/css3/filters/custom/filter-repaint-custom-clipped-expected.png:
  • platform/chromium-linux/css3/filters/custom/filter-repaint-custom-expected.png:
  • platform/chromium-linux/css3/filters/custom/filter-repaint-custom-rotated-expected.png:
  • platform/chromium-linux/css3/filters/effect-brightness-clamping-expected.png:
  • platform/chromium-linux/css3/filters/effect-brightness-expected.png:
  • platform/chromium-linux/svg/filters/color-interpolation-filters-expected.png: Added.
  • platform/chromium-linux/svg/filters/color-interpolation-filters-expected.txt: Added.
  • platform/chromium-win/css3/filters/add-filter-rendering-expected.png:
  • platform/chromium-win/css3/filters/crash-filter-change-expected.png:
  • platform/chromium-win/css3/filters/effect-blur-expected.png:
  • platform/chromium-win/css3/filters/effect-combined-expected.png:
  • platform/chromium-win/css3/filters/effect-contrast-expected.png:
  • platform/chromium-win/css3/filters/effect-drop-shadow-expected.png:
  • platform/chromium-win/css3/filters/effect-grayscale-expected.png:
  • platform/chromium-win/css3/filters/effect-hue-rotate-expected.png:
  • platform/chromium-win/css3/filters/effect-invert-expected.png:
  • platform/chromium-win/css3/filters/effect-opacity-expected.png:
  • platform/chromium-win/css3/filters/effect-reference-expected.png:
  • platform/chromium-win/css3/filters/effect-reference-external-expected.png:
  • platform/chromium-win/css3/filters/effect-reference-hw-expected.png:
  • platform/chromium-win/css3/filters/effect-reference-ordering-expected.png:
  • platform/chromium-win/css3/filters/effect-saturate-expected.png:
  • platform/chromium-win/css3/filters/effect-sepia-expected.png:
  • platform/chromium-win/css3/filters/filtered-inline-expected.png:
  • platform/chromium-win/css3/filters/multiple-filters-invalidation-expected.png:
  • platform/chromium-win/css3/filters/nested-filters-expected.png:
  • platform/chromium-win/css3/filters/regions-expanding-expected.png:
  • platform/chromium-win/css3/filters/simple-filter-rendering-expected.png:
  • platform/chromium/TestExpectations:
  • platform/chromium/css3/filters/blur-filter-page-scroll-expected.png:
  • platform/chromium/css3/filters/blur-filter-page-scroll-parents-expected.png:
  • platform/mac/TestExpectations:
  • platform/qt/TestExpectations:
  • svg/filters/color-interpolation-filters.svg: Added.
Location:
trunk
Files:
3 added
41 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r125460 r125462  
     12012-08-13  Florin Malita  <fmalita@chromium.org>
     2
     3        WebKit+SVG does not support color-interpolation-filters or draw filters in correct colorspace
     4        https://bugs.webkit.org/show_bug.cgi?id=6033
     5
     6        Reviewed by Dirk Schulze.
     7
     8        * platform/chromium-linux/css3/filters/crash-hw-sw-switch-expected.png:
     9        * platform/chromium-linux/css3/filters/custom/custom-filter-shader-cache-expected.png:
     10        * platform/chromium-linux/css3/filters/custom/effect-custom-expected.png:
     11        * platform/chromium-linux/css3/filters/custom/filter-repaint-custom-clipped-expected.png:
     12        * platform/chromium-linux/css3/filters/custom/filter-repaint-custom-expected.png:
     13        * platform/chromium-linux/css3/filters/custom/filter-repaint-custom-rotated-expected.png:
     14        * platform/chromium-linux/css3/filters/effect-brightness-clamping-expected.png:
     15        * platform/chromium-linux/css3/filters/effect-brightness-expected.png:
     16        * platform/chromium-linux/svg/filters/color-interpolation-filters-expected.png: Added.
     17        * platform/chromium-linux/svg/filters/color-interpolation-filters-expected.txt: Added.
     18        * platform/chromium-win/css3/filters/add-filter-rendering-expected.png:
     19        * platform/chromium-win/css3/filters/crash-filter-change-expected.png:
     20        * platform/chromium-win/css3/filters/effect-blur-expected.png:
     21        * platform/chromium-win/css3/filters/effect-combined-expected.png:
     22        * platform/chromium-win/css3/filters/effect-contrast-expected.png:
     23        * platform/chromium-win/css3/filters/effect-drop-shadow-expected.png:
     24        * platform/chromium-win/css3/filters/effect-grayscale-expected.png:
     25        * platform/chromium-win/css3/filters/effect-hue-rotate-expected.png:
     26        * platform/chromium-win/css3/filters/effect-invert-expected.png:
     27        * platform/chromium-win/css3/filters/effect-opacity-expected.png:
     28        * platform/chromium-win/css3/filters/effect-reference-expected.png:
     29        * platform/chromium-win/css3/filters/effect-reference-external-expected.png:
     30        * platform/chromium-win/css3/filters/effect-reference-hw-expected.png:
     31        * platform/chromium-win/css3/filters/effect-reference-ordering-expected.png:
     32        * platform/chromium-win/css3/filters/effect-saturate-expected.png:
     33        * platform/chromium-win/css3/filters/effect-sepia-expected.png:
     34        * platform/chromium-win/css3/filters/filtered-inline-expected.png:
     35        * platform/chromium-win/css3/filters/multiple-filters-invalidation-expected.png:
     36        * platform/chromium-win/css3/filters/nested-filters-expected.png:
     37        * platform/chromium-win/css3/filters/regions-expanding-expected.png:
     38        * platform/chromium-win/css3/filters/simple-filter-rendering-expected.png:
     39        * platform/chromium/TestExpectations:
     40        * platform/chromium/css3/filters/blur-filter-page-scroll-expected.png:
     41        * platform/chromium/css3/filters/blur-filter-page-scroll-parents-expected.png:
     42        * platform/mac/TestExpectations:
     43        * platform/qt/TestExpectations:
     44        * svg/filters/color-interpolation-filters.svg: Added.
     45
    1462012-08-13  Raymond Toy  <rtoy@google.com>
    247
  • trunk/LayoutTests/platform/chromium/TestExpectations

    r125450 r125462  
    12071207BUGWK81217 : svg/hixie/perf/003.xml = PASS IMAGE
    12081208
     1209// Rebaseline needed (https://bugs.webkit.org/show_bug.cgi?id=6033)
     1210BUGWK6033 : css3/filters/add-filter-rendering.html = PASS IMAGE
     1211BUGWK6033 : css3/filters/blur-filter-page-scroll-parents.html = PASS IMAGE
     1212BUGWK6033 : css3/filters/blur-filter-page-scroll.html = PASS IMAGE
     1213BUGWK6033 : css3/filters/crash-filter-change.html = PASS IMAGE
     1214BUGWK6033 : css3/filters/crash-hw-sw-switch.html = PASS IMAGE
     1215BUGWK6033 : css3/filters/custom/custom-filter-shader-cache.html = PASS IMAGE
     1216BUGWK6033 : css3/filters/custom/effect-color-check.html = PASS IMAGE
     1217BUGWK6033 : css3/filters/custom/effect-custom-combined-missing.html = PASS IMAGE
     1218BUGWK6033 : css3/filters/custom/effect-custom.html = PASS IMAGE
     1219BUGWK6033 : css3/filters/custom/filter-repaint-custom-clipped.html = PASS IMAGE
     1220BUGWK6033 : css3/filters/custom/filter-repaint-custom-rotated.html = PASS IMAGE
     1221BUGWK6033 : css3/filters/custom/filter-repaint-custom.html = PASS IMAGE
     1222BUGWK6033 : css3/filters/effect-blur.html = PASS IMAGE
     1223BUGWK6033 : css3/filters/effect-brightness-clamping.html = PASS IMAGE
     1224BUGWK6033 : css3/filters/effect-brightness.html = PASS IMAGE
     1225BUGWK6033 : css3/filters/effect-combined.html = PASS IMAGE
     1226BUGWK6033 : css3/filters/effect-contrast.html = PASS IMAGE
     1227BUGWK6033 : css3/filters/effect-drop-shadow.html = PASS IMAGE
     1228BUGWK6033 : css3/filters/effect-grayscale.html = PASS IMAGE
     1229BUGWK6033 : css3/filters/effect-hue-rotate.html = PASS IMAGE
     1230BUGWK6033 : css3/filters/effect-invert.html = PASS IMAGE
     1231BUGWK6033 : css3/filters/effect-opacity.html = PASS IMAGE
     1232BUGWK6033 : css3/filters/effect-reference-external.html = PASS IMAGE
     1233BUGWK6033 : css3/filters/effect-reference-hw.html = PASS IMAGE
     1234BUGWK6033 : css3/filters/effect-reference-ordering.html = PASS IMAGE
     1235BUGWK6033 : css3/filters/effect-reference.html = PASS IMAGE
     1236BUGWK6033 : css3/filters/effect-saturate.html = PASS IMAGE
     1237BUGWK6033 : css3/filters/effect-sepia.html = PASS IMAGE
     1238BUGWK6033 : css3/filters/filtered-inline.html = PASS IMAGE
     1239BUGWK6033 : css3/filters/multiple-filters-invalidation.html = PASS IMAGE
     1240BUGWK6033 : css3/filters/nested-filters.html = PASS IMAGE
     1241BUGWK6033 : css3/filters/regions-expanding.html = PASS IMAGE
     1242BUGWK6033 : css3/filters/simple-filter-rendering.html = PASS IMAGE
     1243BUGWK6033 : svg/filters/color-interpolation-filters.svg = PASS MISSING
     1244
     1245BUGWK92758 : css3/filters/custom/effect-custom-parameters.html = PASS IMAGE CRASH
     1246
    12091247BUGWK81240 MAC : svg/text/bidi-reorder-value-lists.svg = PASS IMAGE+TEXT
    12101248
  • trunk/LayoutTests/platform/mac/TestExpectations

    r125437 r125462  
    243243BUGWK85689 SKIP : fast/animation/request-animation-frame-disabled.html = TEXT
    244244
     245// Need rebaseline after https://bugs.webkit.org/show_bug.cgi?id=6033
     246BUGWK6033 : css3/filters/add-filter-rendering.html = PASS IMAGE
     247BUGWK6033 : css3/filters/blur-filter-page-scroll-parents.html = PASS IMAGE
     248BUGWK6033 : css3/filters/blur-filter-page-scroll.html = PASS IMAGE
     249BUGWK6033 : css3/filters/crash-filter-change.html = PASS IMAGE
     250BUGWK6033 : css3/filters/crash-hw-sw-switch.html = PASS IMAGE
     251BUGWK6033 : css3/filters/custom/custom-filter-shader-cache.html = PASS IMAGE
     252BUGWK6033 : css3/filters/custom/effect-color-check.html = PASS IMAGE
     253BUGWK6033 : css3/filters/custom/effect-custom-combined-missing.html = PASS IMAGE
     254BUGWK6033 : css3/filters/custom/effect-custom.html = PASS IMAGE
     255BUGWK6033 : css3/filters/custom/effect-custom-parameters.html = PASS IMAGE
     256BUGWK6033 : css3/filters/custom/filter-repaint-custom-clipped.html = PASS IMAGE
     257BUGWK6033 : css3/filters/custom/filter-repaint-custom-rotated.html = PASS IMAGE
     258BUGWK6033 : css3/filters/custom/filter-repaint-custom.html = PASS IMAGE
     259BUGWK6033 : css3/filters/effect-blur.html = PASS IMAGE
     260BUGWK6033 : css3/filters/effect-brightness-clamping.html = PASS IMAGE
     261BUGWK6033 : css3/filters/effect-brightness.html = PASS IMAGE
     262BUGWK6033 : css3/filters/effect-combined.html = PASS IMAGE
     263BUGWK6033 : css3/filters/effect-contrast.html = PASS IMAGE
     264BUGWK6033 : css3/filters/effect-drop-shadow.html = PASS IMAGE
     265BUGWK6033 : css3/filters/effect-grayscale.html = PASS IMAGE
     266BUGWK6033 : css3/filters/effect-hue-rotate.html = PASS IMAGE
     267BUGWK6033 : css3/filters/effect-invert.html = PASS IMAGE
     268BUGWK6033 : css3/filters/effect-opacity.html = PASS IMAGE
     269BUGWK6033 : css3/filters/effect-reference-external.html = PASS IMAGE
     270BUGWK6033 : css3/filters/effect-reference-hw.html = PASS IMAGE
     271BUGWK6033 : css3/filters/effect-reference-ordering.html = PASS IMAGE
     272BUGWK6033 : css3/filters/effect-reference.html = PASS IMAGE
     273BUGWK6033 : css3/filters/effect-saturate.html = PASS IMAGE
     274BUGWK6033 : css3/filters/effect-sepia.html = PASS IMAGE
     275BUGWK6033 : css3/filters/filtered-inline.html = PASS IMAGE
     276BUGWK6033 : css3/filters/multiple-filters-invalidation.html = PASS IMAGE
     277BUGWK6033 : css3/filters/nested-filters.html = PASS IMAGE
     278BUGWK6033 : css3/filters/regions-expanding.html = PASS IMAGE
     279BUGWK6033 : css3/filters/simple-filter-rendering.html = PASS IMAGE
     280BUGWK6033 : svg/filters/color-interpolation-filters.svg = PASS MISSING
     281
    245282// Hits assert https://bugs.webkit.org/show_bug.cgi?id=86208
    246283BUGWK85308 SKIP : ietestcenter/css3/valuesandunits/units-000.htm = IMAGE
  • trunk/LayoutTests/platform/qt/TestExpectations

    r125437 r125462  
    7575BUGWK85580 SKIP : inspector/styles/variables = PASS
    7676
     77// Need rebaseline after https://bugs.webkit.org/show_bug.cgi?id=6033
     78BUGWK6033 : css3/filters/add-filter-rendering.html = PASS IMAGE
     79BUGWK6033 : css3/filters/blur-filter-page-scroll-parents.html = PASS IMAGE
     80BUGWK6033 : css3/filters/blur-filter-page-scroll.html = PASS IMAGE
     81BUGWK6033 : css3/filters/crash-filter-change.html = PASS IMAGE
     82BUGWK6033 : css3/filters/crash-hw-sw-switch.html = PASS IMAGE
     83BUGWK6033 : css3/filters/custom/custom-filter-shader-cache.html = PASS IMAGE
     84BUGWK6033 : css3/filters/custom/effect-color-check.html = PASS IMAGE
     85BUGWK6033 : css3/filters/custom/effect-custom-combined-missing.html = PASS IMAGE
     86BUGWK6033 : css3/filters/custom/effect-custom.html = PASS IMAGE
     87BUGWK6033 : css3/filters/custom/effect-custom-parameters.html = PASS IMAGE
     88BUGWK6033 : css3/filters/custom/filter-repaint-custom-clipped.html = PASS IMAGE
     89BUGWK6033 : css3/filters/custom/filter-repaint-custom-rotated.html = PASS IMAGE
     90BUGWK6033 : css3/filters/custom/filter-repaint-custom.html = PASS IMAGE
     91BUGWK6033 : css3/filters/effect-blur.html = PASS IMAGE
     92BUGWK6033 : css3/filters/effect-brightness-clamping.html = PASS IMAGE
     93BUGWK6033 : css3/filters/effect-brightness.html = PASS IMAGE
     94BUGWK6033 : css3/filters/effect-combined.html = PASS IMAGE
     95BUGWK6033 : css3/filters/effect-contrast.html = PASS IMAGE
     96BUGWK6033 : css3/filters/effect-drop-shadow.html = PASS IMAGE
     97BUGWK6033 : css3/filters/effect-grayscale.html = PASS IMAGE
     98BUGWK6033 : css3/filters/effect-hue-rotate.html = PASS IMAGE
     99BUGWK6033 : css3/filters/effect-invert.html = PASS IMAGE
     100BUGWK6033 : css3/filters/effect-opacity.html = PASS IMAGE
     101BUGWK6033 : css3/filters/effect-reference-external.html = PASS IMAGE
     102BUGWK6033 : css3/filters/effect-reference-hw.html = PASS IMAGE
     103BUGWK6033 : css3/filters/effect-reference-ordering.html = PASS IMAGE
     104BUGWK6033 : css3/filters/effect-reference.html = PASS IMAGE
     105BUGWK6033 : css3/filters/effect-saturate.html = PASS IMAGE
     106BUGWK6033 : css3/filters/effect-sepia.html = PASS IMAGE
     107BUGWK6033 : css3/filters/filtered-inline.html = PASS IMAGE
     108BUGWK6033 : css3/filters/multiple-filters-invalidation.html = PASS IMAGE
     109BUGWK6033 : css3/filters/nested-filters.html = PASS IMAGE
     110BUGWK6033 : css3/filters/regions-expanding.html = PASS IMAGE
     111BUGWK6033 : css3/filters/simple-filter-rendering.html = PASS IMAGE
     112BUGWK6033 : svg/filters/color-interpolation-filters.svg = PASS MISSING
     113
    77114// UndoManager is not yet enabled.
    78115BUGWK87908 SKIP : editing/undomanager = PASS
  • trunk/Source/WebCore/ChangeLog

    r125460 r125462  
     12012-08-13  Florin Malita  <fmalita@chromium.org>
     2
     3        WebKit+SVG does not support color-interpolation-filters or draw filters in correct colorspace
     4        https://bugs.webkit.org/show_bug.cgi?id=6033
     5
     6        Reviewed by Dirk Schulze.
     7
     8        This patch adds support for SVG color-interpolation-filters. All non-CG plarforms now
     9        perform color space conversions as needed (CG performs color space adjustments internally),
     10        and the new default color space for filters is linearRGB
     11        (http://www.w3.org/TR/SVG/filters.html#FilterPrimitivesOverviewIntro).
     12
     13        FilterEffect tracks the color-interpolation-filters attribute (m_colorSpace) and the
     14        current result color space (m_resultColorSpace). When applying, the input results are
     15        converted to the current FilterEffect's color space, and at the end of the filter effect
     16        chain the result is finally converted to ColorSpaceDeviceRGB.
     17
     18        FilterEffect::transformResultColorSpace() handles non-CG color space converion (CG has
     19        built in support for different color spaces) by first converting the result to an image
     20        buffer, and then using the platform specific ImageBuffer::transformColorSpace(). This can
     21        be expensive for filter chains with alternating color-interpolation-filters, but can be
     22        optimized if/when color space support is added to all the graphics backends similarly to CG.
     23
     24        As expected, lots of filter-related pixel results will require rebaselining after this lands.
     25
     26        Test: svg/filters/color-interpolation-filters.svg
     27
     28        * platform/graphics/filters/FilterEffect.cpp:
     29        (WebCore::FilterEffect::FilterEffect):
     30        (WebCore::FilterEffect::apply):
     31        (WebCore::FilterEffect::asImageBuffer):
     32        (WebCore::FilterEffect::createImageBufferResult):
     33        (WebCore::FilterEffect::transformResultColorSpace):
     34        (WebCore):
     35        * platform/graphics/filters/FilterEffect.h:
     36        (WebCore::FilterEffect::colorSpace):
     37        (WebCore::FilterEffect::setColorSpace):
     38        (FilterEffect):
     39        * platform/graphics/filters/SourceGraphic.h:
     40        (WebCore::SourceGraphic::SourceGraphic):
     41        * rendering/FilterEffectRenderer.cpp:
     42        (WebCore::FilterEffectRenderer::apply):
     43        * rendering/svg/RenderSVGResourceFilter.cpp:
     44        (WebCore::RenderSVGResourceFilter::buildPrimitives):
     45        (WebCore::RenderSVGResourceFilter::postApplyResource):
     46
    1472012-08-13  Raymond Toy  <rtoy@google.com>
    248
  • trunk/Source/WebCore/platform/graphics/filters/FilterEffect.cpp

    r117058 r125462  
    4444    , m_hasHeight(false)
    4545    , m_clipsToBounds(true)
     46    , m_colorSpace(ColorSpaceLinearRGB)
     47    , m_resultColorSpace(ColorSpaceDeviceRGB)
    4648{
    4749    ASSERT(m_filter);
     
    105107        if (!in->hasResult())
    106108            return;
    107     }
     109
     110        // Convert input results to the current effect's color space.
     111        in->transformResultColorSpace(m_colorSpace);
     112    }
     113
    108114    determineAbsolutePaintRect();
     115    m_resultColorSpace = m_colorSpace;
    109116
    110117    if (!isFilterSizeValid(m_absolutePaintRect))
     
    189196    if (m_imageBufferResult)
    190197        return m_imageBufferResult.get();
    191     m_imageBufferResult = ImageBuffer::create(m_absolutePaintRect.size(), 1, ColorSpaceLinearRGB, m_filter->renderingMode());
     198    m_imageBufferResult = ImageBuffer::create(m_absolutePaintRect.size(), 1, m_resultColorSpace, m_filter->renderingMode());
    192199    IntRect destinationRect(IntPoint(), m_absolutePaintRect.size());
    193200    if (m_premultipliedImageResult)
     
    326333    if (m_absolutePaintRect.isEmpty())
    327334        return 0;
    328     m_imageBufferResult = ImageBuffer::create(m_absolutePaintRect.size(), 1, ColorSpaceLinearRGB, m_filter->renderingMode());
     335    m_imageBufferResult = ImageBuffer::create(m_absolutePaintRect.size(), 1, m_colorSpace, m_filter->renderingMode());
    329336    if (!m_imageBufferResult)
    330337        return 0;
     
    357364}
    358365
     366void FilterEffect::transformResultColorSpace(ColorSpace dstColorSpace)
     367{
     368#if USE(CG)
     369    // CG handles color space adjustments internally.
     370    UNUSED_PARAM(dstColorSpace);
     371#else
     372    if (!hasResult() || dstColorSpace == m_resultColorSpace)
     373        return;
     374
     375    // FIXME: We can avoid this potentially unnecessary ImageBuffer conversion by adding
     376    // color space transform support for the {pre,un}multiplied arrays.
     377    if (!m_imageBufferResult) {
     378        asImageBuffer();
     379        ASSERT(m_imageBufferResult);
     380    }
     381
     382    m_imageBufferResult->transformColorSpace(m_resultColorSpace, dstColorSpace);
     383    m_resultColorSpace = dstColorSpace;
     384
     385    if (m_unmultipliedImageResult)
     386        m_unmultipliedImageResult.clear();
     387    if (m_premultipliedImageResult)
     388        m_premultipliedImageResult.clear();
     389#endif
     390}
     391
    359392TextStream& FilterEffect::externalRepresentation(TextStream& ts, int) const
    360393{
  • trunk/Source/WebCore/platform/graphics/filters/FilterEffect.h

    r114992 r125462  
    2424
    2525#if ENABLE(FILTERS)
     26#include "ColorSpace.h"
    2627#include "FloatRect.h"
    2728#include "IntRect.h"
     
    130131    void setClipsToBounds(bool value) { m_clipsToBounds = value; }
    131132
     133    ColorSpace colorSpace() const { return m_colorSpace; }
     134    void setColorSpace(ColorSpace colorSpace) { m_colorSpace = colorSpace; }
     135    void transformResultColorSpace(ColorSpace);
     136
    132137protected:
    133138    FilterEffect(Filter*);
     
    179184    // Should the effect clip to its primitive region, or expand to use the combined region of its inputs.
    180185    bool m_clipsToBounds;
     186
     187    ColorSpace m_colorSpace;
     188    ColorSpace m_resultColorSpace;
    181189};
    182190
  • trunk/Source/WebCore/platform/graphics/filters/SourceGraphic.h

    r97853 r125462  
    4949        : FilterEffect(filter)
    5050    {
     51        setColorSpace(ColorSpaceDeviceRGB);
    5152    }
    5253};
  • trunk/Source/WebCore/rendering/FilterEffectRenderer.cpp

    r123781 r125462  
    403403{
    404404    lastEffect()->apply();
     405
     406#if !USE(CG)
     407    output()->transformColorSpace(lastEffect()->colorSpace(), ColorSpaceDeviceRGB);
     408#endif
    405409}
    406410
  • trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp

    r123210 r125462  
    122122        effectElement->setStandardAttributes(effect.get());
    123123        effect->setEffectBoundaries(SVGLengthContext::resolveRectangle<SVGFilterPrimitiveStandardAttributes>(effectElement, filterElement->primitiveUnits(), targetBoundingBox));
     124        effect->setColorSpace(effectElement->renderer()->style()->svgStyle()->colorInterpolationFilters() == CI_LINEARRGB
     125                ? ColorSpaceLinearRGB : ColorSpaceDeviceRGB);
    124126        builder->add(effectElement->result(), effect);
    125127    }
     
    285287        context = filterData->savedContext;
    286288        filterData->savedContext = 0;
    287 #if !USE(CG)
    288         if (filterData->sourceGraphicBuffer)
    289             filterData->sourceGraphicBuffer->transformColorSpace(ColorSpaceDeviceRGB, ColorSpaceLinearRGB);
    290 #endif
    291289    }
    292290
     
    307305            ImageBuffer* resultImage = lastEffect->asImageBuffer();
    308306            if (resultImage)
    309                 resultImage->transformColorSpace(ColorSpaceLinearRGB, ColorSpaceDeviceRGB);
     307                resultImage->transformColorSpace(lastEffect->colorSpace(), ColorSpaceDeviceRGB);
    310308#endif
    311309        }
Note: See TracChangeset for help on using the changeset viewer.