New issue
Advanced search Search tips

Issue 796479 link

Starred by 2 users

Issue metadata

Status: Fixed
Owner:
Closed: Oct 5
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Windows
Pri: 2
Type: Bug



Sign in to add a comment

Strong blur on stepped linear SVG gradient

Reported by jan.boes...@incors.com, Dec 20 2017

Issue description

UserAgent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36

Example URL:
https://jsfiddle.net/vn6y78c1/

Steps to reproduce the problem:
Go to https://jsfiddle.net/vn6y78c1/ or open the attached SVG file. In the gradient definition the offset distance at the color changes is zero, which should result in well-defined steps.

What is the expected behavior?
The gradient should have well-defined steps

What went wrong?
The steps are very blurred.

Does it occur on multiple sites: Yes

Is it a problem with a plugin? No 

Did this work before? N/A 

Does this work in other browsers? Yes

Chrome version: 63.0.3239.84  Channel: n/a
OS Version: 6.1 (Windows 7, Windows Server 2008 R2)
Flash Version: 

The blurring also occurs in Firefox and Internet Explorer, but to a lesser degree.
 
gradient_blur.svg
1.0 KB Download
gradient_chrome.png
1.6 KB View Download
gradient_firefox.png
914 bytes View Download

Comment 1 by f...@opera.com, Dec 20 2017

Components: -Blink Internals>Skia Internals>GPU>Rasterization
Labels: Needs-Triage-M63

Comment 3 by ericrk@chromium.org, Dec 20 2017

Cc: hcm@chromium.org ericrk@chromium.org
Owner: bsalomon@chromium.org
Status: Assigned (was: Unconfirmed)
It looks like, on a sufficiently large gradient, we end up blurring between colors even when the gradient specifies hard stops. I feel like we've seen this before and it's just a limitation of our system, but if there's an easy way to do better it would be worth considering.
To me it looks like on large areas the gradient is prerendered on a smaller area and then scaled. It simply looks like Firefox and Internet Explorer use a larger area for prerendering and subsequently use a smaller scale factor.
Duplicate of 696603

Comment 6 Deleted

Owner: michaelludwig@google.com
Project Member

Comment 8 by bugdroid1@chromium.org, Sep 24

The following revision refers to this bug:
  https://skia.googlesource.com/skia/+/dcc85fc61008f61daef4313846bdd62877fd596d

commit dcc85fc61008f61daef4313846bdd62877fd596d
Author: Michael Ludwig <michaelludwig@google.com>
Date: Mon Sep 24 16:40:36 2018

Implement an explicit binary search-based analytic gradient colorizer

Provides a reasonably flexible fragment processor that defines another
colorizer implementation for gradients. It can support up to 8
interpolation intervals (which is 16 colors if every stop is a hard stop
or 9 colors if every stop is a smooth transition). It
supports mixtures of hard and smooth stops. It is conditionally compiled
into versions specific to the interval count (so it can produce up to
8 shader variants).

The GrGradientShader controller does not remove the single and dual
interval colorizers, which are useful specializations of this explicit
binary search colorizer. Similarly, since it can only handle up to 8
intervals, the texture colorizer is still used as a fallback.

Currently it does not employ capabilities detection to determine if the
hardware can support the number of required uniforms, which can become
substantial for the larger gradient configurations.

Bug:  chromium:796479 ,  chromium:729727 ,  chromium:696603 ,  chromium:543625 ,  chromium:414254 
Change-Id: Ia1f735a5019766ae4796cc22964b2913db34b95b
Reviewed-on: https://skia-review.googlesource.com/155080
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>

[add] https://crrev.com/dcc85fc61008f61daef4313846bdd62877fd596d/src/gpu/gradients/GrUnrolledBinaryGradientColorizer.fp
[modify] https://crrev.com/dcc85fc61008f61daef4313846bdd62877fd596d/src/gpu/GrProcessor.h
[modify] https://crrev.com/dcc85fc61008f61daef4313846bdd62877fd596d/gn/sksl.gni
[modify] https://crrev.com/dcc85fc61008f61daef4313846bdd62877fd596d/gn/gpu.gni
[add] https://crrev.com/dcc85fc61008f61daef4313846bdd62877fd596d/src/gpu/gradients/GrUnrolledBinaryGradientColorizer.cpp
[modify] https://crrev.com/dcc85fc61008f61daef4313846bdd62877fd596d/gn/gm.gni
[add] https://crrev.com/dcc85fc61008f61daef4313846bdd62877fd596d/src/gpu/gradients/GrUnrolledBinaryGradientColorizer.h
[add] https://crrev.com/dcc85fc61008f61daef4313846bdd62877fd596d/gm/analytic_gradients.cpp
[modify] https://crrev.com/dcc85fc61008f61daef4313846bdd62877fd596d/src/gpu/gradients/GrGradientShader.cpp

