|
|
Created:
5 years, 6 months ago by Stephen White Modified:
4 years, 3 months ago Reviewers:
bsalomon CC:
reviews_skia.org Base URL:
https://skia.googlesource.com/skia.git@master Target Ref:
refs/heads/master Project:
skia Visibility:
Public. |
DescriptionScreenspace AA tessellated GPU path rendering.
This is an approach to antialiased concave path rendering
on the GPU without using MSAA. It uses GrTessellator to
extract boundary contours from the given path, then
inflates by half a pixel in screen space each direction,
then renders the result with zero alpha on the outer
contour and one alpha on in the inner contour. This
requires two passes through the tessellation code: one
to extract the boundaries, then one to tessellate the
result.
This gives approximately a 3X improvement on the IE
chalkboard demo in non-MSAA mode, a 30-40% improvement
on MotionMark's "Fill Paths", and a ~3X improvement on
MotionMark's "canvas arcTo segments".
It works best for large, simple paths, so there's currently
a limit of 10 verbs in the onCanDrawPath() check. This
dovetails nicely with the distance field path renderer's
support for small, detailed (and cached) paths.
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1152733009
NOTRY=true
Committed: https://skia.googlesource.com/skia/+/f57372daf0562a187c24d427366ac6d0cb980c9b
Patch Set 1 #Patch Set 2 : Cleanup: remove fContour, remove edges as extracted. #Patch Set 3 : First draft of boundary stroking #Patch Set 4 : Update to ToT #Patch Set 5 : Fix alpha, bevelling, add some debug code #Patch Set 6 : Update to ToT (much API churn. so rebase.) #Patch Set 7 : Update to ToT #Patch Set 8 : Apply fill type during contour extraction, not tessellation. Update to ToT. #Patch Set 9 : Update to ToT; separate AA & non-AA into separate functions #Patch Set 10 : Round points to nearest 1/16th pixel. #Patch Set 11 : Update to ToT #Patch Set 12 : Restrict tessAA to below distance field, <= 10 verbs #Patch Set 13 : Eliminate artifacts by simplifying boundary contours #Patch Set 14 : #Patch Set 15 : Many optimizations; update to ToT #Patch Set 16 : Update to ToT #Patch Set 17 : Only check for key in non-AA case (caching). #Patch Set 18 : Update to ToT, fix for intruding edge vertex artifact #Patch Set 19 : Fix shader bug; update to ToT #Patch Set 20 : Fix inverse fill types; revert changes to concavepaths GM #Patch Set 21 : Fix 100-col issues. #Patch Set 22 : MSVC warning fixes #Patch Set 23 : Add some missing "override"s. #Patch Set 24 : More MSVC fixes. #Patch Set 25 : Update to ToT #Patch Set 26 : Move AA handling up to contours_to_polys(); mesh_to_polys() now just does non-AA. #Patch Set 27 : Cleanup #Patch Set 28 : Refactor alpha computation on intersection and intrustion. #Patch Set 29 : Remove useless SkTMax template param (can be inferred). #Patch Set 30 : Add #ifdef protection for AA tessellator. #Patch Set 31 : Make stride part of the VertexAllocator. #
Total comments: 3
Patch Set 32 : Replace use of uint8_t* with void*. #Patch Set 33 : Fix 100-col issue. #Patch Set 34 : Reorder params to make more sense. Remove whitespace. #Patch Set 35 : Fix 100-col issue. #Patch Set 36 : Cleanup, and fix call to PathToTriangles(). #
Total comments: 11
Patch Set 37 : Cleanup, simplify getPath(), add comments. #
Total comments: 1
Patch Set 38 : Make GLPrograms test generate only simple fills. #
Messages
Total messages: 70 (57 generated)
Patchset #6 (id:100001) has been deleted
Description was changed from ========== First step towards alpha-ramp AA: boundary contour extraction. Also, refactor all vertex lists into a class of their own. BUG=skia: ========== to ========== First step towards alpha-ramp AA: boundary contour extraction. Also, refactor all vertex lists into a class of their own. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... ==========
Description was changed from ========== First step towards alpha-ramp AA: boundary contour extraction. Also, refactor all vertex lists into a class of their own. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... ========== to ========== Alpha-ramp antialias concave path rendering. This approach extracts boundary contours from the given path, then inflates by half a pixel in each direction, then renders the result with zero alpha on the outer contour and one alpha on in the inner contour. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... ==========
Description was changed from ========== Alpha-ramp antialias concave path rendering. This approach extracts boundary contours from the given path, then inflates by half a pixel in each direction, then renders the result with zero alpha on the outer contour and one alpha on in the inner contour. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... ========== to ========== Alpha-ramp antialiased concave path rendering. This approach extracts boundary contours from the given path, then inflates by half a pixel in each direction, then renders the result with zero alpha on the outer contour and one alpha on in the inner contour. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... ==========
Description was changed from ========== Alpha-ramp antialiased concave path rendering. This approach extracts boundary contours from the given path, then inflates by half a pixel in each direction, then renders the result with zero alpha on the outer contour and one alpha on in the inner contour. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... ========== to ========== Alpha-ramp AA concave path rendering. This is an approach to antialiased concave path rendering without using MSAA. It uses GrTessellator to extract boundary contours from the given path, then inflates by half a pixel in each direction, then renders the result with zero alpha on the outer contour and one alpha on in the inner contour. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... ==========
Description was changed from ========== Alpha-ramp AA concave path rendering. This is an approach to antialiased concave path rendering without using MSAA. It uses GrTessellator to extract boundary contours from the given path, then inflates by half a pixel in each direction, then renders the result with zero alpha on the outer contour and one alpha on in the inner contour. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... ========== to ========== Screenspace AA concave path rendering. This is an approach to antialiased concave path rendering without using MSAA. It uses GrTessellator to extract boundary contours from the given path, then inflates by half a pixel in screen space each direction, then renders the result with zero alpha on the outer contour and one alpha on in the inner contour. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... ==========
Description was changed from ========== Screenspace AA concave path rendering. This is an approach to antialiased concave path rendering without using MSAA. It uses GrTessellator to extract boundary contours from the given path, then inflates by half a pixel in screen space each direction, then renders the result with zero alpha on the outer contour and one alpha on in the inner contour. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... ========== to ========== Screenspace AA tessellated path rendering. This is an approach to antialiased concave path rendering without using MSAA. It uses GrTessellator to extract boundary contours from the given path, then inflates by half a pixel in screen space each direction, then renders the result with zero alpha on the outer contour and one alpha on in the inner contour. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... ==========
The CQ bit was checked by senorblanco@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: Try jobs failed on following builders: Build-Win-MSVC-x86_64-Release-Vulkan-Trybot on master.client.skia.compile (JOB_FAILED, http://build.chromium.org/p/client.skia.compile/builders/Build-Win-MSVC-x86_6...)
The CQ bit was checked by senorblanco@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was checked by senorblanco@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: This issue passed the CQ dry run.
The CQ bit was checked by senorblanco@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was checked by senorblanco@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: This issue passed the CQ dry run.
The CQ bit was checked by senorblanco@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: This issue passed the CQ dry run.
Description was changed from ========== Screenspace AA tessellated path rendering. This is an approach to antialiased concave path rendering without using MSAA. It uses GrTessellator to extract boundary contours from the given path, then inflates by half a pixel in screen space each direction, then renders the result with zero alpha on the outer contour and one alpha on in the inner contour. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... ========== to ========== Screenspace AA tessellated GPU path rendering. This is an approach to antialiased concave path rendering without using MSAA. It uses GrTessellator to extract boundary contours from the given path, then inflates by half a pixel in screen space each direction, then renders the result with zero alpha on the outer contour and one alpha on in the inner contour. This requires two passes through the tessellation code: one to extract the boundaries, then one to tessellate the result. This gives approximately a 3X improvement on the IE chalkboard demo in non-MSAA mode on Intel, a 30-40% improvement on MotionMark's "Fill Paths", and a ~3X improvement on MotionMark's "canvas arcTo segments". It works best for large, simple paths, so there's currently a limit of 10 verbs in the BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... ==========
senorblanco@chromium.org changed reviewers: + bsalomon@google.com
Description was changed from ========== Screenspace AA tessellated GPU path rendering. This is an approach to antialiased concave path rendering without using MSAA. It uses GrTessellator to extract boundary contours from the given path, then inflates by half a pixel in screen space each direction, then renders the result with zero alpha on the outer contour and one alpha on in the inner contour. This requires two passes through the tessellation code: one to extract the boundaries, then one to tessellate the result. This gives approximately a 3X improvement on the IE chalkboard demo in non-MSAA mode on Intel, a 30-40% improvement on MotionMark's "Fill Paths", and a ~3X improvement on MotionMark's "canvas arcTo segments". It works best for large, simple paths, so there's currently a limit of 10 verbs in the BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... ========== to ========== Screenspace AA tessellated GPU path rendering. This is an approach to antialiased concave path rendering on the GPU without using MSAA. It uses GrTessellator to extract boundary contours from the given path, then inflates by half a pixel in screen space each direction, then renders the result with zero alpha on the outer contour and one alpha on in the inner contour. This requires two passes through the tessellation code: one to extract the boundaries, then one to tessellate the result. This gives approximately a 3X improvement on the IE chalkboard demo in non-MSAA mode, a 30-40% improvement on MotionMark's "Fill Paths", and a ~3X improvement on MotionMark's "canvas arcTo segments". It works best for large, simple paths, so there's currently a limit of 10 verbs in the onCanDrawPath() check. This dovetails nicely with the distance field path renderer's support for small, detailed (and cached) paths. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... ==========
The CQ bit was checked by senorblanco@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
Brian: PTAL. Thanks! https://codereview.chromium.org/1152733009/diff/620001/src/gpu/GrDefaultGeoPr... File src/gpu/GrDefaultGeoProcFactory.h (right): https://codereview.chromium.org/1152733009/diff/620001/src/gpu/GrDefaultGeoPr... src/gpu/GrDefaultGeoProcFactory.h:38: float fCoverage; Note: I believe this is a bug, but went unnoticed since no one actually uses these types for assignment (until now). If so, it probably applies to the other fCoverage values as well, although I didn't change them.
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: This issue passed the CQ dry run.
The CQ bit was checked by senorblanco@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: This issue passed the CQ dry run.
https://codereview.chromium.org/1152733009/diff/620001/src/gpu/GrDefaultGeoPr... File src/gpu/GrDefaultGeoProcFactory.h (right): https://codereview.chromium.org/1152733009/diff/620001/src/gpu/GrDefaultGeoPr... src/gpu/GrDefaultGeoProcFactory.h:38: float fCoverage; On 2016/08/30 17:10:51, Stephen White wrote: > Note: I believe this is a bug, but went unnoticed since no one actually > uses these types for assignment (until now). If so, it probably applies > to the other fCoverage values as well, although I didn't change them. My read of the code is that the others should all be float as well. Let's go ahead and do that. https://codereview.chromium.org/1152733009/diff/710001/src/gpu/GrTessellator.cpp File src/gpu/GrTessellator.cpp (right): https://codereview.chromium.org/1152733009/diff/710001/src/gpu/GrTessellator.... src/gpu/GrTessellator.cpp:20: * There are six stages to the algorithm: Can you update this to document the AA steps? https://codereview.chromium.org/1152733009/diff/710001/src/gpu/GrTessellator.... src/gpu/GrTessellator.cpp:246: inline void round(SkPoint* p) { Is this rounding to 1/4 pixel values? https://codereview.chromium.org/1152733009/diff/710001/src/gpu/batches/GrTess... File src/gpu/batches/GrTessellatingPathRenderer.cpp (right): https://codereview.chromium.org/1152733009/diff/710001/src/gpu/batches/GrTess... src/gpu/batches/GrTessellatingPathRenderer.cpp:152: args.fShape->asPath(&path); If the path has a path effect or is stroked this only reflects the verb count of the original path. Perhaps we should check the that the style is simple fill first? https://codereview.chromium.org/1152733009/diff/710001/src/gpu/batches/GrTess... src/gpu/batches/GrTessellatingPathRenderer.cpp:160: return !args.fShape->style().applies() && args.fShape->style().isSimpleFill() && I realize that this is pre-existing (probably done by me) but the .applies() isn't needed given the check for .isSimpleFill(). https://codereview.chromium.org/1152733009/diff/710001/src/gpu/batches/GrTess... src/gpu/batches/GrTessellatingPathRenderer.cpp:196: SkPath path; I think this can be: fShape.applyStyle(GrStyle::Apply::kPathEffectAndStrokeRec, styleScale).asPath(&path); Or to maintain the assert: GrShape shape = fShape.applyStyle(GrStyle::Apply::kPathEffectAndStrokeRec, styleScale); SkASSERT(shape.style().isSimpleFill()); shape.asPath(&path);
https://codereview.chromium.org/1152733009/diff/620001/src/gpu/GrDefaultGeoPr... File src/gpu/GrDefaultGeoProcFactory.h (right): https://codereview.chromium.org/1152733009/diff/620001/src/gpu/GrDefaultGeoPr... src/gpu/GrDefaultGeoProcFactory.h:38: float fCoverage; On 2016/08/31 14:19:19, bsalomon wrote: > On 2016/08/30 17:10:51, Stephen White wrote: > > Note: I believe this is a bug, but went unnoticed since no one actually > > uses these types for assignment (until now). If so, it probably applies > > to the other fCoverage values as well, although I didn't change them. > > My read of the code is that the others should all be float as well. Let's go > ahead and do that. Done. https://codereview.chromium.org/1152733009/diff/710001/src/gpu/GrTessellator.cpp File src/gpu/GrTessellator.cpp (right): https://codereview.chromium.org/1152733009/diff/710001/src/gpu/GrTessellator.... src/gpu/GrTessellator.cpp:20: * There are six stages to the algorithm: On 2016/08/31 14:19:19, bsalomon wrote: > Can you update this to document the AA steps? Done. https://codereview.chromium.org/1152733009/diff/710001/src/gpu/GrTessellator.... src/gpu/GrTessellator.cpp:246: inline void round(SkPoint* p) { On 2016/08/31 14:19:19, bsalomon wrote: > Is this rounding to 1/4 pixel values? Yes; added a comment. https://codereview.chromium.org/1152733009/diff/710001/src/gpu/batches/GrTess... File src/gpu/batches/GrTessellatingPathRenderer.cpp (right): https://codereview.chromium.org/1152733009/diff/710001/src/gpu/batches/GrTess... src/gpu/batches/GrTessellatingPathRenderer.cpp:152: args.fShape->asPath(&path); On 2016/08/31 14:19:19, bsalomon wrote: > If the path has a path effect or is stroked this only reflects the verb count of > the original path. Perhaps we should check the that the style is simple fill > first? Good idea; done. https://codereview.chromium.org/1152733009/diff/710001/src/gpu/batches/GrTess... src/gpu/batches/GrTessellatingPathRenderer.cpp:160: return !args.fShape->style().applies() && args.fShape->style().isSimpleFill() && On 2016/08/31 14:19:19, bsalomon wrote: > I realize that this is pre-existing (probably done by me) but the .applies() > isn't needed given the check for .isSimpleFill(). Done. https://codereview.chromium.org/1152733009/diff/710001/src/gpu/batches/GrTess... src/gpu/batches/GrTessellatingPathRenderer.cpp:196: SkPath path; On 2016/08/31 14:19:19, bsalomon wrote: > I think this can be: > fShape.applyStyle(GrStyle::Apply::kPathEffectAndStrokeRec, > styleScale).asPath(&path); > > Or to maintain the assert: > GrShape shape = fShape.applyStyle(GrStyle::Apply::kPathEffectAndStrokeRec, > styleScale); > SkASSERT(shape.style().isSimpleFill()); > shape.asPath(&path); Actually, given that onCanDrawPath() checks that !args.fShape->style().applies(), I think this code can be removed. I've replaced it with an assert. I must admit I'm a little unclear on the difference between isSimpleFill() and !style().applies(). Is the former a superset of the latter?
The CQ bit was checked by senorblanco@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
lgtm https://codereview.chromium.org/1152733009/diff/710001/src/gpu/batches/GrTess... File src/gpu/batches/GrTessellatingPathRenderer.cpp (right): https://codereview.chromium.org/1152733009/diff/710001/src/gpu/batches/GrTess... src/gpu/batches/GrTessellatingPathRenderer.cpp:196: SkPath path; On 2016/08/31 15:16:38, Stephen White wrote: > On 2016/08/31 14:19:19, bsalomon wrote: > > I think this can be: > > fShape.applyStyle(GrStyle::Apply::kPathEffectAndStrokeRec, > > styleScale).asPath(&path); > > > > Or to maintain the assert: > > GrShape shape = fShape.applyStyle(GrStyle::Apply::kPathEffectAndStrokeRec, > > styleScale); > > SkASSERT(shape.style().isSimpleFill()); > > shape.asPath(&path); > > Actually, given that onCanDrawPath() checks that > !args.fShape->style().applies(), I think this code can be > removed. I've replaced it with an assert. > Agreed. > I must admit I'm a little unclear on the difference between > isSimpleFill() and !style().applies(). Is the former a superset > of the latter? !style().applies() will also be true for hairlines. https://codereview.chromium.org/1152733009/diff/730001/src/gpu/GrTessellator.cpp File src/gpu/GrTessellator.cpp (right): https://codereview.chromium.org/1152733009/diff/730001/src/gpu/GrTessellator.... src/gpu/GrTessellator.cpp:29: * For screenspace antialiasing, the algorithm is modified as follows: Thanks, this helps.
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: This issue passed the CQ dry run.
The CQ bit was checked by senorblanco@chromium.org
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
Message was sent while issue was closed.
Description was changed from ========== Screenspace AA tessellated GPU path rendering. This is an approach to antialiased concave path rendering on the GPU without using MSAA. It uses GrTessellator to extract boundary contours from the given path, then inflates by half a pixel in screen space each direction, then renders the result with zero alpha on the outer contour and one alpha on in the inner contour. This requires two passes through the tessellation code: one to extract the boundaries, then one to tessellate the result. This gives approximately a 3X improvement on the IE chalkboard demo in non-MSAA mode, a 30-40% improvement on MotionMark's "Fill Paths", and a ~3X improvement on MotionMark's "canvas arcTo segments". It works best for large, simple paths, so there's currently a limit of 10 verbs in the onCanDrawPath() check. This dovetails nicely with the distance field path renderer's support for small, detailed (and cached) paths. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... ========== to ========== Screenspace AA tessellated GPU path rendering. This is an approach to antialiased concave path rendering on the GPU without using MSAA. It uses GrTessellator to extract boundary contours from the given path, then inflates by half a pixel in screen space each direction, then renders the result with zero alpha on the outer contour and one alpha on in the inner contour. This requires two passes through the tessellation code: one to extract the boundaries, then one to tessellate the result. This gives approximately a 3X improvement on the IE chalkboard demo in non-MSAA mode, a 30-40% improvement on MotionMark's "Fill Paths", and a ~3X improvement on MotionMark's "canvas arcTo segments". It works best for large, simple paths, so there's currently a limit of 10 verbs in the onCanDrawPath() check. This dovetails nicely with the distance field path renderer's support for small, detailed (and cached) paths. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... Committed: https://skia.googlesource.com/skia/+/9992bdef8ae97b3e5b109d278ccfab84c66bcbf0 ==========
Message was sent while issue was closed.
Committed patchset #37 (id:730001) as https://skia.googlesource.com/skia/+/9992bdef8ae97b3e5b109d278ccfab84c66bcbf0
Message was sent while issue was closed.
A revert of this CL (patchset #37 id:730001) has been created in https://codereview.chromium.org/2299683002/ by senorblanco@chromium.org. The reason for reverting is: Causing asserts in GLPrograms test on Mac..
Message was sent while issue was closed.
Description was changed from ========== Screenspace AA tessellated GPU path rendering. This is an approach to antialiased concave path rendering on the GPU without using MSAA. It uses GrTessellator to extract boundary contours from the given path, then inflates by half a pixel in screen space each direction, then renders the result with zero alpha on the outer contour and one alpha on in the inner contour. This requires two passes through the tessellation code: one to extract the boundaries, then one to tessellate the result. This gives approximately a 3X improvement on the IE chalkboard demo in non-MSAA mode, a 30-40% improvement on MotionMark's "Fill Paths", and a ~3X improvement on MotionMark's "canvas arcTo segments". It works best for large, simple paths, so there's currently a limit of 10 verbs in the onCanDrawPath() check. This dovetails nicely with the distance field path renderer's support for small, detailed (and cached) paths. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... Committed: https://skia.googlesource.com/skia/+/9992bdef8ae97b3e5b109d278ccfab84c66bcbf0 ========== to ========== Screenspace AA tessellated GPU path rendering. This is an approach to antialiased concave path rendering on the GPU without using MSAA. It uses GrTessellator to extract boundary contours from the given path, then inflates by half a pixel in screen space each direction, then renders the result with zero alpha on the outer contour and one alpha on in the inner contour. This requires two passes through the tessellation code: one to extract the boundaries, then one to tessellate the result. This gives approximately a 3X improvement on the IE chalkboard demo in non-MSAA mode, a 30-40% improvement on MotionMark's "Fill Paths", and a ~3X improvement on MotionMark's "canvas arcTo segments". It works best for large, simple paths, so there's currently a limit of 10 verbs in the onCanDrawPath() check. This dovetails nicely with the distance field path renderer's support for small, detailed (and cached) paths. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... Committed: https://skia.googlesource.com/skia/+/9992bdef8ae97b3e5b109d278ccfab84c66bcbf0 ==========
The CQ bit was checked by senorblanco@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: Try jobs failed on following builders: Build-Ubuntu-GCC-Arm64-Debug-Android-Trybot on master.client.skia.compile (JOB_FAILED, http://build.chromium.org/p/client.skia.compile/builders/Build-Ubuntu-GCC-Arm...) Build-Ubuntu-GCC-Arm7-Debug-Android-Trybot on master.client.skia.compile (JOB_FAILED, http://build.chromium.org/p/client.skia.compile/builders/Build-Ubuntu-GCC-Arm...) Build-Ubuntu-GCC-Mips-Debug-Android-Trybot on master.client.skia.compile (JOB_FAILED, http://build.chromium.org/p/client.skia.compile/builders/Build-Ubuntu-GCC-Mip...)
The CQ bit was checked by senorblanco@chromium.org
The patchset sent to the CQ was uploaded after l-g-t-m from bsalomon@google.com Link to the patchset: https://codereview.chromium.org/1152733009/#ps750001 (title: "Make GLPrograms test generate only simple fills.")
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Try jobs failed on following builders: Build-Ubuntu-GCC-Arm64-Debug-Android-Trybot on master.client.skia.compile (JOB_FAILED, http://build.chromium.org/p/client.skia.compile/builders/Build-Ubuntu-GCC-Arm...) Build-Ubuntu-GCC-Arm7-Debug-Android-Trybot on master.client.skia.compile (JOB_FAILED, http://build.chromium.org/p/client.skia.compile/builders/Build-Ubuntu-GCC-Arm...) Build-Ubuntu-GCC-Mips-Debug-Android-Trybot on master.client.skia.compile (JOB_FAILED, http://build.chromium.org/p/client.skia.compile/builders/Build-Ubuntu-GCC-Mip...)
The CQ bit was checked by senorblanco@chromium.org
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Try jobs failed on following builders: Build-Ubuntu-GCC-Arm64-Debug-Android-Trybot on master.client.skia.compile (JOB_FAILED, http://build.chromium.org/p/client.skia.compile/builders/Build-Ubuntu-GCC-Arm...) Build-Ubuntu-GCC-Arm7-Debug-Android-Trybot on master.client.skia.compile (JOB_FAILED, http://build.chromium.org/p/client.skia.compile/builders/Build-Ubuntu-GCC-Arm...) Build-Ubuntu-GCC-Mips-Debug-Android-Trybot on master.client.skia.compile (JOB_FAILED, http://build.chromium.org/p/client.skia.compile/builders/Build-Ubuntu-GCC-Mip...)
Description was changed from ========== Screenspace AA tessellated GPU path rendering. This is an approach to antialiased concave path rendering on the GPU without using MSAA. It uses GrTessellator to extract boundary contours from the given path, then inflates by half a pixel in screen space each direction, then renders the result with zero alpha on the outer contour and one alpha on in the inner contour. This requires two passes through the tessellation code: one to extract the boundaries, then one to tessellate the result. This gives approximately a 3X improvement on the IE chalkboard demo in non-MSAA mode, a 30-40% improvement on MotionMark's "Fill Paths", and a ~3X improvement on MotionMark's "canvas arcTo segments". It works best for large, simple paths, so there's currently a limit of 10 verbs in the onCanDrawPath() check. This dovetails nicely with the distance field path renderer's support for small, detailed (and cached) paths. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... Committed: https://skia.googlesource.com/skia/+/9992bdef8ae97b3e5b109d278ccfab84c66bcbf0 ========== to ========== Screenspace AA tessellated GPU path rendering. This is an approach to antialiased concave path rendering on the GPU without using MSAA. It uses GrTessellator to extract boundary contours from the given path, then inflates by half a pixel in screen space each direction, then renders the result with zero alpha on the outer contour and one alpha on in the inner contour. This requires two passes through the tessellation code: one to extract the boundaries, then one to tessellate the result. This gives approximately a 3X improvement on the IE chalkboard demo in non-MSAA mode, a 30-40% improvement on MotionMark's "Fill Paths", and a ~3X improvement on MotionMark's "canvas arcTo segments". It works best for large, simple paths, so there's currently a limit of 10 verbs in the onCanDrawPath() check. This dovetails nicely with the distance field path renderer's support for small, detailed (and cached) paths. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... NOTRY=true ==========
The CQ bit was checked by senorblanco@chromium.org
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
Message was sent while issue was closed.
Description was changed from ========== Screenspace AA tessellated GPU path rendering. This is an approach to antialiased concave path rendering on the GPU without using MSAA. It uses GrTessellator to extract boundary contours from the given path, then inflates by half a pixel in screen space each direction, then renders the result with zero alpha on the outer contour and one alpha on in the inner contour. This requires two passes through the tessellation code: one to extract the boundaries, then one to tessellate the result. This gives approximately a 3X improvement on the IE chalkboard demo in non-MSAA mode, a 30-40% improvement on MotionMark's "Fill Paths", and a ~3X improvement on MotionMark's "canvas arcTo segments". It works best for large, simple paths, so there's currently a limit of 10 verbs in the onCanDrawPath() check. This dovetails nicely with the distance field path renderer's support for small, detailed (and cached) paths. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... NOTRY=true ========== to ========== Screenspace AA tessellated GPU path rendering. This is an approach to antialiased concave path rendering on the GPU without using MSAA. It uses GrTessellator to extract boundary contours from the given path, then inflates by half a pixel in screen space each direction, then renders the result with zero alpha on the outer contour and one alpha on in the inner contour. This requires two passes through the tessellation code: one to extract the boundaries, then one to tessellate the result. This gives approximately a 3X improvement on the IE chalkboard demo in non-MSAA mode, a 30-40% improvement on MotionMark's "Fill Paths", and a ~3X improvement on MotionMark's "canvas arcTo segments". It works best for large, simple paths, so there's currently a limit of 10 verbs in the onCanDrawPath() check. This dovetails nicely with the distance field path renderer's support for small, detailed (and cached) paths. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... NOTRY=true Committed: https://skia.googlesource.com/skia/+/f57372daf0562a187c24d427366ac6d0cb980c9b ==========
Message was sent while issue was closed.
Committed patchset #38 (id:750001) as https://skia.googlesource.com/skia/+/f57372daf0562a187c24d427366ac6d0cb980c9b |