Changeset 125462 in webkit
- Timestamp:
- Aug 13, 2012 3:37:21 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 41 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r125460 r125462 1 2012-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 1 46 2012-08-13 Raymond Toy <rtoy@google.com> 2 47 -
trunk/LayoutTests/platform/chromium/TestExpectations
r125450 r125462 1207 1207 BUGWK81217 : svg/hixie/perf/003.xml = PASS IMAGE 1208 1208 1209 // Rebaseline needed (https://bugs.webkit.org/show_bug.cgi?id=6033) 1210 BUGWK6033 : css3/filters/add-filter-rendering.html = PASS IMAGE 1211 BUGWK6033 : css3/filters/blur-filter-page-scroll-parents.html = PASS IMAGE 1212 BUGWK6033 : css3/filters/blur-filter-page-scroll.html = PASS IMAGE 1213 BUGWK6033 : css3/filters/crash-filter-change.html = PASS IMAGE 1214 BUGWK6033 : css3/filters/crash-hw-sw-switch.html = PASS IMAGE 1215 BUGWK6033 : css3/filters/custom/custom-filter-shader-cache.html = PASS IMAGE 1216 BUGWK6033 : css3/filters/custom/effect-color-check.html = PASS IMAGE 1217 BUGWK6033 : css3/filters/custom/effect-custom-combined-missing.html = PASS IMAGE 1218 BUGWK6033 : css3/filters/custom/effect-custom.html = PASS IMAGE 1219 BUGWK6033 : css3/filters/custom/filter-repaint-custom-clipped.html = PASS IMAGE 1220 BUGWK6033 : css3/filters/custom/filter-repaint-custom-rotated.html = PASS IMAGE 1221 BUGWK6033 : css3/filters/custom/filter-repaint-custom.html = PASS IMAGE 1222 BUGWK6033 : css3/filters/effect-blur.html = PASS IMAGE 1223 BUGWK6033 : css3/filters/effect-brightness-clamping.html = PASS IMAGE 1224 BUGWK6033 : css3/filters/effect-brightness.html = PASS IMAGE 1225 BUGWK6033 : css3/filters/effect-combined.html = PASS IMAGE 1226 BUGWK6033 : css3/filters/effect-contrast.html = PASS IMAGE 1227 BUGWK6033 : css3/filters/effect-drop-shadow.html = PASS IMAGE 1228 BUGWK6033 : css3/filters/effect-grayscale.html = PASS IMAGE 1229 BUGWK6033 : css3/filters/effect-hue-rotate.html = PASS IMAGE 1230 BUGWK6033 : css3/filters/effect-invert.html = PASS IMAGE 1231 BUGWK6033 : css3/filters/effect-opacity.html = PASS IMAGE 1232 BUGWK6033 : css3/filters/effect-reference-external.html = PASS IMAGE 1233 BUGWK6033 : css3/filters/effect-reference-hw.html = PASS IMAGE 1234 BUGWK6033 : css3/filters/effect-reference-ordering.html = PASS IMAGE 1235 BUGWK6033 : css3/filters/effect-reference.html = PASS IMAGE 1236 BUGWK6033 : css3/filters/effect-saturate.html = PASS IMAGE 1237 BUGWK6033 : css3/filters/effect-sepia.html = PASS IMAGE 1238 BUGWK6033 : css3/filters/filtered-inline.html = PASS IMAGE 1239 BUGWK6033 : css3/filters/multiple-filters-invalidation.html = PASS IMAGE 1240 BUGWK6033 : css3/filters/nested-filters.html = PASS IMAGE 1241 BUGWK6033 : css3/filters/regions-expanding.html = PASS IMAGE 1242 BUGWK6033 : css3/filters/simple-filter-rendering.html = PASS IMAGE 1243 BUGWK6033 : svg/filters/color-interpolation-filters.svg = PASS MISSING 1244 1245 BUGWK92758 : css3/filters/custom/effect-custom-parameters.html = PASS IMAGE CRASH 1246 1209 1247 BUGWK81240 MAC : svg/text/bidi-reorder-value-lists.svg = PASS IMAGE+TEXT 1210 1248 -
trunk/LayoutTests/platform/mac/TestExpectations
r125437 r125462 243 243 BUGWK85689 SKIP : fast/animation/request-animation-frame-disabled.html = TEXT 244 244 245 // Need rebaseline after https://bugs.webkit.org/show_bug.cgi?id=6033 246 BUGWK6033 : css3/filters/add-filter-rendering.html = PASS IMAGE 247 BUGWK6033 : css3/filters/blur-filter-page-scroll-parents.html = PASS IMAGE 248 BUGWK6033 : css3/filters/blur-filter-page-scroll.html = PASS IMAGE 249 BUGWK6033 : css3/filters/crash-filter-change.html = PASS IMAGE 250 BUGWK6033 : css3/filters/crash-hw-sw-switch.html = PASS IMAGE 251 BUGWK6033 : css3/filters/custom/custom-filter-shader-cache.html = PASS IMAGE 252 BUGWK6033 : css3/filters/custom/effect-color-check.html = PASS IMAGE 253 BUGWK6033 : css3/filters/custom/effect-custom-combined-missing.html = PASS IMAGE 254 BUGWK6033 : css3/filters/custom/effect-custom.html = PASS IMAGE 255 BUGWK6033 : css3/filters/custom/effect-custom-parameters.html = PASS IMAGE 256 BUGWK6033 : css3/filters/custom/filter-repaint-custom-clipped.html = PASS IMAGE 257 BUGWK6033 : css3/filters/custom/filter-repaint-custom-rotated.html = PASS IMAGE 258 BUGWK6033 : css3/filters/custom/filter-repaint-custom.html = PASS IMAGE 259 BUGWK6033 : css3/filters/effect-blur.html = PASS IMAGE 260 BUGWK6033 : css3/filters/effect-brightness-clamping.html = PASS IMAGE 261 BUGWK6033 : css3/filters/effect-brightness.html = PASS IMAGE 262 BUGWK6033 : css3/filters/effect-combined.html = PASS IMAGE 263 BUGWK6033 : css3/filters/effect-contrast.html = PASS IMAGE 264 BUGWK6033 : css3/filters/effect-drop-shadow.html = PASS IMAGE 265 BUGWK6033 : css3/filters/effect-grayscale.html = PASS IMAGE 266 BUGWK6033 : css3/filters/effect-hue-rotate.html = PASS IMAGE 267 BUGWK6033 : css3/filters/effect-invert.html = PASS IMAGE 268 BUGWK6033 : css3/filters/effect-opacity.html = PASS IMAGE 269 BUGWK6033 : css3/filters/effect-reference-external.html = PASS IMAGE 270 BUGWK6033 : css3/filters/effect-reference-hw.html = PASS IMAGE 271 BUGWK6033 : css3/filters/effect-reference-ordering.html = PASS IMAGE 272 BUGWK6033 : css3/filters/effect-reference.html = PASS IMAGE 273 BUGWK6033 : css3/filters/effect-saturate.html = PASS IMAGE 274 BUGWK6033 : css3/filters/effect-sepia.html = PASS IMAGE 275 BUGWK6033 : css3/filters/filtered-inline.html = PASS IMAGE 276 BUGWK6033 : css3/filters/multiple-filters-invalidation.html = PASS IMAGE 277 BUGWK6033 : css3/filters/nested-filters.html = PASS IMAGE 278 BUGWK6033 : css3/filters/regions-expanding.html = PASS IMAGE 279 BUGWK6033 : css3/filters/simple-filter-rendering.html = PASS IMAGE 280 BUGWK6033 : svg/filters/color-interpolation-filters.svg = PASS MISSING 281 245 282 // Hits assert https://bugs.webkit.org/show_bug.cgi?id=86208 246 283 BUGWK85308 SKIP : ietestcenter/css3/valuesandunits/units-000.htm = IMAGE -
trunk/LayoutTests/platform/qt/TestExpectations
r125437 r125462 75 75 BUGWK85580 SKIP : inspector/styles/variables = PASS 76 76 77 // Need rebaseline after https://bugs.webkit.org/show_bug.cgi?id=6033 78 BUGWK6033 : css3/filters/add-filter-rendering.html = PASS IMAGE 79 BUGWK6033 : css3/filters/blur-filter-page-scroll-parents.html = PASS IMAGE 80 BUGWK6033 : css3/filters/blur-filter-page-scroll.html = PASS IMAGE 81 BUGWK6033 : css3/filters/crash-filter-change.html = PASS IMAGE 82 BUGWK6033 : css3/filters/crash-hw-sw-switch.html = PASS IMAGE 83 BUGWK6033 : css3/filters/custom/custom-filter-shader-cache.html = PASS IMAGE 84 BUGWK6033 : css3/filters/custom/effect-color-check.html = PASS IMAGE 85 BUGWK6033 : css3/filters/custom/effect-custom-combined-missing.html = PASS IMAGE 86 BUGWK6033 : css3/filters/custom/effect-custom.html = PASS IMAGE 87 BUGWK6033 : css3/filters/custom/effect-custom-parameters.html = PASS IMAGE 88 BUGWK6033 : css3/filters/custom/filter-repaint-custom-clipped.html = PASS IMAGE 89 BUGWK6033 : css3/filters/custom/filter-repaint-custom-rotated.html = PASS IMAGE 90 BUGWK6033 : css3/filters/custom/filter-repaint-custom.html = PASS IMAGE 91 BUGWK6033 : css3/filters/effect-blur.html = PASS IMAGE 92 BUGWK6033 : css3/filters/effect-brightness-clamping.html = PASS IMAGE 93 BUGWK6033 : css3/filters/effect-brightness.html = PASS IMAGE 94 BUGWK6033 : css3/filters/effect-combined.html = PASS IMAGE 95 BUGWK6033 : css3/filters/effect-contrast.html = PASS IMAGE 96 BUGWK6033 : css3/filters/effect-drop-shadow.html = PASS IMAGE 97 BUGWK6033 : css3/filters/effect-grayscale.html = PASS IMAGE 98 BUGWK6033 : css3/filters/effect-hue-rotate.html = PASS IMAGE 99 BUGWK6033 : css3/filters/effect-invert.html = PASS IMAGE 100 BUGWK6033 : css3/filters/effect-opacity.html = PASS IMAGE 101 BUGWK6033 : css3/filters/effect-reference-external.html = PASS IMAGE 102 BUGWK6033 : css3/filters/effect-reference-hw.html = PASS IMAGE 103 BUGWK6033 : css3/filters/effect-reference-ordering.html = PASS IMAGE 104 BUGWK6033 : css3/filters/effect-reference.html = PASS IMAGE 105 BUGWK6033 : css3/filters/effect-saturate.html = PASS IMAGE 106 BUGWK6033 : css3/filters/effect-sepia.html = PASS IMAGE 107 BUGWK6033 : css3/filters/filtered-inline.html = PASS IMAGE 108 BUGWK6033 : css3/filters/multiple-filters-invalidation.html = PASS IMAGE 109 BUGWK6033 : css3/filters/nested-filters.html = PASS IMAGE 110 BUGWK6033 : css3/filters/regions-expanding.html = PASS IMAGE 111 BUGWK6033 : css3/filters/simple-filter-rendering.html = PASS IMAGE 112 BUGWK6033 : svg/filters/color-interpolation-filters.svg = PASS MISSING 113 77 114 // UndoManager is not yet enabled. 78 115 BUGWK87908 SKIP : editing/undomanager = PASS -
trunk/Source/WebCore/ChangeLog
r125460 r125462 1 2012-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 1 47 2012-08-13 Raymond Toy <rtoy@google.com> 2 48 -
trunk/Source/WebCore/platform/graphics/filters/FilterEffect.cpp
r117058 r125462 44 44 , m_hasHeight(false) 45 45 , m_clipsToBounds(true) 46 , m_colorSpace(ColorSpaceLinearRGB) 47 , m_resultColorSpace(ColorSpaceDeviceRGB) 46 48 { 47 49 ASSERT(m_filter); … … 105 107 if (!in->hasResult()) 106 108 return; 107 } 109 110 // Convert input results to the current effect's color space. 111 in->transformResultColorSpace(m_colorSpace); 112 } 113 108 114 determineAbsolutePaintRect(); 115 m_resultColorSpace = m_colorSpace; 109 116 110 117 if (!isFilterSizeValid(m_absolutePaintRect)) … … 189 196 if (m_imageBufferResult) 190 197 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()); 192 199 IntRect destinationRect(IntPoint(), m_absolutePaintRect.size()); 193 200 if (m_premultipliedImageResult) … … 326 333 if (m_absolutePaintRect.isEmpty()) 327 334 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()); 329 336 if (!m_imageBufferResult) 330 337 return 0; … … 357 364 } 358 365 366 void 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 359 392 TextStream& FilterEffect::externalRepresentation(TextStream& ts, int) const 360 393 { -
trunk/Source/WebCore/platform/graphics/filters/FilterEffect.h
r114992 r125462 24 24 25 25 #if ENABLE(FILTERS) 26 #include "ColorSpace.h" 26 27 #include "FloatRect.h" 27 28 #include "IntRect.h" … … 130 131 void setClipsToBounds(bool value) { m_clipsToBounds = value; } 131 132 133 ColorSpace colorSpace() const { return m_colorSpace; } 134 void setColorSpace(ColorSpace colorSpace) { m_colorSpace = colorSpace; } 135 void transformResultColorSpace(ColorSpace); 136 132 137 protected: 133 138 FilterEffect(Filter*); … … 179 184 // Should the effect clip to its primitive region, or expand to use the combined region of its inputs. 180 185 bool m_clipsToBounds; 186 187 ColorSpace m_colorSpace; 188 ColorSpace m_resultColorSpace; 181 189 }; 182 190 -
trunk/Source/WebCore/platform/graphics/filters/SourceGraphic.h
r97853 r125462 49 49 : FilterEffect(filter) 50 50 { 51 setColorSpace(ColorSpaceDeviceRGB); 51 52 } 52 53 }; -
trunk/Source/WebCore/rendering/FilterEffectRenderer.cpp
r123781 r125462 403 403 { 404 404 lastEffect()->apply(); 405 406 #if !USE(CG) 407 output()->transformColorSpace(lastEffect()->colorSpace(), ColorSpaceDeviceRGB); 408 #endif 405 409 } 406 410 -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp
r123210 r125462 122 122 effectElement->setStandardAttributes(effect.get()); 123 123 effect->setEffectBoundaries(SVGLengthContext::resolveRectangle<SVGFilterPrimitiveStandardAttributes>(effectElement, filterElement->primitiveUnits(), targetBoundingBox)); 124 effect->setColorSpace(effectElement->renderer()->style()->svgStyle()->colorInterpolationFilters() == CI_LINEARRGB 125 ? ColorSpaceLinearRGB : ColorSpaceDeviceRGB); 124 126 builder->add(effectElement->result(), effect); 125 127 } … … 285 287 context = filterData->savedContext; 286 288 filterData->savedContext = 0; 287 #if !USE(CG)288 if (filterData->sourceGraphicBuffer)289 filterData->sourceGraphicBuffer->transformColorSpace(ColorSpaceDeviceRGB, ColorSpaceLinearRGB);290 #endif291 289 } 292 290 … … 307 305 ImageBuffer* resultImage = lastEffect->asImageBuffer(); 308 306 if (resultImage) 309 resultImage->transformColorSpace( ColorSpaceLinearRGB, ColorSpaceDeviceRGB);307 resultImage->transformColorSpace(lastEffect->colorSpace(), ColorSpaceDeviceRGB); 310 308 #endif 311 309 }
Note: See TracChangeset
for help on using the changeset viewer.