Project Member

Comment 9 by bugdroid1@chromium.org, Sep 24

The following revision refers to this bug:
  https://skia.googlesource.com/skia/+/9461dcf1306a9a9517e1545cf6d16bde05261280

commit 9461dcf1306a9a9517e1545cf6d16bde05261280
Author: Michael Ludwig <michaelludwig@google.com>
Date: Mon Sep 24 19:40:54 2018

Revert "Implement an explicit binary search-based analytic gradient colorizer"

This reverts commit dcc85fc61008f61daef4313846bdd62877fd596d.

Reason for revert: ANGLE is frequently corrupted, particularly radial_gradient4 and mixershader

Original change's description:
> Implement an explicit binary search-based analytic gradient colorizer
> 
> Provides a reasonably flexible fragment processor that defines another
> colorizer implementation for gradients. It can support up to 8
> interpolation intervals (which is 16 colors if every stop is a hard stop
> or 9 colors if every stop is a smooth transition). It
> supports mixtures of hard and smooth stops. It is conditionally compiled
> into versions specific to the interval count (so it can produce up to
> 8 shader variants).
> 
> The GrGradientShader controller does not remove the single and dual
> interval colorizers, which are useful specializations of this explicit
> binary search colorizer. Similarly, since it can only handle up to 8
> intervals, the texture colorizer is still used as a fallback.
> 
> Currently it does not employ capabilities detection to determine if the
> hardware can support the number of required uniforms, which can become
> substantial for the larger gradient configurations.
> 
> Bug:  chromium:796479 ,  chromium:729727 ,  chromium:696603 ,  chromium:543625 ,  chromium:414254 
> Change-Id: Ia1f735a5019766ae4796cc22964b2913db34b95b
> Reviewed-on: https://skia-review.googlesource.com/155080
> Commit-Queue: Michael Ludwig <michaelludwig@google.com>
> Reviewed-by: Brian Osman <brianosman@google.com>

TBR=bsalomon@google.com,brianosman@google.com,michaelludwig@google.com

Change-Id: I351a387f0528e4c2db2d47ab2e5d6b336991fb98
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug:  chromium:796479 ,  chromium:729727 ,  chromium:696603 ,  chromium:543625 ,  chromium:414254 
Reviewed-on: https://skia-review.googlesource.com/156541
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>

[delete] https://crrev.com/79039572478acdadfc15ad81b13bc76f54bf2cd1/src/gpu/gradients/GrUnrolledBinaryGradientColorizer.fp
[modify] https://crrev.com/9461dcf1306a9a9517e1545cf6d16bde05261280/src/gpu/GrProcessor.h
[modify] https://crrev.com/9461dcf1306a9a9517e1545cf6d16bde05261280/gn/sksl.gni
[modify] https://crrev.com/9461dcf1306a9a9517e1545cf6d16bde05261280/gn/gpu.gni
[delete] https://crrev.com/79039572478acdadfc15ad81b13bc76f54bf2cd1/src/gpu/gradients/GrUnrolledBinaryGradientColorizer.cpp
[modify] https://crrev.com/9461dcf1306a9a9517e1545cf6d16bde05261280/gn/gm.gni
[delete] https://crrev.com/79039572478acdadfc15ad81b13bc76f54bf2cd1/src/gpu/gradients/GrUnrolledBinaryGradientColorizer.h
[delete] https://crrev.com/79039572478acdadfc15ad81b13bc76f54bf2cd1/gm/analytic_gradients.cpp
[modify] https://crrev.com/9461dcf1306a9a9517e1545cf6d16bde05261280/src/gpu/gradients/GrGradientShader.cpp

Project Member

Comment 10 by bugdroid1@chromium.org, Sep 24

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/f477d2720e776e087f8b753419665a94a8ff65dd

