Bug 106041 - Some SVG filters don't work with tiled drawing
Summary: Some SVG filters don't work with tiled drawing
Status: RESOLVED DUPLICATE of bug 106221
Alias: None
Product: WebKit
Classification: Unclassified
Component: SVG (show other bugs)
Version: 528+ (Nightly build)
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Nobody
URL:
Keywords: InRadar
Depends on:
Blocks:
 
Reported: 2013-01-03 14:23 PST by Tim Horton
Modified: 2013-03-12 05:14 PDT (History)
6 users (show)

See Also:


Attachments
Testcase (601 bytes, image/svg+xml)
2013-01-04 14:39 PST, Simon Fraser (smfr)
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Tim Horton 2013-01-03 14:23:57 PST
I don't know why, but the following examples:

http://srufaculty.sru.edu/david.dailey/svg/Turbulence1.svg
http://srufaculty.sru.edu/david.dailey/svg/later/displace4.svg
http://srufaculty.sru.edu/david.dailey/svg/later/displace7.svg

fail when opened in Safari 6 with tiled drawing on (Mountain Lion, etc.)

<rdar://problem/12951224>
Comment 1 Dirk Schulze 2013-01-04 11:55:11 PST
I am unsure how WebKit handles tiled drawings if I recover it correctly. But we limit the filter size (the area that get filtered) to WebCore's viewport IIRC. That might or might not be a problem for tiled drawing.
Comment 2 Simon Fraser (smfr) 2013-01-04 14:39:56 PST
Created attachment 181375 [details]
Testcase
Comment 3 Simon Fraser (smfr) 2013-01-04 14:46:03 PST
If you resize the window down so that only 1 tile shows, it starts to work. I think some caching is happening when we attempt to draw the filtered element into other tiles where it's clipped out, and that empty version is getting cached.
Comment 4 Simon Fraser (smfr) 2013-01-04 14:54:01 PST
Turning off the caching in RenderSVGResourceFilter fixes this. So this is about the filtered content being rendered into each tile, but clipped out in some, and a bad version getting cached.
Comment 5 Simon Fraser (smfr) 2013-01-04 15:07:24 PST
Of course RenderSVGShape::paint() bails at:

    if (!SVGRenderSupport::paintInfoIntersectsRepaintRect(boundingBox, m_localTransform, paintInfo))
        return;

when painting tiles that don't contain the filtered shape.

SVGRenderingContext needs to educated about multiple paint passes of the same rendered into different contexts with different clips.
Comment 6 Tim Horton 2013-03-12 05:05:45 PDT
Confusingly, this seems to have progressed. Will bisect the progression.
Comment 7 Tim Horton 2013-03-12 05:14:20 PDT
Oh, Florin actually explicitly fixed this. Duping.

*** This bug has been marked as a duplicate of bug 106221 ***