The new pattern is:
we will "instantiate" pipelines at flush time
at flush time we will only access the backing GrSurface by peeking
If instantiation fails we should never try to access the GrSurfaces
Change-Id: I87f7ff41bd0e84d9ca3dbdd61d3361d3d4ceefd6
Reviewed-on: https://skia-review.googlesource.com/17932
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
This ensures the compiler knows they are SkColors and not "int" which
can't be implicitly casted when you end up with a reference to it.
Bug: skia: 6696
Change-Id: Ieb6a2270d7d01df279d55e0bad7a793a8edd8658
Reviewed-on: https://skia-review.googlesource.com/18081
Commit-Queue: danakj chromium <danakj@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>
To prevent external clients from subclassing.
Change-Id: I60a3833bf64019aea2f537850ca2a1ae38bb8767
Reviewed-on: https://skia-review.googlesource.com/18038
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
This fixes the None/Low bitmap filtering in gamut GM.
BUG=skia:6679
Change-Id: Ic6e0efa6a23b537aea69b4beb24f3c8b8c6ca347
Reviewed-on: https://skia-review.googlesource.com/17923
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Brian Osman <brianosman@google.com>
Bug: skia:6627
Change-Id: Ib92b62bf1191170a46e63f61fa9502ca2f9ee771
Reviewed-on: https://skia-review.googlesource.com/18072
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Brian Osman <brianosman@google.com>
Bug: skia:6627
Change-Id: I80142f5288e1c6f59f6add3a5a71ab90da90d3cc
Reviewed-on: https://skia-review.googlesource.com/18069
Reviewed-by: Brian Osman <brianosman@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Brian Osman <brianosman@google.com>
We also preserve the check in debug mode that the
count should never be 1 when the path is convex.
Bug: skia:6684
Change-Id: I4d4c9ad9f9d704e94bbe51f10a96f8b3066afaa1
Reviewed-on: https://skia-review.googlesource.com/17983
Commit-Queue: Yuqian Li <liyuqian@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Change ARM implementation of alpha blending to work on 8 pixels at a
time (using NEON). Also improve the accuracy of alpha blending by using
a formula based on SkMulDiv255Round rather than SkPMSrcOver.
Note that a number of variations of this code were considered. Here are
some notes:
- A 16 pixels at a time version was considered. This performs well for
the case of extreme alpha (all-opaque or all-transparent pixels), but
performs worst than the 8 pixels version when there are frequent
transitions of alpha. Also gcc 6.2.1 seems to have troubles with
register pressure when using this version.
- If the branch to detect the fully-opaque or fully-transparent cases
is removed, then the performance increases significantly for images
which are all partially transparent (especially on ARM Cortex A72),
but can significantly decrease for images that are almost fully
opaque or fully transparent.
This implementation is a compromise to the effects described above.
This patch produces a ~10% improvement on the nanobench's sub-scores
repeatTile_BGRA_8888_A, constXTile_MM_filter_trans, constXTile_CC_trans,
constXTile_RR_filter_trans when running on ARM Cortex A72. Improvements
of greater magnitude (20% to 30%) are observed when running on ARM
Cortex A53.
CQ_INCLUDE_TRYBOTS=skia.primary:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD
Change-Id: I1f0c9f549057613bbffd26e6651f3beeb0019af9
Bug: skia:
Reviewed-on: https://skia-review.googlesource.com/16520
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
1) Prior to SkVertices, drawing with local coords but no shader triggered
wireframe mode (as if no local coords were supplied, and assuming no
colors). I find the wireframe thing to be strange, but restore that
behavior to match CPU backend.
2) More importantly: If we *do* fall into the wireframe mode, make sure to
not *also* draw in non-wireframe. Yesterday's bugfix to paint
conversion caused those kinds of draws to draw wireframe, then draw in
fill mode on top.
Bug: skia:
Change-Id: Ie579b54480b4488a09c207fecbbe3badbddc5d68
Reviewed-on: https://skia-review.googlesource.com/18032
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Brian Osman <brianosman@google.com>
All dead code now.
Change-Id: I3d88103fef90d9e2ceee8b13db143ac9704689f5
Reviewed-on: https://skia-review.googlesource.com/18034
Reviewed-by: Herb Derby <herb@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
This reverts commit 04d22c0483.
Reason for revert: Seems likely that this is failing Android roll.
Original change's description:
> Remove (now-dead) SK_LEGACY_SWEEP_GRADIENT code
>
> Behold the first raster pipeline-only gradient!
>
> Change-Id: Ib6f53224e4ff9506aafdae1d2303102fc5235dfc
> Reviewed-on: https://skia-review.googlesource.com/17982
> Commit-Queue: Mike Klein <mtklein@chromium.org>
> Reviewed-by: Mike Klein <mtklein@chromium.org>
>
TBR=mtklein@chromium.org,mtklein@google.com,herb@google.com,fmalita@chromium.org,reed@google.com
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Change-Id: I69b8a46ec4879202b72c23979a21065c1ffbd093
Reviewed-on: https://skia-review.googlesource.com/18023
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Allow overriding the primitive type at draw time, so everyone can
funnel through the same code path. Simplifies the color array type
logic, and saves one memcpy (of indices) in the drawWireframe case.
Bug: skia:
Change-Id: I46653d34169842b9b5304cff48d804b2a9ace529
Reviewed-on: https://skia-review.googlesource.com/17783
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
+ only dither if the paint asks for it
- don't special case if the shader is a gradient
guard: SK_SUPPORT_LEGACY_RASTERPIPELINE
Bug: skia:
Change-Id: I7f0c101049e5cb32a80306dcfff3bc21bcf318be
Reviewed-on: https://skia-review.googlesource.com/17931
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Reviewed-by: Florin Malita <fmalita@chromium.org>
Tests were previously dependent on the fact that drawBitmap calls were
using the legacy sprite blitters. Now these tests are blocking the
change that fixes drawBitmap behavior.
https://skia-review.googlesource.com/c/17923/
Bug: skia:
Change-Id: Ia9e5244243f18680d7593b0fa9de942dbbeeeb1d
Reviewed-on: https://skia-review.googlesource.com/18027
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Matt Sarett <msarett@google.com>
Beyond setting the total cache limits this method enables clients to
request to purge a specific number of bytes, as well as specify their
preference to purge scratch resources over resources of other types.
Change-Id: I9259d5544d34251575d77eebe599388f213ff3ce
Reviewed-on: https://skia-review.googlesource.com/17987
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Derek Sollenberger <djsollen@google.com>
BUG=skia:6694
NOTREECHECKS=true
Change-Id: Ic7eeda7086e51a259f961351fec5a06d1f8fa6ec
Reviewed-on: https://skia-review.googlesource.com/18028
Commit-Queue: Ravi Mistry <rmistry@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Reviewed-by: Matt Sarett <msarett@google.com>
Ought to fix Chrome roll:
warning C4275: non dll-interface class 'SkShaderBase' used as base for
dll-interface class 'SkEmptyShader'
etc. May fix Android too?
Change-Id: Ic8ff988b9000c484aa54959e49a1ff17e5635340
Reviewed-on: https://skia-review.googlesource.com/18025
Reviewed-by: Florin Malita <fmalita@chromium.org>
This reverts commit 3fdd0bf2d9.
Reason for revert: Chrome roll dryrun?
Original change's description:
> Update clearOp for split-OpList world (take 2)
>
> It would reduce a lot of noise if the GrRenderTargetOpList kept a pointer to the GrCaps but, for now, I'm trying to shrink the GrRTOpList, not expand it.
>
> Reland of: https://skia-review.googlesource.com/c/17323/ (Update clearOp for split-OpList world)
>
> Change-Id: I97f3fb81e6258d430e7f7cf1ea8bd51a392f9f47
> Reviewed-on: https://skia-review.googlesource.com/17830
> Reviewed-by: Brian Salomon <bsalomon@google.com>
> Commit-Queue: Robert Phillips <robertphillips@google.com>
>
TBR=bsalomon@google.com,robertphillips@google.com
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Change-Id: Ib70285bb484a1ed8babaa519c74bfdf619313806
Reviewed-on: https://skia-review.googlesource.com/18024
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
This reverts commit 04d22c0483.
Reason for revert: Android roll?
junit.framework.AssertionFailedError: res/drawable/vector_icon_gradient_1.xml: totalDiffPixelCount is 123
Original change's description:
> Remove (now-dead) SK_LEGACY_SWEEP_GRADIENT code
>
> Behold the first raster pipeline-only gradient!
>
> Change-Id: Ib6f53224e4ff9506aafdae1d2303102fc5235dfc
> Reviewed-on: https://skia-review.googlesource.com/17982
> Commit-Queue: Mike Klein <mtklein@chromium.org>
> Reviewed-by: Mike Klein <mtklein@chromium.org>
>
TBR=mtklein@chromium.org,mtklein@google.com,herb@google.com,fmalita@chromium.org,reed@google.com
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Change-Id: I328585f5412068f4eff1d0a2a6083cb4c1a3c078
Reviewed-on: https://skia-review.googlesource.com/18022
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
This reverts commit fabe0b26d0.
Reason for revert: Last android roll failed with "external/skia/src/effects/SkGaussianEdgeShader.h:11:10: fatal error: 'SkShaderBase.h' file not found"
Original change's description:
> Relocate shaders to own dir
>
> Consolidate all shader impls under src/shaders/.
>
> Change-Id: I450e37541214704c1ad9e379d9d753b7cc62fac3
> Reviewed-on: https://skia-review.googlesource.com/17927
> Commit-Queue: Florin Malita <fmalita@chromium.org>
> Reviewed-by: Herb Derby <herb@google.com>
>
TBR=mtklein@google.com,herb@google.com,fmalita@chromium.org,reed@google.com
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Change-Id: Idbb2b75053969df1dad9d8ce0217cd39189b9ddb
Reviewed-on: https://skia-review.googlesource.com/18020
Reviewed-by: Stan Iliev <stani@google.com>
Commit-Queue: Stan Iliev <stani@google.com>
Change-Id: Icb9d385333082de2f99b7a25cfd7251717e3f663
Reviewed-on: https://skia-review.googlesource.com/17580
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Herb Derby <herb@google.com>
1) In SkGpuDevice.cpp, the SkVertices refactor had a copy-paste error
when moving the paint initialization code into the helper function.
This caused draws with texs (but no colors, and no shader) to fail
to draw. Previously (and with this change) that draws solid filled
triangles. This is still different from CPU (which draws outlines).
This is an odd edge case, but it's also the easiest way to create
the second bug...
2) In GrDrawVerticesOp.cpp, we always claimed to have SkColor colors.
That's only true if the SkVertices has colors, otherwise we use the
paint's color, which is GrColor. Normally, this doesn't matter,
because we'll use uniform color which is always GrColor. But if you
induce batching (and the meshes have different colors), we expand
the per-mesh color to a per-vertex color. Then, the geo proc code
thinks that those per-vertex colors are SkColors, and swaps the red
and blue channels, leading to incorrect results.
Bug: skia:
Change-Id: I3401e030d4ffea8666efd02e20a5fdedcfbd8485
Reviewed-on: https://skia-review.googlesource.com/17986
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
In rare cases, a single edge can become collinear with two adjacent
neighbour edges after it's split. The solution is to continue to merge
until no collinear edges are found.
BUG=722000
Change-Id: Ia5dd212b7acfb40ed1d6c74ebfa9e4a4746fe40a
Reviewed-on: https://skia-review.googlesource.com/17963
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
Change-Id: Iabdc79183ccd2f9cc513d4bdc530fb078b1627ab
Reviewed-on: https://skia-review.googlesource.com/17930
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Behold the first raster pipeline-only gradient!
Change-Id: Ib6f53224e4ff9506aafdae1d2303102fc5235dfc
Reviewed-on: https://skia-review.googlesource.com/17982
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Comment describes it: Unless we do something to confuse their optimizer,
they will (incorrectly) deduce that uniform opaque color (modulated only
by a texture fetch) is always going to remain opaque. Then they skip
inserting their shader based blending code, turning SrcOver into Src.
Doing a max against zero is enough to squelch the optimization.
Bug: skia:
Change-Id: I74676cebb0b0c8d121da868dd8a88050e0cfcc0d
Reviewed-on: https://skia-review.googlesource.com/17924
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
It would reduce a lot of noise if the GrRenderTargetOpList kept a pointer to the GrCaps but, for now, I'm trying to shrink the GrRTOpList, not expand it.
Reland of: https://skia-review.googlesource.com/c/17323/ (Update clearOp for split-OpList world)
Change-Id: I97f3fb81e6258d430e7f7cf1ea8bd51a392f9f47
Reviewed-on: https://skia-review.googlesource.com/17830
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
Introduce a private base class (SkShaderBase), to hide
implementation details from the public interface (SkShader).
Change-Id: Ib1d76cde880bd51868b97408710f8bb38128e536
Reviewed-on: https://skia-review.googlesource.com/17925
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
This fixes the paint-color parts of the gamut GM,
and a handful of other similar problems.
We'll still memset in the blitter, just after we get in the right gamut.
BUG=skia:6679
Change-Id: I2b16259ad689c63ae304fb600802acf9125b8c25
Reviewed-on: https://skia-review.googlesource.com/17922
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
CQ_INCLUDE_TRYBOTS=skia.primary:Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Release-SK_CPU_LIMIT_SSE2,Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Release-SK_CPU_LIMIT_SSE41,Test-Android-Clang-Nexus10-CPU-Exynos5250-arm-Release-Android,Test-Android-Clang-PixelC-CPU-TegraX1-arm64-Release-Android,Test-Android-Clang-Ci20-CPU-IngenicJZ4780-mipsel-Release-Android
BUG=skia:6678,skia:6683
Change-Id: I217084fa0a11ad661a8751f0c3b1cade5cc52473
Reviewed-on: https://skia-review.googlesource.com/17902
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
This is so the blanket disabling of MSAA on Intel bots (in test.py & perf.py) actually disables it on the HD4000.
Change-Id: Ief3c0c85ed53e312f5e584ab51ba76f78fb8c036
Reviewed-on: https://skia-review.googlesource.com/17822
Reviewed-by: Kevin Lubick <kjlubick@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
speeds up GM:shadow_utils 20%
Bug: skia:
Change-Id: If52dd5e2c76ace82d06351af1419e0663a3a634f
Reviewed-on: https://skia-review.googlesource.com/17844
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>