commit f477d2720e776e087f8b753419665a94a8ff65dd
Author: chromium-autoroll <chromium-autoroll@skia-public.iam.gserviceaccount.com>
Date: Mon Sep 24 21:05:26 2018

Roll src/third_party/skia 4fb073ac7328..9461dcf1306a (7 commits)

https://skia.googlesource.com/skia.git/+log/4fb073ac7328..9461dcf1306a


git log 4fb073ac7328..9461dcf1306a --date=short --no-merges --format='%ad %ae %s'
2018-09-24 michaelludwig@google.com Revert "Implement an explicit binary search-based analytic gradient colorizer"
2018-09-24 fmalita@chromium.org [skottie] Initial property setters
2018-09-24 skia-autoroll@skia-public.iam.gserviceaccount.com Roll skia/third_party/skcms b9dc92669da2..82ea7fbce65f (1 commits)
2018-09-24 fmalita@chromium.org UBSAN: Divide-by-zero in SkRRect::setRectXY
2018-09-24 halcanary@google.com SkPDF: simplify SkPDFDevice::drawPaint.
2018-09-24 jvanverth@google.com Make sure ReflexHash grid count is reasonable
2018-09-24 michaelludwig@google.com Implement an explicit binary search-based analytic gradient colorizer


Created with:
  gclient setdep -r src/third_party/skia@9461dcf1306a

The AutoRoll server is located here: https://autoroll.skia.org/r/skia-autoroll

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+/master/autoroll/README.md

If the roll is causing failures, please contact the current sheriff, who should
be CC'd on the roll, and stop the roller if necessary.

CQ_INCLUDE_TRYBOTS=luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux-chromeos-compile-dbg;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel;master.tryserver.blink:linux_trusty_blink_rel

BUG= chromium:796479 , chromium:729727 , chromium:696603 , chromium:543625 , chromium:414254 , chromium:888233 , chromium:796479 , chromium:729727 , chromium:696603 , chromium:543625 , chromium:414254 
TBR=bsalomon@chromium.org

