Changeset 105576 in webkit
- Timestamp:
- Jan 21, 2012 7:40:03 AM (12 years ago)
- Location:
- trunk
- Files:
-
- 6 added
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r105575 r105576 1 2012-01-20 Chris Marrin <cmarrin@apple.com> 2 3 Implement hardware accelerated Brightness and contrast filters 4 https://bugs.webkit.org/show_bug.cgi?id=75521 5 https://bugs.webkit.org/show_bug.cgi?id=76719 6 7 Reviewed by Simon Fraser. 8 9 New tests for hardware accelerated brightness and contrast filters. Also 10 added brightness and contrast values to effect-combined-hw test. And changed 11 brightness values in effect-brightness.html to reflect new spec. 12 Also fixed parsing and computed style tests to reflect new brightness spec. 13 14 * css3/filters/effect-brightness-expected.png: 15 * css3/filters/effect-brightness-hw-expected.png: Added. 16 * css3/filters/effect-brightness-hw-expected.txt: Added. 17 * css3/filters/effect-brightness-hw.html: Added. 18 * css3/filters/effect-brightness.html: 19 * css3/filters/effect-combined-expected.png: 20 * css3/filters/effect-combined-hw-expected.png: 21 * css3/filters/effect-combined-hw-expected.txt: 22 * css3/filters/effect-combined-hw.html: 23 * css3/filters/effect-combined.html: 24 * css3/filters/effect-contrast-hw-expected.png: Added. 25 * css3/filters/effect-contrast-hw-expected.txt: Added. 26 * css3/filters/effect-contrast-hw.html: Added. 27 * css3/filters/filter-property-computed-style-expected.txt: 28 * css3/filters/filter-property-parsing-expected.txt: 29 * css3/filters/filter-property-parsing-invalid-expected.txt: 30 * css3/filters/script-tests/filter-property-computed-style.js: 31 * css3/filters/script-tests/filter-property-parsing-invalid.js: 32 * css3/filters/script-tests/filter-property-parsing.js: 33 1 34 2012-01-21 Nikolas Zimmermann <nzimmermann@rim.com> 2 35 -
trunk/LayoutTests/css3/filters/effect-brightness.html
r104698 r105576 5 5 } 6 6 </script> 7 <img style="-webkit-filter: brightness( 0)" src="resources/reference.png">8 <img style="-webkit-filter: brightness( 0.5)" src="resources/reference.png">9 <img style="-webkit-filter: brightness( 1.0)" src="resources/reference.png">10 <img style="-webkit-filter: brightness( 2)" src="resources/reference.png">11 <img style="-webkit-filter: brightness( 5)" src="resources/reference.png">12 <img style="-webkit-filter: brightness( 10)" src="resources/reference.png">13 <img style="-webkit-filter: brightness(1 000)" src="resources/reference.png">7 <img style="-webkit-filter: brightness(-1)" src="resources/reference.png"> 8 <img style="-webkit-filter: brightness(-0.6)" src="resources/reference.png"> 9 <img style="-webkit-filter: brightness(-0.3)" src="resources/reference.png"> 10 <img style="-webkit-filter: brightness()" src="resources/reference.png"> 11 <img style="-webkit-filter: brightness(0.3)" src="resources/reference.png"> 12 <img style="-webkit-filter: brightness(0.6)" src="resources/reference.png"> 13 <img style="-webkit-filter: brightness(1)" src="resources/reference.png"> -
trunk/LayoutTests/css3/filters/effect-combined-hw-expected.txt
r103148 r105576 12 12 RenderText {#text} at (732,96) size 4x18 13 13 text run at (732,96) width 4: " " 14 RenderText {#text} at (180,210) size 4x18 15 text run at (180,210) width 4: " " 14 16 RenderText {#text} at (0,0) size 0x0 15 17 layer at (18,18) size 160x90 … … 23 25 layer at (18,132) size 160x90 24 26 RenderImage {IMG} at (10,124) size 160x90 27 layer at (202,132) size 160x90 28 RenderImage {IMG} at (194,124) size 160x90 -
trunk/LayoutTests/css3/filters/effect-combined-hw.html
r103148 r105576 10 10 <img style="-webkit-filter: blur(3px) hue-rotate(-90deg) sepia()" src="resources/reference.png"> 11 11 <img style="-webkit-filter: blur(3px) opacity(0.5) hue-rotate(-90deg) sepia()" src="resources/reference.png"> 12 <img style="-webkit-filter: blur(3px) brightness(0.2) contrast(2)" src="resources/reference.png"> -
trunk/LayoutTests/css3/filters/effect-combined.html
r104698 r105576 15 15 <img style="-webkit-filter: blur(3px) hue-rotate(-90deg) sepia()" src="resources/reference.png"> 16 16 <img style="-webkit-filter: blur(3px) opacity(0.5) hue-rotate(-90deg) sepia()" src="resources/reference.png"> 17 <img style="-webkit-filter: blur(3px) brightness( 2)" src="resources/reference.png">17 <img style="-webkit-filter: blur(3px) brightness(0.2) contrast(2)" src="resources/reference.png"> -
trunk/LayoutTests/css3/filters/filter-property-computed-style-expected.txt
r103125 r105576 239 239 PASS subRule.cssText is 'brightness(1)' 240 240 241 Value greater than 1 : brightness(2)242 PASS filterStyle.length is 1243 PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS244 PASS subRule.cssText is 'brightness(2)'245 246 241 Float value converts to integer : brightness(1.0) 247 242 PASS filterStyle.length is 1 … … 257 252 PASS filterStyle.length is 1 258 253 PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS 259 PASS subRule.cssText is 'brightness( 1)'254 PASS subRule.cssText is 'brightness(0)' 260 255 261 256 Multiple values : brightness(0.5) brightness(0.25) … … 374 369 PASS subRule.cssText is 'blur(5px)' 375 370 376 Percentage values : grayscale(50%) sepia(25%) saturate(75%) invert(20%) opacity(90%) brightness( 130%) contrast(30%)371 Percentage values : grayscale(50%) sepia(25%) saturate(75%) invert(20%) opacity(90%) brightness(60%) contrast(30%) 377 372 PASS filterStyle.length is 7 378 373 PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE … … 387 382 PASS subRule.cssText is 'opacity(0.9)' 388 383 PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS 389 PASS subRule.cssText is 'brightness( 1.3)'384 PASS subRule.cssText is 'brightness(0.6)' 390 385 PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_CONTRAST 391 386 PASS subRule.cssText is 'contrast(0.3)' -
trunk/LayoutTests/css3/filters/filter-property-parsing-expected.txt
r103125 r105576 579 579 PASS subRule.cssText is 'brightness(50%)' 580 580 581 Percentage value > 1 : brightness(150%)582 PASS cssRule.type is 1583 PASS declaration.length is 1584 PASS declaration.getPropertyValue('-webkit-filter') is 'brightness(150%)'585 PASS jsWrapperClass(filterRule) is 'CSSValueList'586 PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'587 PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'588 PASS filterRule.length is 1589 PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS590 PASS subRule.cssText is 'brightness(150%)'591 592 581 Float value converts to integer : brightness(1.0) 593 582 PASS cssRule.type is 1 … … 622 611 PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS 623 612 PASS subRule.cssText is 'brightness()' 624 625 Value greater than one : brightness(2)626 PASS cssRule.type is 1627 PASS declaration.length is 1628 PASS declaration.getPropertyValue('-webkit-filter') is 'brightness(2)'629 PASS jsWrapperClass(filterRule) is 'CSSValueList'630 PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'631 PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'632 PASS filterRule.length is 1633 PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS634 PASS subRule.cssText is 'brightness(2)'635 613 636 614 Multiple values : brightness(0.5) brightness(0.25) -
trunk/LayoutTests/css3/filters/filter-property-parsing-invalid-expected.txt
r103125 r105576 215 215 PASS declaration.getPropertyValue('-webkit-filter') is null 216 216 217 Negative parameter : brightness(-0.5)218 PASS cssRule.type is 1 219 PASS declaration.length is 0 220 PASS declaration.getPropertyValue('-webkit-filter') is null 221 222 Negative percent : brightness(-10%)217 Parameter out of bounds (negative) : brightness(-1.1) 218 PASS cssRule.type is 1 219 PASS declaration.length is 0 220 PASS declaration.getPropertyValue('-webkit-filter') is null 221 222 Parameter out of bounds (positive) : brightness(101%) 223 223 PASS cssRule.type is 1 224 224 PASS declaration.length is 0 -
trunk/LayoutTests/css3/filters/script-tests/filter-property-computed-style.js
r103125 r105576 232 232 ["brightness(1)"]); 233 233 234 testComputedFilterRule("Value greater than 1",235 "brightness(2)", 1,236 ["WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS"],237 ["brightness(2)"]);238 239 234 testComputedFilterRule("Float value converts to integer", 240 235 "brightness(1.0)", 1, … … 250 245 "brightness()", 1, 251 246 ["WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS"], 252 ["brightness( 1)"]);247 ["brightness(0)"]); 253 248 254 249 testComputedFilterRule("Multiple values", … … 364 359 365 360 testComputedFilterRule("Percentage values", 366 "grayscale(50%) sepia(25%) saturate(75%) invert(20%) opacity(90%) brightness( 130%) contrast(30%)", 7,361 "grayscale(50%) sepia(25%) saturate(75%) invert(20%) opacity(90%) brightness(60%) contrast(30%)", 7, 367 362 [ 368 363 "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE", … … 380 375 "invert(0.2)", 381 376 "opacity(0.9)", 382 "brightness( 1.3)",377 "brightness(0.6)", 383 378 "contrast(0.3)" 384 379 ]); -
trunk/LayoutTests/css3/filters/script-tests/filter-property-parsing-invalid.js
r103125 r105576 69 69 testInvalidFilterRule("Too many parameters and commas", "brightness(0.5, 0.5)"); 70 70 testInvalidFilterRule("Trailing comma", "brightness(0.5,)"); 71 testInvalidFilterRule(" Negative parameter", "brightness(-0.5)");72 testInvalidFilterRule(" Negative percent", "brightness(-10%)");71 testInvalidFilterRule("Parameter out of bounds (negative)", "brightness(-1.1)"); 72 testInvalidFilterRule("Parameter out of bounds (positive)", "brightness(101%)"); 73 73 74 74 testInvalidFilterRule("Length instead of number", "contrast(10px)"); -
trunk/LayoutTests/css3/filters/script-tests/filter-property-parsing.js
r103125 r105576 302 302 ["brightness(50%)"]); 303 303 304 testFilterRule("Percentage value > 1",305 "brightness(150%)", 1, "brightness(150%)",306 ["WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS"],307 ["brightness(150%)"]);308 309 304 testFilterRule("Float value converts to integer", 310 305 "brightness(1.0)", 1, "brightness(1)", … … 321 316 ["WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS"], 322 317 ["brightness()"]); 323 324 testFilterRule("Value greater than one",325 "brightness(2)", 1, "brightness(2)",326 ["WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS"],327 ["brightness(2)"]);328 318 329 319 testFilterRule("Multiple values", -
trunk/Source/WebCore/ChangeLog
r105575 r105576 1 2012-01-20 Chris Marrin <cmarrin@apple.com> 2 3 Implement hardware accelerated Brightness and contrast filters 4 https://bugs.webkit.org/show_bug.cgi?id=75521 5 https://bugs.webkit.org/show_bug.cgi?id=76719 6 7 Reviewed by Simon Fraser. 8 9 Implemented hardware accelerated brightness and contrast filters. This also fixes 10 the bug where grayscale filter was accidentally never getting hardware accelerated. 11 It also complies with proposed spec changes for the brightness filter to be additive 12 rather than multiplicative, according to https://bugs.webkit.org/show_bug.cgi?id=76719. 13 Had to make both fixes in the same patch because I had to change the allowed brightness 14 values for the hardware version, so I had to change the software version as well. 15 16 Tests: css3/filters/effect-brightness-hw.html 17 css3/filters/effect-contrast-hw.html 18 19 * css/CSSParser.cpp: 20 (WebCore::CSSParser::parseBuiltinFilterArguments): 21 * css/CSSStyleSelector.cpp: 22 (WebCore::CSSStyleSelector::createFilterOperations): 23 * platform/graphics/ca/mac/PlatformCALayerMac.mm: 24 (PlatformCALayer::setFilters): 25 (PlatformCALayer::filtersCanBeComposited): 26 * rendering/FilterEffectRenderer.cpp: 27 (WebCore::FilterEffectRenderer::build): 28 1 29 2012-01-21 Nikolas Zimmermann <nzimmermann@rim.com> 2 30 -
trunk/Source/WebCore/css/CSSParser.cpp
r105502 r105576 6812 6812 case WebKitCSSFilterValue::InvertFilterOperation: 6813 6813 case WebKitCSSFilterValue::OpacityFilterOperation: 6814 case WebKitCSSFilterValue::BrightnessFilterOperation:6815 6814 case WebKitCSSFilterValue::ContrastFilterOperation: { 6816 6815 // One optional argument, 0-1 or 0%-100%, if missing use 100%. … … 6825 6824 double amount = value->fValue; 6826 6825 6827 // Saturate , Brightnessand Contrast allow values over 100%.6826 // Saturate and Contrast allow values over 100%. 6828 6827 if (filterType != WebKitCSSFilterValue::SaturateFilterOperation 6829 && filterType != WebKitCSSFilterValue::BrightnessFilterOperation6830 6828 && filterType != WebKitCSSFilterValue::ContrastFilterOperation) { 6831 6829 double maxAllowed = value->unit == CSSPrimitiveValue::CSS_PERCENTAGE ? 100.0 : 1.0; … … 6833 6831 return 0; 6834 6832 } 6833 6834 filterValue->append(cssValuePool()->createValue(amount, static_cast<CSSPrimitiveValue::UnitTypes>(value->unit))); 6835 } 6836 break; 6837 } 6838 case WebKitCSSFilterValue::BrightnessFilterOperation: { 6839 // One optional argument, -1 to +1 or -100% to +100%, if missing use 0, 6840 if (args->size() > 1) 6841 return 0; 6842 6843 if (args->size()) { 6844 CSSParserValue* value = args->current(); 6845 if (!validUnit(value, FNumber | FPercent, true)) 6846 return 0; 6847 6848 double amount = value->fValue; 6849 double minAllowed = value->unit == CSSPrimitiveValue::CSS_PERCENTAGE ? -100.0 : -1.0; 6850 double maxAllowed = value->unit == CSSPrimitiveValue::CSS_PERCENTAGE ? 100.0 : 1.0; 6851 if (amount < minAllowed || amount > maxAllowed) 6852 return 0; 6835 6853 6836 6854 filterValue->append(cssValuePool()->createValue(amount, static_cast<CSSPrimitiveValue::UnitTypes>(value->unit))); -
trunk/Source/WebCore/css/CSSStyleSelector.cpp
r105502 r105576 5397 5397 case WebKitCSSFilterValue::ContrastFilterOperation: 5398 5398 case WebKitCSSFilterValue::OpacityFilterOperation: { 5399 double amount = 1;5399 double amount = (filterValue->operationType() == WebKitCSSFilterValue::BrightnessFilterOperation) ? 0 : 1; 5400 5400 if (filterValue->length() == 1) { 5401 5401 amount = firstValue->getDoubleValue(); -
trunk/Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm
r104698 r105576 721 721 722 722 for (unsigned i = 0; i < filters.size(); ++i) { 723 String filterName = String::format("filter_%d", i); 724 723 725 const FilterOperation* filterOperation = filters.at(i); 724 726 switch(filterOperation->getOperationType()) { … … 745 747 [caFilter setValue:[NSNumber numberWithFloat:op->amount()] forKey:@"inputIntensity"]; 746 748 [caFilter setValue:[CIColor colorWithRed:1 green:1 blue:1] forKey:@"inputColor"]; 747 [caFilter setName: @"grayscaleFilter"];749 [caFilter setName:filterName]; 748 750 [array.get() addObject:caFilter]; 749 751 break; … … 763 765 [caFilter setValue:[CIVector vectorWithX:0 Y:0 Z:0 W:1] forKey:@"inputAVector"]; 764 766 [caFilter setValue:[CIVector vectorWithX:0 Y:0 Z:0 W:0] forKey:@"inputBiasVector"]; 765 [caFilter setName: @"sepiaFilter"];767 [caFilter setName:filterName]; 766 768 [array.get() addObject:caFilter]; 767 769 break; … … 772 774 [caFilter setDefaults]; 773 775 [caFilter setValue:[NSNumber numberWithFloat:op->amount()] forKey:@"inputSaturation"]; 774 [caFilter setName: @"saturateFilter"];776 [caFilter setName:filterName]; 775 777 [array.get() addObject:caFilter]; 776 778 break; … … 783 785 // The CIHueAdjust value is in radians 784 786 [caFilter setValue:[NSNumber numberWithFloat:op->amount() * M_PI * 2 / 360] forKey:@"inputAngle"]; 785 [caFilter setName: @"hueRotateFilter"];787 [caFilter setName:filterName]; 786 788 [array.get() addObject:caFilter]; 787 789 break; … … 799 801 [caFilter setValue:[CIVector vectorWithX:0 Y:0 Z:0 W:1] forKey:@"inputAVector"]; 800 802 [caFilter setValue:[CIVector vectorWithX:op->amount() Y:op->amount() Z:op->amount() W:0] forKey:@"inputBiasVector"]; 801 [caFilter setName: @"invertFilter"];803 [caFilter setName:filterName]; 802 804 [array.get() addObject:caFilter]; 803 805 break; … … 813 815 [caFilter setValue:[CIVector vectorWithX:0 Y:0 Z:0 W:op->amount()] forKey:@"inputAVector"]; 814 816 [caFilter setValue:[CIVector vectorWithX:0 Y:0 Z:0 W:0] forKey:@"inputBiasVector"]; 815 [caFilter setName: @"opacityFilter"];817 [caFilter setName:filterName]; 816 818 [array.get() addObject:caFilter]; 817 819 break; … … 823 825 [caFilter setDefaults]; 824 826 [caFilter setValue:[NSNumber numberWithFloat:op->stdDeviation().calcFloatValue(0)] forKey:@"inputRadius"]; 825 [caFilter setName:@"blurFilter"]; 827 [caFilter setName:filterName]; 828 [array.get() addObject:caFilter]; 829 break; 830 } 831 case FilterOperation::CONTRAST: { 832 const BasicComponentTransferFilterOperation* op = static_cast<const BasicComponentTransferFilterOperation*>(filterOperation); 833 CIFilter* caFilter = [CIFilter filterWithName:@"CIColorControls"]; 834 [caFilter setDefaults]; 835 [caFilter setValue:[NSNumber numberWithFloat:op->amount()] forKey:@"inputContrast"]; 836 [caFilter setName:filterName]; 837 [array.get() addObject:caFilter]; 838 break; 839 } 840 case FilterOperation::BRIGHTNESS: { 841 const BasicComponentTransferFilterOperation* op = static_cast<const BasicComponentTransferFilterOperation*>(filterOperation); 842 CIFilter* caFilter = [CIFilter filterWithName:@"CIColorControls"]; 843 [caFilter setDefaults]; 844 [caFilter setValue:[NSNumber numberWithFloat:op->amount()] forKey:@"inputBrightness"]; 845 [caFilter setName:filterName]; 826 846 [array.get() addObject:caFilter]; 827 847 break; … … 851 871 switch(filterOperation->getOperationType()) { 852 872 case FilterOperation::REFERENCE: 853 case FilterOperation::GRAYSCALE:854 case FilterOperation::BRIGHTNESS:855 case FilterOperation::CONTRAST:856 873 #if ENABLE(CSS_SHADERS) 857 874 case FilterOperation::CUSTOM: -
trunk/Source/WebCore/rendering/FilterEffectRenderer.cpp
r105485 r105576 217 217 ComponentTransferFunction transferFunction; 218 218 transferFunction.type = FECOMPONENTTRANSFER_TYPE_LINEAR; 219 transferFunction.slope = narrowPrecisionToFloat(componentTransferOperation->amount()); 219 transferFunction.slope = 1; 220 transferFunction.intercept = narrowPrecisionToFloat(componentTransferOperation->amount()); 220 221 221 222 ComponentTransferFunction nullFunction;
Note: See TracChangeset
for help on using the changeset viewer.