haikuwebkit/LayoutTests/svg/filters/color-interpolation-filters...

60 lines
3.3 KiB
XML
Raw Permalink Normal View History

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. Canonical link: https://commits.webkit.org/111732@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@125462 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-08-13 22:37:21 +00:00
<?xml version="1.0" standalone="yes"?>
<svg xmlns = "http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Test for https://bugs.webkit.org/show_bug.cgi?id=6033 -->
<defs>
<filter id="default">
<feColorMatrix type="matrix" in="SourceGraphic" values=".5 0 0 0 0 0 .5 0 0 0 0 0 .5 0 0 0 0 0 1 0"/>
</filter>
<filter id="fe-lrgb">
<feColorMatrix type="matrix" in="SourceGraphic" values=".5 0 0 0 0 0 .5 0 0 0 0 0 .5 0 0 0 0 0 1 0" color-interpolation-filters="linearRGB"/>
</filter>
<filter id="fe-srgb">
<feColorMatrix type="matrix" in="SourceGraphic" values=".5 0 0 0 0 0 .5 0 0 0 0 0 .5 0 0 0 0 0 1 0" color-interpolation-filters="sRGB"/>
</filter>
<filter id="f-lrgb" color-interpolation-filters="linearRGB">
<feColorMatrix type="matrix" in="SourceGraphic" values=".5 0 0 0 0 0 .5 0 0 0 0 0 .5 0 0 0 0 0 1 0"/>
</filter>
<filter id="f-srgb" color-interpolation-filters="sRGB">
<feColorMatrix type="matrix" in="SourceGraphic" values=".5 0 0 0 0 0 .5 0 0 0 0 0 .5 0 0 0 0 0 1 0"/>
</filter>
<filter id="f-lrgb-fe-srgb" color-interpolation-filters="linearRGB">
<feColorMatrix type="matrix" in="SourceGraphic" values=".5 0 0 0 0 0 .5 0 0 0 0 0 .5 0 0 0 0 0 1 0" color-interpolation-filters="sRGB"/>
</filter>
<filter id="f-srgb-fe-lrgb" color-interpolation-filters="sRGB">
<feColorMatrix type="matrix" in="SourceGraphic" values=".5 0 0 0 0 0 .5 0 0 0 0 0 .5 0 0 0 0 0 1 0" color-interpolation-filters="linearRGB"/>
</filter>
<filter id="f-multi-lrgb-srgb">
<feColorMatrix type="matrix" in="SourceGraphic" result="out1" values="0.5 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0" color-interpolation-filters="linearRGB"/>
<feColorMatrix type="matrix" in="out1" values=".5 0 0 0 0 0 .5 0 0 0 0 0 .5 0 0 0 0 0 1 0" color-interpolation-filters="sRGB"/>
</filter>
<filter id="f-multi-srgb-lrgb">
<feColorMatrix type="matrix" in="SourceGraphic" result="out1" values="0.5 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0" color-interpolation-filters="sRGB"/>
<feColorMatrix type="matrix" in="out1" values=".5 0 0 0 0 0 .5 0 0 0 0 0 .5 0 0 0 0 0 1 0" color-interpolation-filters="linearRGB"/>
</filter>
<g id="box">
<rect width="100" height="100" fill="red"/>
<rect y="100" width="100" height="100" fill="green"/>
<rect y="200" width="100" height="100" fill="blue"/>
</g>
<g id="bar">
<rect width="800" height="100" fill="purple"/>
</g>
</defs>
<use xlink:href="#box"/>
<use xlink:href="#box" transform="translate(100,0)" filter="url(#default)"/>
<use xlink:href="#box" transform="translate(200,0)" filter="url(#fe-lrgb)"/>
<use xlink:href="#box" transform="translate(300,0)" filter="url(#fe-srgb)"/>
<use xlink:href="#box" transform="translate(400,0)" filter="url(#f-lrgb)"/>
<use xlink:href="#box" transform="translate(500,0)" filter="url(#f-srgb)"/>
<use xlink:href="#box" transform="translate(600,0)" filter="url(#f-lrgb-fe-srgb)"/>
<use xlink:href="#box" transform="translate(700,0)" filter="url(#f-srgb-fe-lrgb)"/>
<use xlink:href="#bar" transform="translate(0,300)"/>
<use xlink:href="#bar" transform="translate(0,400)" filter="url(#f-multi-lrgb-srgb)"/>
<use xlink:href="#bar" transform="translate(0,500)" filter="url(#f-multi-srgb-lrgb)"/>
</svg>