Change-Id: I5c06466571c0dbc74c36d61f4a9c7a6552f75eee
Reviewed-on: https://chromium-review.googlesource.com/1240836
Reviewed-by: chromium-autoroll <chromium-autoroll@skia-public.iam.gserviceaccount.com>
Commit-Queue: chromium-autoroll <chromium-autoroll@skia-public.iam.gserviceaccount.com>
Cr-Commit-Position: refs/heads/master@{#593675}
[modify] https://crrev.com/f477d2720e776e087f8b753419665a94a8ff65dd/DEPS

Project Member

Comment 11 by bugdroid1@chromium.org, Sep 27

The following revision refers to this bug:
  https://skia.googlesource.com/skia/+/f065907ccc0ae5e9258443b5a1bbabeef181e965

commit f065907ccc0ae5e9258443b5a1bbabeef181e965
Author: Michael Ludwig <michaelludwig@google.com>
Date: Thu Sep 27 16:02:30 2018

Reland "Implement an explicit binary search-based analytic gradient colorizer"

This reverts commit 9461dcf1306a9a9517e1545cf6d16bde05261280.

Reason for revert: Fixes for ANGLE's incorrect shader behavior

Original change's description:
> Revert "Implement an explicit binary search-based analytic gradient colorizer"
>
> This reverts commit dcc85fc61008f61daef4313846bdd62877fd596d.
>
> Reason for revert: ANGLE is frequently corrupted, particularly radial_gradient4 and mixershader
>
> Original change's description:
> > Implement an explicit binary search-based analytic gradient colorizer
> >
> > Provides a reasonably flexible fragment processor that defines another
> > colorizer implementation for gradients. It can support up to 8
> > interpolation intervals (which is 16 colors if every stop is a hard stop
> > or 9 colors if every stop is a smooth transition). It
> > supports mixtures of hard and smooth stops. It is conditionally compiled
> > into versions specific to the interval count (so it can produce up to
> > 8 shader variants).
> >
> > The GrGradientShader controller does not remove the single and dual
> > interval colorizers, which are useful specializations of this explicit
> > binary search colorizer. Similarly, since it can only handle up to 8
> > intervals, the texture colorizer is still used as a fallback.
> >
> > Currently it does not employ capabilities detection to determine if the
> > hardware can support the number of required uniforms, which can become
> > substantial for the larger gradient configurations.
> >
> > Bug:  chromium:796479 ,  chromium:729727 ,  chromium:696603 ,  chromium:543625 ,  chromium:414254 
> > Change-Id: Ia1f735a5019766ae4796cc22964b2913db34b95b
> > Reviewed-on: https://skia-review.googlesource.com/155080
> > Commit-Queue: Michael Ludwig <michaelludwig@google.com>
> > Reviewed-by: Brian Osman <brianosman@google.com>
>
> TBR=bsalomon@google.com,brianosman@google.com,michaelludwig@google.com
>
> Change-Id: I351a387f0528e4c2db2d47ab2e5d6b336991fb98
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug:  chromium:796479 ,  chromium:729727 ,  chromium:696603 ,  chromium:543625 ,  chromium:414254 
> Reviewed-on: https://skia-review.googlesource.com/156541
> Reviewed-by: Michael Ludwig <michaelludwig@google.com>
> Commit-Queue: Michael Ludwig <michaelludwig@google.com>

TBR=bsalomon@google.com,brianosman@google.com,michaelludwig@google.com

Change-Id: I2aca36307d88c26905d860ec29417ec68c6037cc
Bug:  chromium:796479 ,  chromium:729727 ,  chromium:696603 ,  chromium:543625 ,  chromium:414254 
Reviewed-on: https://skia-review.googlesource.com/156542
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>

[add] https://crrev.com/f065907ccc0ae5e9258443b5a1bbabeef181e965/src/gpu/gradients/GrUnrolledBinaryGradientColorizer.fp
[modify] https://crrev.com/f065907ccc0ae5e9258443b5a1bbabeef181e965/src/gpu/GrProcessor.h
[modify] https://crrev.com/f065907ccc0ae5e9258443b5a1bbabeef181e965/gn/sksl.gni
[modify] https://crrev.com/f065907ccc0ae5e9258443b5a1bbabeef181e965/gn/gpu.gni
[add] https://crrev.com/f065907ccc0ae5e9258443b5a1bbabeef181e965/src/gpu/gradients/GrUnrolledBinaryGradientColorizer.cpp
[modify] https://crrev.com/f065907ccc0ae5e9258443b5a1bbabeef181e965/gn/gm.gni
[add] https://crrev.com/f065907ccc0ae5e9258443b5a1bbabeef181e965/src/gpu/gradients/GrUnrolledBinaryGradientColorizer.h
[add] https://crrev.com/f065907ccc0ae5e9258443b5a1bbabeef181e965/gm/analytic_gradients.cpp
[modify] https://crrev.com/f065907ccc0ae5e9258443b5a1bbabeef181e965/src/gpu/gradients/GrGradientShader.cpp

Project Member

Comment 12 by bugdroid1@chromium.org, Sep 27

The following revision refers to this bug:
  https://skia.googlesource.com/skia/+/e2a801ddaafbd7514238b2e94fde71abba32400f

commit e2a801ddaafbd7514238b2e94fde71abba32400f
Author: Brian Osman <brianosman@google.com>
Date: Thu Sep 27 16:50:52 2018

Revert "Reland "Implement an explicit binary search-based analytic gradient colorizer""

This reverts commit f065907ccc0ae5e9258443b5a1bbabeef181e965.

Reason for revert: Processor test failing (inconsistently) on several bots.

Original change's description:
> Reland "Implement an explicit binary search-based analytic gradient colorizer"
> 
> This reverts commit 9461dcf1306a9a9517e1545cf6d16bde05261280.
> 
> Reason for revert: Fixes for ANGLE's incorrect shader behavior
> 
> Original change's description:
> > Revert "Implement an explicit binary search-based analytic gradient colorizer"
> >
> > This reverts commit dcc85fc61008f61daef4313846bdd62877fd596d.
> >
> > Reason for revert: ANGLE is frequently corrupted, particularly radial_gradient4 and mixershader
> >
> > Original change's description:
> > > Implement an explicit binary search-based analytic gradient colorizer
> > >
> > > Provides a reasonably flexible fragment processor that defines another
> > > colorizer implementation for gradients. It can support up to 8
> > > interpolation intervals (which is 16 colors if every stop is a hard stop
> > > or 9 colors if every stop is a smooth transition). It
> > > supports mixtures of hard and smooth stops. It is conditionally compiled
> > > into versions specific to the interval count (so it can produce up to
> > > 8 shader variants).
> > >
> > > The GrGradientShader controller does not remove the single and dual
> > > interval colorizers, which are useful specializations of this explicit
> > > binary search colorizer. Similarly, since it can only handle up to 8
> > > intervals, the texture colorizer is still used as a fallback.
> > >
> > > Currently it does not employ capabilities detection to determine if the
> > > hardware can support the number of required uniforms, which can become
> > > substantial for the larger gradient configurations.
> > >
> > > Bug:  chromium:796479 ,  chromium:729727 ,  chromium:696603 ,  chromium:543625 ,  chromium:414254 
> > > Change-Id: Ia1f735a5019766ae4796cc22964b2913db34b95b
> > > Reviewed-on: https://skia-review.googlesource.com/155080
> > > Commit-Queue: Michael Ludwig <michaelludwig@google.com>
> > > Reviewed-by: Brian Osman <brianosman@google.com>
> >
> > TBR=bsalomon@google.com,brianosman@google.com,michaelludwig@google.com
> >
> > Change-Id: I351a387f0528e4c2db2d47ab2e5d6b336991fb98
> > No-Presubmit: true
> > No-Tree-Checks: true
> > No-Try: true
> > Bug:  chromium:796479 ,  chromium:729727 ,  chromium:696603 ,  chromium:543625 ,  chromium:414254 
> > Reviewed-on: https://skia-review.googlesource.com/156541
> > Reviewed-by: Michael Ludwig <michaelludwig@google.com>
> > Commit-Queue: Michael Ludwig <michaelludwig@google.com>
> 
> TBR=bsalomon@google.com,brianosman@google.com,michaelludwig@google.com
> 
> Change-Id: I2aca36307d88c26905d860ec29417ec68c6037cc
> Bug:  chromium:796479 ,  chromium:729727 ,  chromium:696603 ,  chromium:543625 ,  chromium:414254 
> Reviewed-on: https://skia-review.googlesource.com/156542
> Reviewed-by: Michael Ludwig <michaelludwig@google.com>
> Commit-Queue: Michael Ludwig <michaelludwig@google.com>

TBR=bsalomon@google.com,brianosman@google.com,michaelludwig@google.com

Change-Id: Icd925d568d8cdffdc3020c07a9c50a4aa9cf0bb9
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug:  chromium:796479 ,  chromium:729727 ,  chromium:696603 ,  chromium:543625 ,  chromium:414254 
Reviewed-on: https://skia-review.googlesource.com/157429
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>

[delete] https://crrev.com/ab3144c3abb94a7f7b3e3903485510e66ec1227c/src/gpu/gradients/GrUnrolledBinaryGradientColorizer.fp
[modify] https://crrev.com/e2a801ddaafbd7514238b2e94fde71abba32400f/src/gpu/GrProcessor.h
[modify] https://crrev.com/e2a801ddaafbd7514238b2e94fde71abba32400f/gn/sksl.gni
[modify] https://crrev.com/e2a801ddaafbd7514238b2e94fde71abba32400f/gn/gpu.gni
[delete] https://crrev.com/ab3144c3abb94a7f7b3e3903485510e66ec1227c/src/gpu/gradients/GrUnrolledBinaryGradientColorizer.cpp
[modify] https://crrev.com/e2a801ddaafbd7514238b2e94fde71abba32400f/gn/gm.gni
[delete] https://crrev.com/ab3144c3abb94a7f7b3e3903485510e66ec1227c/src/gpu/gradients/GrUnrolledBinaryGradientColorizer.h
[delete] https://crrev.com/ab3144c3abb94a7f7b3e3903485510e66ec1227c/gm/analytic_gradients.cpp
[modify] https://crrev.com/e2a801ddaafbd7514238b2e94fde71abba32400f/src/gpu/gradients/GrGradientShader.cpp

Project Member

Comment 13 by bugdroid1@chromium.org, Sep 27

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/f23e191c5d68e045537d20553dc481773156b377

commit f23e191c5d68e045537d20553dc481773156b377
Author: chromium-autoroll <chromium-autoroll@skia-public.iam.gserviceaccount.com>
Date: Thu Sep 27 19:49:13 2018

Roll src/third_party/skia 227d4e10276c..dbdd151b1cb9 (15 commits)

https://skia.googlesource.com/skia.git/+log/227d4e10276c..dbdd151b1cb9


git log 227d4e10276c..dbdd151b1cb9 --date=short --no-merges --format='%ad %ae %s'
2018-09-27 benjaminwagner@google.com Revert "bump NDK packages to r18"
2018-09-27 skia-autoroll@skia-public.iam.gserviceaccount.com Roll third_party/externals/swiftshader 4241ad731a8a..40a6005e7a14 (3 commits)
2018-09-27 brianosman@google.com Remove redundant SkImage virtuals
2018-09-27 brianosman@google.com Revert "Reland "Implement an explicit binary search-based analytic gradient colorizer""
2018-09-27 bsalomon@google.com Revert "Change how GrTextureOp computes outset vertices."
2018-09-27 mtklein@google.com only build stats bar chart when it'll be printed
2018-09-27 fmalita@chromium.org [skottie] External font loader tweaks
2018-09-27 michaelludwig@google.com Reland "Implement an explicit binary search-based analytic gradient colorizer"
2018-09-27 mtklein@google.com bump NDK packages to r18
2018-09-27 mtklein@google.com add test that setLastPt() invalidates path bounds
2018-09-27 skia-autoroll@skia-public.iam.gserviceaccount.com Roll third_party/externals/angle2 115e8a2625f5..122919bddd98 (1 commits)
2018-09-27 mtklein@google.com invalidate pathref bounds when we attach an editor
2018-09-27 mtklein@google.com update SkPathRef bounds validation
2018-09-27 ethannicholas@google.com fixed SPIR-V interface variable declarations
2018-09-27 bsalomon@google.com Change how GrTextureOp computes outset vertices.


Created with:
  gclient setdep -r src/third_party/skia@dbdd151b1cb9

The AutoRoll server is located here: https://autoroll.skia.org/r/skia-autoroll

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+/master/autoroll/README.md

If the roll is causing failures, please contact the current sheriff, who should
be CC'd on the roll, and stop the roller if necessary.

CQ_INCLUDE_TRYBOTS=luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux-chromeos-compile-dbg;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel;master.tryserver.blink:linux_trusty_blink_rel

BUG= chromium:796479 , chromium:729727 , chromium:696603 , chromium:543625 , chromium:414254 , chromium:796479 , chromium:729727 , chromium:696603 , chromium:543625 , chromium:414254 
TBR=bsalomon@chromium.org

Change-Id: I01c18efde9921a36f3185d80d3950f46ff3e73ce
Reviewed-on: https://chromium-review.googlesource.com/1249507
Reviewed-by: chromium-autoroll <chromium-autoroll@skia-public.iam.gserviceaccount.com>
Commit-Queue: chromium-autoroll <chromium-autoroll@skia-public.iam.gserviceaccount.com>
Cr-Commit-Position: refs/heads/master@{#594821}
[modify] https://crrev.com/f23e191c5d68e045537d20553dc481773156b377/DEPS

Project Member

Comment 14 by bugdroid1@chromium.org, Oct 4

The following revision refers to this bug:
  https://skia.googlesource.com/skia/+/72535fb55a3c7b439530efb48a2b1f55d671530e

commit 72535fb55a3c7b439530efb48a2b1f55d671530e
Author: Michael Ludwig <michaelludwig@google.com>
Date: Thu Oct 04 13:10:29 2018

Reland "Reland "Implement an explicit binary search-based analytic gradient colorizer""

This is a reland of f065907ccc0ae5e9258443b5a1bbabeef181e965

3rd time's the charm:

The new analytic gradient shader was sporadically triggering violations of the coverage as alpha
compatibility optimization. Unfortunately, even when using the same device and random seed for the
test, the bots did not always reproduce the error. However, we identified the likely cause of the
violation.

The test requires that all output channels are less than the input alpha, which it uses to validate
whether or not the shader is modulating its values by the input alpha. This test does not pass if
the RGB values are greater than 1. The original version of the analytic gradient shader used half4s
for its scale and bias values. Given the threshold limit for hardstops of 0.00024 (SkNearlyZero),
a very small interval that is not treated as a hardstop can create a scale or bias of over 4000.
This moves into the very imprecise region of 16-bit floats, making it plausible that the gradient
outputs colors greater than 1, due to rounding. The kicker is that the random test generation for
stop locations does not use a uniform distribution, but is instead biased towards the remaining
interval, which increases the likelihood of generating a small interval that is not treated as a
hard stop. We are keeping this behavior since ill-conditioned gradients are useful in testing.

Original change's description:
> Reland "Implement an explicit binary search-based analytic gradient colorizer"
>
> This reverts commit 9461dcf1306a9a9517e1545cf6d16bde05261280.
>
> Reason for revert: Fixes for ANGLE's incorrect shader behavior
>
> Original change's description:
> > Revert "Implement an explicit binary search-based analytic gradient colorizer"
> >
> > This reverts commit dcc85fc61008f61daef4313846bdd62877fd596d.
> >
> > Reason for revert: ANGLE is frequently corrupted, particularly radial_gradient4 and mixershader
> >
> > Original change's description:
> > > Implement an explicit binary search-based analytic gradient colorizer
> > >
> > > Provides a reasonably flexible fragment processor that defines another
> > > colorizer implementation for gradients. It can support up to 8
> > > interpolation intervals (which is 16 colors if every stop is a hard stop
> > > or 9 colors if every stop is a smooth transition). It
> > > supports mixtures of hard and smooth stops. It is conditionally compiled
> > > into versions specific to the interval count (so it can produce up to
> > > 8 shader variants).
> > >
> > > The GrGradientShader controller does not remove the single and dual
> > > interval colorizers, which are useful specializations of this explicit
> > > binary search colorizer. Similarly, since it can only handle up to 8
> > > intervals, the texture colorizer is still used as a fallback.
> > >
> > > Currently it does not employ capabilities detection to determine if the
> > > hardware can support the number of required uniforms, which can become
> > > substantial for the larger gradient configurations.
> > >
> > > Bug:  chromium:796479 ,  chromium:729727 ,  chromium:696603 ,  chromium:543625 ,  chromium:414254 
> > > Change-Id: Ia1f735a5019766ae4796cc22964b2913db34b95b
> > > Reviewed-on: https://skia-review.googlesource.com/155080
> > > Commit-Queue: Michael Ludwig <michaelludwig@google.com>
> > > Reviewed-by: Brian Osman <brianosman@google.com>
> >
> > TBR=bsalomon@google.com,brianosman@google.com,michaelludwig@google.com
> >
> > Change-Id: I351a387f0528e4c2db2d47ab2e5d6b336991fb98
> > No-Presubmit: true
> > No-Tree-Checks: true
> > No-Try: true
> > Bug:  chromium:796479 ,  chromium:729727 ,  chromium:696603 ,  chromium:543625 ,  chromium:414254 
> > Reviewed-on: https://skia-review.googlesource.com/156541
> > Reviewed-by: Michael Ludwig <michaelludwig@google.com>
> > Commit-Queue: Michael Ludwig <michaelludwig@google.com>
>
> TBR=bsalomon@google.com,brianosman@google.com,michaelludwig@google.com
>
> Change-Id: I2aca36307d88c26905d860ec29417ec68c6037cc
> Bug:  chromium:796479 ,  chromium:729727 ,  chromium:696603 ,  chromium:543625 ,  chromium:414254 
> Reviewed-on: https://skia-review.googlesource.com/156542
> Reviewed-by: Michael Ludwig <michaelludwig@google.com>
> Commit-Queue: Michael Ludwig <michaelludwig@google.com>

Bug:  chromium:796479 ,  chromium:729727 ,  chromium:696603 ,  chromium:543625 ,  chromium:414254 
Change-Id: I2d050624781c77cdd160291cadbadac602b48bde
Reviewed-on: https://skia-review.googlesource.com/c/157569
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>

[add] https://crrev.com/72535fb55a3c7b439530efb48a2b1f55d671530e/src/gpu/gradients/GrUnrolledBinaryGradientColorizer.fp
[modify] https://crrev.com/72535fb55a3c7b439530efb48a2b1f55d671530e/src/gpu/GrProcessor.h
[modify] https://crrev.com/72535fb55a3c7b439530efb48a2b1f55d671530e/gn/sksl.gni
[modify] https://crrev.com/72535fb55a3c7b439530efb48a2b1f55d671530e/gn/gpu.gni
[add] https://crrev.com/72535fb55a3c7b439530efb48a2b1f55d671530e/src/gpu/gradients/GrUnrolledBinaryGradientColorizer.cpp
[modify] https://crrev.com/72535fb55a3c7b439530efb48a2b1f55d671530e/src/gpu/gradients/GrDualIntervalGradientColorizer.fp
[modify] https://crrev.com/72535fb55a3c7b439530efb48a2b1f55d671530e/gn/gm.gni
[modify] https://crrev.com/72535fb55a3c7b439530efb48a2b1f55d671530e/src/gpu/gradients/GrDualIntervalGradientColorizer.cpp
[add] https://crrev.com/72535fb55a3c7b439530efb48a2b1f55d671530e/src/gpu/gradients/GrUnrolledBinaryGradientColorizer.h
[add] https://crrev.com/72535fb55a3c7b439530efb48a2b1f55d671530e/gm/analytic_gradients.cpp
[modify] https://crrev.com/72535fb55a3c7b439530efb48a2b1f55d671530e/src/gpu/gradients/GrGradientShader.cpp

Project Member

Comment 15 by bugdroid1@chromium.org, Oct 4

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/19008d6a5ad834b003979cdedb7bbe22eabc6ae3

commit 19008d6a5ad834b003979cdedb7bbe22eabc6ae3
Author: chromium-autoroll <chromium-autoroll@skia-public.iam.gserviceaccount.com>
Date: Thu Oct 04 19:43:04 2018

Roll src/third_party/skia 4dd17156c6e4..58887bc3c186 (13 commits)

https://skia.googlesource.com/skia.git/+log/4dd17156c6e4..58887bc3c186


git log 4dd17156c6e4..58887bc3c186 --date=short --no-merges --format='%ad %ae %s'
2018-10-04 mtklein@google.com hash tf, and whole colorspace
2018-10-04 mtklein@google.com remove deprecated SkBitmap::eraseRGB()
2018-10-04 robertphillips@google.com Update YUV GM
2018-10-04 mtklein@google.com remove deprecated SkWriter32::size()
2018-10-04 mtklein@google.com remove deprecated SkMatrix44::map() 2x
2018-10-04 brianosman@google.com Add SkPMColor4f support to SkSL
2018-10-04 csmartdalton@google.com ccpr: Unblacklist Sandy Bridge/Bay Trail on Mesa
2018-10-04 robertphillips@google.com Make SkYUVAIndex publicly accessible
2018-10-04 mtklein@google.com re-precate SkMatrix44::SkMatrix44()
2018-10-04 mtklein@google.com remove internal uses of SkColorSpace::toXYZD50()
2018-10-04 michaelludwig@google.com Reland "Reland "Implement an explicit binary search-based analytic gradient colorizer""
2018-10-04 skia-recreate-skps@skia-swarming-bots.iam.gserviceaccount.com Update go_deps asset
2018-10-04 skia-autoroll@skia-public.iam.gserviceaccount.com Roll third_party/externals/angle2 1395134c3438..5541a6c86a64 (1 commits)


Created with:
  gclient setdep -r src/third_party/skia@58887bc3c186

The AutoRoll server is located here: https://autoroll.skia.org/r/skia-autoroll

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+/master/autoroll/README.md

If the roll is causing failures, please contact the current sheriff, who should
be CC'd on the roll, and stop the roller if necessary.

CQ_INCLUDE_TRYBOTS=luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux-chromeos-compile-dbg;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel;master.tryserver.blink:linux_trusty_blink_rel

BUG= chromium:796479 , chromium:729727 , chromium:696603 , chromium:543625 , chromium:414254 
TBR=mtklein@chromium.org

Change-Id: I77e2cfd446c6d9aca68e8feb942ef8a4815f0564
Reviewed-on: https://chromium-review.googlesource.com/c/1261925
Reviewed-by: chromium-autoroll <chromium-autoroll@skia-public.iam.gserviceaccount.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Cr-Commit-Position: refs/heads/master@{#596810}
[modify] https://crrev.com/19008d6a5ad834b003979cdedb7bbe22eabc6ae3/DEPS

Status: Fixed (was: Assigned)
The examples provided will now render correctly; closing this issue in favor of an umbrella that describes the limitations of the new gradient rendering: issue 892711.

Sign in to add a comment