Most importantly, remove the undefined behavior implied by "delta".
Change-Id: I8f9740804ec74dd40b049eafd4f0d51b36ce3237
Reviewed-on: https://skia-review.googlesource.com/18140
Reviewed-by: Herb Derby <herb@google.com>
CQ_INCLUDE_TRYBOTS=skia.primary:Test-Android-Clang-Nexus10-CPU-Exynos5250-arm-Release-Android
Change-Id: Ia0e9f32d0324e66c9d4812dbb156a2b858d49a13
Reviewed-on: https://skia-review.googlesource.com/18127
Commit-Queue: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Change-Id: Icc570d8a8f1df1dea202e1d234433491122b9b67
Reviewed-on: https://skia-review.googlesource.com/18135
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Adds explicit min/max index value fields to GrMesh. This eliminates the
previous assumption that the index values were within the range
[0..vertexCount-1]. In the pattern case we still maintain this
assumption.
Updates GrMesh to hide its fields and handle its new complexity using a
"helper" interface instead.
Adds a unit test for GrMesh.
Bug: skia:
Change-Id: Ia23de72d510f8827cee56072b727fb70a6e46b8d
Reviewed-on: https://skia-review.googlesource.com/17964
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
What do you supppose happens if we put an SkColorSpaceTransferFn on the
stack, pass its address to SkRasterPipeline, then pop it off the stack?
BUG=skia:6671
Change-Id: I17c777d9dc55a67cca6196a01c076a6be8283d3d
Reviewed-on: https://skia-review.googlesource.com/18078
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
The last GrTexture-based TextureSampler::reset call must be removed before the TextureSamplers can become purely GrTextureProxy-backed
Reland of: https://skia-review.googlesource.com/c/16908/ (Convert DstTexture to DstProxy)
Split out of: https://skia-review.googlesource.com/c/10484/ (Omnibus: Push instantiation of GrTextures later (post TextureSampler))
Change-Id: I3a497b6a950fad899f23882c0a9552894ef640f8
Reviewed-on: https://skia-review.googlesource.com/17205
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
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>
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>
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>
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>
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>
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>
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>
Introduce a private base class (SkShaderBase), to hide
implementation details from the public interface (SkShader).
Change-Id: If3ec26ca6abc9da20e3f139c11fdc023bdd85176
Reviewed-on: https://skia-review.googlesource.com/17241
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Mike Reed <reed@google.com>
Since skia is currently requiring the dst to be opaque for lcd draws this
change is safe to make in terms of correctly. It will also be faster than
the current shader based blending.
Bug: chromium:725879
Change-Id: I0c14b80eb5ab819500afc55030df83d5ddbef94a
Reviewed-on: https://skia-review.googlesource.com/17840
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
This is similar to copyToAndReset().
Also use this in SkPDF, for minor memory savings:
Single-threaded DM's peak RSS drops from 239MB
to 228MB.
Change-Id: I352a980e6dd54eb05d74cd057bd50e02312753b0
Reviewed-on: https://skia-review.googlesource.com/17714
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Hal Canary <halcanary@google.com>
Change-Id: I6a8cee08248462e4e17196028758dd8d44093b28
Reviewed-on: https://skia-review.googlesource.com/17831
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>