Cq-Include-Trybots: skia.primary:Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_SKVM_BLITTER
Change-Id: I7a573d8991a41020bfaf72fe1fe231ee1da92535
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/253196
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
This improves the encapsulation of all the data required to make a program/pipeline w/in the GrProgramInfo class.
Bug: skia:9455
Change-Id: Ib41519c8ded9f27a7bbe787097a431b38ab101bd
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/253376
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
This reverts commit 12cea8d6c4.
Reason for revert: unit tests failing on ARM... will try again once I have float comparisons implemented for ARM too.
Original change's description:
> hook up float comparisons to x86 JIT
>
> This gets the draws in gm/skvm.cpp all JITing again,
> and in one of the unit tests.
>
> (Everything draws the same of course.)
>
> Change-Id: Iada28690d9df78f9d444ee3765e21beb29239672
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/253166
> Auto-Submit: Mike Klein <mtklein@google.com>
> Reviewed-by: Mike Klein <mtklein@google.com>
> Commit-Queue: Mike Klein <mtklein@google.com>
TBR=mtklein@google.com,reed@google.com
Change-Id: Ie07e580b4998199338217a27d4fad34c679ffc23
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/253399
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
This gets the draws in gm/skvm.cpp all JITing again,
and in one of the unit tests.
(Everything draws the same of course.)
Change-Id: Iada28690d9df78f9d444ee3765e21beb29239672
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/253166
Auto-Submit: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
This further consolidates the information required to compute the program key (esp. for Vulkan). This CL mainly comprises the plumbing portion - a follow up CL will actually use it.
Bug: skia:9455
Change-Id: Iaac716c289916981a1757a333bfa57b3051fd35b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252161
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
"Front" and "back" actually refer to opposite triangles in GL vs
Vulkan. Both APIs define counter-clockwise as the default winding
direction for the front face, but since GL uses a bottom-up coordinate
system, they are reversed from one another.
The idea of this CL is to define Ganesh's stencil settings in terms of
clockwise and counter-clockwise in skia device space, just like how we
use "sk_Clockwise" insead of "gl_FrontFacing" in SkSL. We
intentionally avoid the "front"/"back" terminology so there is no
ambiguity. The individual backends are now responsible to translate
cw/ccw into whatever that means for front and back in their own
particular APIs.
This change also swaps the front and back stencil faces in vulkan and
metal, since they were previously backwards from GL. This should have
no actual effect yet, because the only code so far where this matters
is ccpr.
Change-Id: Ife6afbe0a83899edc7eacc3f00a4507d065cccab
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252977
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
I tracked down all the places where things were assuming 2-bits
of sub-pixel positions. I generalized them all to take a variable
number of bits.
Change-Id: I304061635c838fedc3881aaa256bab943ff6a817
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/253236
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Herb Derby <herb@google.com>
The previous version only translated the sub-position reliably
if the position < 2^10. This code extends the range to 2^21.
Change-Id: I7fcdfe2c3f7336ac0788e282c2bd0fc73067d8fb
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/253101
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Herb Derby <herb@google.com>
As written the order that skvm::Builder sees the values passed as
arguments to mad() is dependent on C++ function argument evaluation
order. This can be counterintuitive, and since skvm::Builder uses the
original order it saw arguments to break ties when reordering programs,
it can affect program order and register pressure.
This change keeps the math happening in the same order, but takes
precise control over when we mention (and thus when we load) each matrix
coefficient. The program goes from looking like this, loading uniforms
in reverse order that they're needed,
...
r4 = uniform32 arg(0) 4C
r3 = uniform32 arg(0) 50
r12 = uniform32 arg(0) 54
r13 = uniform32 arg(0) 58
r14 = uniform32 arg(0) 5C
r14 = mad_f32 r13 r8 r14
r14 = mad_f32 r12 r9 r14
r14 = mad_f32 r3 r11 r14
r14 = mad_f32 r4 r6 r14
...
to something nicer like this that reuses the same temporaries to load
and accumulate the uniforms in the order they're needed,
...
r7 = uniform32 arg(0) 5C
r11 = uniform32 arg(0) 58
r7 = mad_f32 r11 r8 r7
r11 = uniform32 arg(0) 54
r7 = mad_f32 r11 r9 r7
r11 = uniform32 arg(0) 50
r7 = mad_f32 r11 r10 r7
r11 = uniform32 arg(0) 4C
r7 = mad_f32 r11 r6 r7
...
In all this cuts three unnecessary temporary registers from programs
using SkColorFilter_Matrix, and would be enough to get gm/skvm.cpp all
JITing again if all the instructions it used were implemented... (next).
Cq-Include-Trybots: skia.primary:Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_SKVM_BLITTER
Change-Id: Ie03a5da476a49eeb950e74290001a0625cf61177
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/253126
Auto-Submit: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
For some reason using the 'new' method is causing crashes in some
circumstances. Switching to alloc then init (which is what new does
implicitly) fixes this.
Bug: skia:8243
Change-Id: I84983baf417b974e1888dba91af6f5d6a76bbbad
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252922
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
This makes some programs a little shorter, both in code size (xor is
fewer bytes on x86) and in data size (no big 0 splat data after return.)
But it's mostly just for fun. Every once in a while it's good to make
sure we can still do stuff like this to keep fresh.
Change-Id: I4a47a638bb05a2d1687d007141643ca0ed45130e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/253095
Auto-Submit: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
This reverts commit 078cf3e3b2.
Reason for revert: Appears to be blocking the Chrome roll due to Fuchsia build failures
Original change's description:
> Fully delineate GL usage w/ skia_use_gl
>
> Change-Id: I17424d2235c7a54c4cda036f01a0b99dadc4b632
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252085
> Commit-Queue: Mike Klein <mtklein@google.com>
> Reviewed-by: Brian Salomon <bsalomon@google.com>
TBR=mtklein@google.com,bsalomon@google.com,halcanary@google.com,rosasco@google.com
Change-Id: I17ba79bfe6e7f81c126eddbd50ca5384cfa4179c
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/253098
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
Change-Id: Idcc4d85683f376da92e9c6f88e35bb7df7ecea6b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/253090
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
This simplifies the code. It was only called in one place, from the
short SkWuffsCodec::onGetFrameCountInternal function.
Bug: skia:8235
Change-Id: I8af0816fab9f639bbb52ef7fa07b07006825e358
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251856
Commit-Queue: Leon Scroggins <scroggo@google.com>
Reviewed-by: Leon Scroggins <scroggo@google.com>
Change-Id: I17424d2235c7a54c4cda036f01a0b99dadc4b632
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252085
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
This requires the switch to using more factory functions that can fail,
creating the vulkan objects in the factories (instead of ctor), and
making sure calling code handles the failed creations.
Bug: skia:9603
Change-Id: I22f1852e4cbefe584857f3adccf486cb1326cb68
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252928
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Chris Dalton <csmartdalton@google.com>
This also moves the corner scale factors (1 for rectangles, or 1/sin(theta)
into the EdgeVector state, since that is constant for a quad and can be
reused between different edge distance requests.
The OutsetRequest cached data now only needs to decide which codepath to
use for calculating the inset or outset (fast or degenerate). It is now
capable of distinguishing degeneracies for just the inset and not outset
(or vice versa). Previously, if the inset would cause a degeneracy, both
inset and outset operations would go through the slow path.
Change-Id: Idda859152b6f515f2b3d54875b9f40d9feb5da22
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252816
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
We want this to be true so that we can know ahead of time what the primitiveType of a given render pass will be and add it to the GrProgramInfo.
This is pulled out of https://skia-review.googlesource.com/c/skia/+/252161/ (Add GrPrimitiveType to GrProgramInfo)
Bug: skia:9455
Change-Id: I3e6365da6db5349dfe7329ef1e20b8c1d6267ff1
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252925
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
Idea is to make shared functions around blendmodes, so we can use them from the
blitter-builder, and from effects like ModeColorFilter.
This CL just tries the refactor. After this, will be easy/fun to flesh out (some)
more of the other modes.
Change-Id: Ia55c60099065c16efdc322a5cab425e222540d6a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252658
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Change-Id: I1fb4807ab80dad9a02e9e236d43b3f2be7511412
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251769
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Don't go below 1 in width or height when downsizing for uploads.
This can happen with rectangular textures, where one dimension hits
the lower bound.
Change-Id: Ica28e6274cf1df658145233ab6694f2c64c55201
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252316
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
This basically wraps up the old `uniforms` and `buf` params
into a new type that has push() and pushF() methods that return
a value you can pass directly to Builder::uniform32() and co.
I think this has uniforms about as streamlined as they can get.
Change-Id: I8f611f91b4a2d7cdb8f05ce0333669d2e3930be8
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252937
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
This reverts commit 2245bf8313.
Reason for revert: I believe this is altering a lot of GMs (for the worse)
Original change's description:
> Reland "Implement sample mask and sample locations support in Vulkan"
>
> This is a reland of 8b915a0c27
>
> Original change's description:
> > Implement sample mask and sample locations support in Vulkan
> >
> > Change-Id: I372695ec5360def42a8a997675993264740b0da4
> > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252038
> > Commit-Queue: Chris Dalton <csmartdalton@google.com>
> > Reviewed-by: Chris Dalton <csmartdalton@google.com>
>
> Change-Id: Idd0d8f63c7bb1cdd4d905c483f2fe7ed2b34b05f
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252306
> Commit-Queue: Chris Dalton <csmartdalton@google.com>
> Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
TBR=csmartdalton@google.com,ethannicholas@google.com
Change-Id: I8e2ad26441f79545858233a4a59cad6898a8aed9
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252919
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
This reverts commit ee6b49b3af.
Reason for revert: I believe this is blocking the revert of Ethan's CL
Original change's description:
> Add a "conservative raster" flag to GrPipeline and implement in Vulkan
>
> This flag is not yet used or tested. Both will come next when we
> enable mixed sampled ccpr.
>
> Change-Id: Ic242010b1f0b8d81b83731960283e4231f301fd1
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252258
> Commit-Queue: Chris Dalton <csmartdalton@google.com>
> Reviewed-by: Greg Daniel <egdaniel@google.com>
TBR=egdaniel@google.com,csmartdalton@google.com
Change-Id: I01792817e7298470a3dc17e3687f1e8e0bc5d726
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252918
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
This flag is not yet used or tested. Both will come next when we
enable mixed sampled ccpr.
Change-Id: Ic242010b1f0b8d81b83731960283e4231f301fd1
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252258
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
This CL itself doesn't really change how anything is running today. However,
it is the first step into gracefully supporting a vulkan device lost return
error and being able to correctly clean everything up.
Bug: skia:9603
Change-Id: I9693c514a32ca437df61a7aee63651e2e40ee1c0
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252819
Reviewed-by: Chris Dalton <csmartdalton@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
This is a reland of 8b915a0c27
Original change's description:
> Implement sample mask and sample locations support in Vulkan
>
> Change-Id: I372695ec5360def42a8a997675993264740b0da4
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252038
> Commit-Queue: Chris Dalton <csmartdalton@google.com>
> Reviewed-by: Chris Dalton <csmartdalton@google.com>
Change-Id: Idd0d8f63c7bb1cdd4d905c483f2fe7ed2b34b05f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252306
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
It's clearer and more efficient to emit uniforms
as we use them. The pattern to look for is something like
skvm::I32 val = p->uniform32(uniforms, buf->bytes());
buf->push_back(fVal);
where fVal holds the actual uniform value, and val is its program
counterpart.
Switching to SkTDArray lets us use friendlier methods like bytes() and
append(N) in the effect code.
It's a lot easier to follow this way once you get used to it and much
less error-prone. No need to split the can-we-do-it logic up from the
uniform emission, and so no chance to write logic twice that
acccidentally disagrees.
Effects now always emit uniforms when you call program(), which means we
occasionally do that twice, once when building the Key to look up cached
programs, and once again when building the program if the cache misses.
That's not that big of a deal... it reuses the same memory exactly, and
I've added some notes around the code and assertions that everything
matches up exactly. It only happens on cache miss, so it's dwarfed by
the cost of building and JITing the program anwyay.
Change-Id: I55a9252b11b2c0cd5f7ab8ace6df5fef29342c10
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252837
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Rm unused function SkColorTypeIsGray.
Expect kGray_8 readback to work in tests.
Bug: skia:8962
Change-Id: Iad9d2be3e0a2e594e62dc681b79c59e0a833116a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/245162
Auto-Submit: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
GlyphIDs < 128 are the vast majority of ids in roman text websites.
This change exploits this to do a fast check to see if a glyph has
already been sent from the Renderer to the GPU. This does not change
the performance of CJK glyphs.
Remember each glyphID entry takes 4 bits to encode sub-pixel position
information.
SkDiffBench-wikicat: 143ms -> 118ms
Change-Id: If5905e0dc6b39ae69e0235e81a9b6050afd25a97
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251760
Commit-Queue: Herb Derby <herb@google.com>
Reviewed-by: Khushal Sagar <khushalsagar@google.com>
- move some helpers to central spot
- add a color filter interface, the same as shader without (x,y)
- implement matrix color filter (pretty naively)
and color filter shader (pretty reasonably)
- extend GM to demonstrate
The new blitters with color filters are failing to JIT because they're
running out of registers. (They still work fine on the interpreter of
course.) I'm going to take a look to see whether there's something I
can do either in the effect program() code or in the optimizer to
rearrange to get it to fit and JIT.
Cq-Include-Trybots: skia.primary:Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_SKVM_BLITTER
Change-Id: Ibdc1a5e7b9e7a14778efba583b7821bcd4f3062a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252788
Reviewed-by: Mike Klein <mtklein@google.com>
This lets shaders that use 'x' JIT on x86.
I started with paddd and {0,-1,-2,-3,...}, which worked fine but on
second thought seemed a bit odd. I've switched to psubd and
{0,1,2,3,...} but I've left in support for paddd with a memory arg.
gm/skvm.cpp now JITs fully again and continues to draw the same as
the interpreter did.
Simplify embedded data alignment a little... memory operands don't
need full register alignment in AVX like they used to in SSE. So
just align everything to the vector element size like we do on ARM,
and reorder [splats,bytes_masks,iota] to match the order we declare
and handle them in the code above.
Add unit tests for vpaddd + vpsubd.
Cq-Include-Trybots: skia.primary:Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_SKVM_BLITTER
Change-Id: I6b8d060450cca7f437a1d2a597a8a0e0e8d51b33
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252797
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Reed <reed@google.com>
This fixes a crash, but still does not answer the question why
8192x8192 msaa atlas instantiations are failing sporadically on
vulkan. Luckily we will be switching to mixed samples soon, so this
problem is very temporary.
Change-Id: I7dedb3c943f432543c12f02587ece8d71443a1cd
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252646
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
This reverts commit 701522798a.
Reason for revert: Maybe blocking the Android roll
Original change's description:
> Fully embrace skcms types in SkColorSpace API
>
> Remove the SkMatrix44 getter entirely.
>
> Change-Id: I25bfe68a7a9b21d8a8696415b517cb79fc2d7a94
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252596
> Commit-Queue: Brian Osman <brianosman@google.com>
> Reviewed-by: Mike Klein <mtklein@google.com>
TBR=mtklein@google.com,brianosman@google.com,reed@google.com
Change-Id: Ic277d54d4ac8c84f00405946c927a3aee4e33068
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252801
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
By making uniforms() just append to the uniform vector, there's no more
need for two passes, no need for the blitter to ever even know how many
uniforms the effects use, and the effects now never need to deal with a
nullptr uniform buffer. Much simpler all around.
While we're refactoring, convert the uniform buffer de jure to
std::vector<uint32_t>, which is what we'd been treating the old
std::vector<uint8_t> as by convention, and switch the program() offset
parameter type to size_t as a reminder that it's measured in bytes.
Cq-Include-Trybots: skia.primary:Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_SKVM_BLITTER
Change-Id: I81d2c92aae37a650104f384f815df78c8a186270
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252776
Reviewed-by: Mike Klein <mtklein@google.com>
We can unify these similar functions to reduce the amount of work we do
and guarantee SkShaderBase::program() is never called with a null
skvm::Builder*. We now only call program() to do real work: one call to
get a shader key, and if no program is found in the cache, one more call
to build the blitter program. No null checks are needed any longer.
Cq-Include-Trybots: skia.primary:Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_SKVM_BLITTER
Change-Id: I6e73d9d264690f04ddcc92e6f7b3c42654f8a41c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252759
Reviewed-by: Mike Klein <mtklein@google.com>
Change-Id: Iea0f804b1b2fed9e663e45c33fb54a91b10fd07b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252652
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
This should work, though I need to do a little more work to get programs
that use x to JIT. It shouldn't be bad, probably done tomorrow.
I've added a demo y-gradient to the SkVMBlitter GM.
We may not need an explicit CTM parameter, just effects that chain into
each other changing (x,y) as they go? I guess that depends on whether
we want to specialize blitters on the matrix type any more than how we
get the shader coordinates.
Cq-Include-Trybots: skia.primary:Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_SKVM_BLITTER
Change-Id: Iae28d169f611605ca6fbb8bcbcca6b67b103171c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252620
Auto-Submit: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
Remove the SkMatrix44 getter entirely.
Change-Id: I25bfe68a7a9b21d8a8696415b517cb79fc2d7a94
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252596
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Change-Id: Ie704f0f83b1034ff8ee1a5d3cd194e555cae20a3
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252600
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
Auto-Submit: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
This initializes more formats correctly with solid colors and relies
less on GrPixelConfig.
It also includes the changes to get gray8 read pixels working
and almost everything to initialize GL_RGB8 textures with data. Minor
stuff to follow to get RGB8 fully working and update test expectations.
Bug: skia:8962
Bug: skia:6718
Bug: skia:9358
Change-Id: Ic044b4c4badc37f14fb46c898cd3b3c21a6fc7fd
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251199
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Propagating usage of these helpers will, hopefully, improve code reuse and centralize future changes.
This is pulled out of https://skia-review.googlesource.com/c/skia/+/252161/ (Add GrPrimitiveType to GrProgramInfo)
Bug: skia:9455
Change-Id: I9b46e42db8561d98fb724a41a1f7a3bec4bf97b0
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252484
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
isValid read memory beyond the buffer that was uninitialized.
BUG=oss-fuzz:18555
Change-Id: I5576add2cd7bfbe146d495239b96210fe15fe562
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252538
Commit-Queue: Herb Derby <herb@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
This means we don't need to cache the coverage value calculated while
insetting.
Change-Id: Icf8b81f6fac04106ee4cd7d727e363ba0703474e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251766
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
We're calling updateUniforms() much more often than necessary.
I think we need to only call it once, as we construct our Blitter.
The shader doesn't know about coverage formats, so the uniforms
will not change from blit??() to blit??() call.
Change-Id: Icd59b4a14101245fec9ad91b7dee2b3156675716
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252514
Auto-Submit: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
Change-Id: If73951f8e183101b80f729d9533cc3c8395b1879
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252481
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Remove the RGB/YUV helpers (use SkYUVMath instead), along with the
unused get20/set20.
Change-Id: Id83467a1b7f33657869e0a933af75387a4e36a88
Bug: skia:9543
Change-Id: Id83467a1b7f33657869e0a933af75387a4e36a88
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252188
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Change-Id: Ie06c763f8677c395fdc4995bf78b9aff95040764
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252192
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
Change-Id: I47bd68532a68b7464ef6ed43733fef3d65792cfb
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251762
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
This reverts commit 0a4681d044.
Reason for revert: Maybe the cause of red bots
Original change's description:
> Reduce max # of AA Quads that can be merged or chained into a single GrTextureOp
>
> It is, arguably, not a good metric but the max number of AA Quads that are merged or chained together across all Skia's GMs and SKPs is 276.
>
> This should also reduce the memory consumed from 245,760 bytes to 30,720 bytes.
>
> Bug: b/143572065
> Change-Id: Ia70d3671fa33e0d84b38b4788e8c74ef98a9661e
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252176
> Reviewed-by: Michael Ludwig <michaelludwig@google.com>
> Commit-Queue: Robert Phillips <robertphillips@google.com>
TBR=robertphillips@google.com,michaelludwig@google.com
Change-Id: Id38a1242327b853b494631d9fbc6f6d3f15d5aec
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: b/143572065
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252193
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
Change-Id: I8f2b862d5631f4c9a2e2653ebd498f401ed1f949
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252185
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
Program caching makes whether or not this is safe a little subtle. It
is safe and I've tried to explain the subtlety in comments in the new
non-virtual Shader program() hook that forces all opaque shaders to
opaque, and in comments in SkVMBlitter where we make use of isOpaque().
I think this is the tidiest way to get the optimization and safety,
though it is a little awkward to have to write epic cross-referenced
comments explaining first why it might not generally be safe to use
shader->isOpaque() to make decisions in the blitter, and then how we
actually have made it really quite safe.
Many tiny partial-coverage diffs from how coverage interacts differently
with SrcOver and Src, SrcOver folding coverage into the src color before
blending with dst, Src just lerping with dst.
This all comes together really quite magically, changing a program to
draw a solid opaque color from this,
11 registers, 41 instructions:
r0 = uniform32 arg(0) 0
r1 = splat FF (3.5733111e-43)
r2 = extract r0 8 r1
r3 = splat 80 (1.793662e-43)
r4 = extract r0 24 r1
r5 = sub_i32 r1 r4
r6 = extract r0 16 r1
r0 = extract r0 0 r1
loop:
r7 = load32 arg(1)
r8 = extract r7 8 r1
r8 = mul_i32 r8 r5
r8 = add_i32 r8 r3
r9 = shr_i32 r8 8
r9 = add_i32 r8 r9
r9 = shr_i32 r9 8
r9 = add_i32 r2 r9
r8 = extract r7 0 r1
r8 = mul_i32 r8 r5
r8 = add_i32 r8 r3
r10 = shr_i32 r8 8
r10 = add_i32 r8 r10
r10 = shr_i32 r10 8
r10 = add_i32 r6 r10
r9 = pack r10 r9 8
r10 = extract r7 16 r1
r10 = mul_i32 r10 r5
r10 = add_i32 r10 r3
r8 = shr_i32 r10 8
r8 = add_i32 r10 r8
r8 = shr_i32 r8 8
r8 = add_i32 r0 r8
r7 = extract r7 24 r1
r7 = mul_i32 r7 r5
r7 = add_i32 r7 r3
r10 = shr_i32 r7 8
r10 = add_i32 r7 r10
r10 = shr_i32 r10 8
r10 = add_i32 r4 r10
r10 = pack r8 r10 8
r10 = pack r9 r10 16
store32 arg(1) r10
to this,
4 registers, 9 instructions:
r0 = uniform32 arg(0) 0
r1 = splat FF (3.5733111e-43)
r2 = extract r0 8 r1
r3 = extract r0 16 r1
r2 = pack r3 r2 8
r0 = extract r0 0 r1
r1 = pack r0 r1 8
r1 = pack r2 r1 16
loop:
store32 arg(1) r1
Change-Id: Ic1e2ac1496252970743ef44b17908965bc73e384
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252198
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Now that we've turned paint colors into shaders where appropriate,
SkVMBlitter's Uniforms struct is only really holding one byte of
coverage for when we're in RLE coverage mode.
We can just pass that coverage as its own uniform pointer, much like we
pass a pointer for masks. This means there's no need to think about the
(notional) Uniforms struct any more, and leaves the first, main uniform
parameter holding shader uniforms exclusively.
Change-Id: I1c45d8c3280816836b011e22e07a666952a9df63
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252080
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Change-Id: Iaf1daad359cd7478ed42966bd65231ff108e602c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251661
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
This means we can share programs with color shaders
whether they come through as a paint color or shader.
The GM now only ever JITs one program.
Change-Id: If61f9e7b79aa6b8fd1de7c16ff52f78bfd7dc4ec
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252079
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
I'd like to express each of the special automatic features of the color
pipeline as their own effects in SkVMBlitter where possible. This turns
the modulate-shader-by-paint-alpha feature into an explicit shader
wrapper.
This also sort of shows off how program() and uniforms() can chain
together. This is the same basic form that SkColorFilterShader will
take, since scaling by alpha is basically a color filter. (And indeed,
I may follow up by reformulating this as AlphaColorFilter once I get
color filters and SkColorFilterShader working with SkVMBlitter.)
Other next steps may involve factoring the pipeline's implicit
use-the-paint-color shader into an explicit shader.
Just FYI on the bug, thinking along its lines.
Bug: skia:9572
Cq-Include-Trybots: skia.primary:Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_SKVM_BLITTER
Change-Id: Ia9a5a10d685d2ca0a5e15792c7cf39d8b32a20a4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252022
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
When rendering to a BottomUp render target, the SRIR-V codegen
needs a uniform to pass the render target height. (This is kind
of hacky, since it depends on being the last uniform, but it's
the same hack that the Vulkan backend uses.)
Change-Id: I520478d5e26504c7884daa72024fafe943a07294
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252182
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
It is, arguably, not a good metric but the max number of AA Quads that are merged or chained together across all Skia's GMs and SKPs is 276.
This should also reduce the memory consumed from 245,760 bytes to 30,720 bytes.
Bug: b/143572065
Change-Id: Ia70d3671fa33e0d84b38b4788e8c74ef98a9661e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252176
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
This lets skia_renderer include SkBlendModePriv.h without breaking the
chrome build.
Change-Id: Icb96dbc50199c3a98bc7d5d2b643afda0297cf97
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252178
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
Auto-Submit: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
1) add a hash() method to skvm::Builder
This is cheap... we're hashing instructions as we go anyway.
Small refactoring to keep all its hashing close and clear.
2) split Key into Key (a small bytey hashy identifier)
and Params (a pointery typey payload struct)
3) dummy call ->program() on shaders as we build our Key,
and then include that dummy Builder's hash() in the key.
This lets us reuse cached programs when effects vary only in their
uniforms. The approach in 3) is meant to be a first draft, a kind of
can-we-get-away-with-this hack. We may need to change this with,
- stronger equality than just a hash of the instructions;
- a new cheaper hook that avoids the cost of skvm::Builder.
Cq-Include-Trybots: skia.primary:Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_SKVM_BLITTER
Change-Id: I5f3839d3f7de40043fcb6177b617672c56f0eb70
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252019
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
Change-Id: I8ef13b78a5f2f49ff9c59db285b3e0e7ee708c9b
Bug: chromium:960620
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252160
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Chrome has been rebaselined:
https://chromium-review.googlesource.com/c/chromium/src/+/1893372
Change-Id: Iff21ca606bf2e5fa0b8946940cab0b06fbd11e47
Bug: skia:9543
Change-Id: Iff21ca606bf2e5fa0b8946940cab0b06fbd11e47
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252158
Commit-Queue: Brian Osman <brianosman@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
Auto-Submit: Brian Osman <brianosman@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
This should, hopefully, be faster on GL as we will only need to update the index-range for a draw rather than the offset into an vertex buffer.
Change-Id: I09e54c37262168661443fa8bf8d3b43cd8faa9db
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251757
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Performance measurments showed that SkPackedGlyphID was too much
time.
SkDiffBench-lorem_ipsum 955µs -> 873µs
BUG=chromium:881505
Change-Id: I8d42f02d87817777cc7c95404c73c723f0bc100c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251818
Commit-Queue: Herb Derby <herb@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Bug: chromium:1018218
Change-Id: I9a33332a06a63075dd016f038d5cd4ede59f9a5d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252042
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Change-Id: I133fb0d5e154c2f01aba7ef2a7e1b87b6089a608
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251460
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
This adds `shader && paint alpha < 1.0f` to the blitter Key, so we'll
generate and cache two different programs based on that bit.
I put a little bit of effort into a different approach, wrapping the
shader with a new shader that modulates by paint alpha when paint alpha
is less than one. This should work, but I realized that it would break
caching, since we're caching based on shader identity. (Not really
break, but make it ineffective.)
I've added some notes about cache keys in general, and that this wrapper
approach would make caching less effective is I think enough to make me
want to work out a "identify yourself except for uniforms" protocol for
shaders (really effects, eventually color filters will need it too).
Change-Id: I1a2a490657bf7442e79f87d80968302720265f7d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251775
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
Brace initilaization of a std::vector was starting our uniform buffer
out as a single byte, holding sizeof(Uniforms). I meant it to be
sizeof(Uniform) bytes, all zero...
That's fixed here, and was why scaling by paint alpha wasn't working.
Change-Id: Iad30d701aa175c74c9c5aaed8baf8279479188b1
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251753
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
Auto-Submit: Mike Klein <mtklein@google.com>
Removes another redundant set of YUV matrices, and probably fixes errors
in the Rec.601 and Rec.709 matrices (they appear to have had incorrect
bias values based on 128 / 255 being zero).
Matrix changes affect layout tests, so guarding this in chromium:
https://chromium-review.googlesource.com/c/chromium/src/+/1890956
Change-Id: I3699a00c93eb10a9da14c881bfd338ce98249c7d
Bug: skia:9543
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251771
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Additionally updated some calls upstack to pass in the views.
Bug: skia:9556
Change-Id: I2b6274cb1811b102713433d51a9b18d47778174a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251759
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Cuts down on the number of places that have redundant YUV matrices.
Also, there appears to have been a typo in the Rec709 matrix, so this
fixes that.
Change-Id: I91f2c772656095c52f53e09b1de04908f268fbb7
Bug: skia:9543
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251767
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Change-Id: Ie4611b4aae65aed5aa45be8841fbb7326bcfbf0b
Bug: skia:9581
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251773
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Change-Id: Ic286357dc637edf0c8df003422a43252590250f5
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251768
Reviewed-by: Mike Klein <mtklein@google.com>
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Herb Derby <herb@google.com>
Change-Id: I4d4a8409163c2b2d1773e395a73857626c45d406
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251752
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
We'll lean on them being folded away before choosing blitters.
That happens everywhere but in Google3 now, and there's no use
of SkVMBlitter outside our own testing, certainly not Google3.
Change-Id: Ic9725ffbad5f2226d5f030e82bd72500a624b1ff
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251740
Auto-Submit: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
Change RemoteStrikes to hold a very small summary of what has been
sent for each glyph, and only maintain full glyph information
until the next serialization. This greatly reduces memory used,
and improves average performance by 10% as measured by traces from
the top 10 websites.
BUG=chromium:881505
Change-Id: Id5c5d974e3c35a63d232bb62fc605e8472d926fc
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251237
Reviewed-by: Khushal Sagar <khushalsagar@google.com>
Commit-Queue: Herb Derby <herb@google.com>
The conversion math for a given space can be fully derived
from the Kr and Kb terms (plus the headroom/footroom), so
avoid redundant values that can be wrong.
And, no need to list every possible value of an enum param,
especially when the generated doxygen links to the type's
documentation, which has all the values listed.
Change-Id: I64ce8cfd5ec7ff74dc3b878202b13d0d483e1db6
Bug: skia:9543
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251764
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
This should allow the bit field positions to be moved
around in the SkPackedGlyphID.
Change-Id: I85390f594a017b9df779f0a12e1f24c4d9e077dd
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251761
Commit-Queue: Herb Derby <herb@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
We have only implemented support for the sample mask. This CL renames
the cap to reflect that.
It also replaces sampleVariablesStencilSupport() with the more aptly
named canOnlyUseSampleMaskWithStencil(), to make it more clear that
this is a driver workaround.
Change-Id: Ibf54092c63181232fb3b94cad7ddb16e3a15e3d1
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251580
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
The new webgpu_cpp.h hotness for native apps brings with it a new
namespace: wgpu. This is a straight substitution.
Note: no Skia API changes.
Change-Id: I12b26417e76838cd8fa2b39b8161cbaa2cd8fa78
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251660
Commit-Queue: Stephen White <senorblanco@chromium.org>
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
This will hopefully reduce the overhead of prePreparing the vertex data (i.e., only one memcpy to use the precomputed data) and set us up for using the full extent of the index buffers.
Note this CL also contains a refactoring to share more code between onPrePrepareDraws and onPrepareDraws (i.e., the FillInData method).
Change-Id: Ia0e482332c8108e24b82743b82fdf53840c9b009
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/250800
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
Bug: b/142333639
Change-Id: I5c5bf4da0e2bb5f1b4233681dee305cf381c3e2a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/250096
Commit-Queue: Jim Van Verth <jvanverth@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Some nerve those folks have to #define None 0L.
Cq-Include-Trybots: skia.primary:Build-Debian9-Clang-x86_64-Debug-SwiftShader
Change-Id: I0c84f78ec72672648d1c0bde69b6e05433b80d56
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251516
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
This ensures we never confuse a dead effect pointer in our cache for a
different live effect that happens to be allocated at the same address
as the old one. Never seen it happen yet, but it's possible.
Change-Id: If8aff141fb6d0a4e10f13a153b154bb14f5a8c1a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251442
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Nothing too tricky, all spun off the other CL.
Diffs on the new emboss GM look good.
Change-Id: Ia46f106491e92c0cee4020200474ea5de2ca270d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251440
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
When rendering cross-context images, we can end up with a situation
where the image thinks it should be tiled because it won't fit in the
cache, but we can't tile it because getROPixels fails. In this case,
the image should be backed by the client, so we should be able to
render it through a TextureProducer.
Bug: skia:9562
Change-Id: I172e1008ca423f46b0c7b445bdf3eb573215adfb
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251458
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
Bug: skia:9556
Change-Id: Icbcc56c0eb0d0de0886874e0ed8c3f03c7318d02
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249883
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
We later compute the "width" of the filter as (2*radius)+1, so fail
early if that will overflow.
Bug: chromium:1018190
Change-Id: I6554693067be4b52b1304d9f6fd0376ce4b3be19
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251364
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
I believe GrFillRectOp wasn't handling AA-upgrading correctly. Both ops now also check that they aren't exceeding the index buffer limits for both AA and non-AA draws.
Change-Id: Iae586b92e1f27a908a54ae881f2b1db21ec1afc8
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251360
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
We add a small cache of descriptor sets on each texture which only contain
one descriptor which a a texture/sampler using the given texture.
This helps to reduce the overhead of finding a new descriptor and re-writing
data to it every frame we want to use it.
Seeing about 25% gpu main thread performance win on linux vulkan
css_opacity_plus_n_layers.html?layer_count=1000&visible_layers=1000 test
Bug: skia:9574
Change-Id: I9979d7d874350e12caae0e5e70113c9347228e8a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251243
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
I wanted to cleanup this file as much as possible before starting to add
caching logic to make the changes simpler.
Bug: skia:9574
Change-Id: I8280a81f17372680a488f7f7d28d78d68121b235
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251201
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
This is a reland of 620154a7dc
Now handles kGray_8.
Original change's description:
> Make GrFillInData use SkRasterPipeline
>
> Makes it easier to add new color types.
>
> Bug: skia:6718
> Change-Id: Id0e6974ec87fd06587b2ccd7a9b99ceb1b6284f1
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251236
> Reviewed-by: Robert Phillips <robertphillips@google.com>
> Commit-Queue: Brian Salomon <bsalomon@google.com>
Bug: skia:6718
Change-Id: Id8b632242b87957f5b1e1a130eb26dafdf82a1cc
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251359
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
This CL also increases the AAQuadIndexBuffer's size and centralizes the handling of index buffer constants.
Change-Id: I4fb679a1c5e4076cf249b612f798e9bf5a38cd0b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251244
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
This reverts commit 1e0f2f389f.
Reason for revert: I suspect this is blocking the Chrome roll
Original change's description:
> Implement refPinnedTextureProxy for SkImage_Lazy.
>
> Creating a cross-context texture exposed a hole in our lazyproxy
> texture generation. Despite having a wrapped texture we were falling
> back to drawing in tiled mode, which is incorrect. Filling in these
> methods allows us to draw with the wrapped texture.
>
> Bug: skia:9562
> Change-Id: Ia26c5d75b202aefdf720e6d1f7a201af23e40676
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251214
> Reviewed-by: Robert Phillips <robertphillips@google.com>
> Commit-Queue: Jim Van Verth <jvanverth@google.com>
TBR=jvanverth@google.com,robertphillips@google.com
Change-Id: I2dd6f2cbe13dd3ac1f65890da366171572fb84e2
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:9562
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251356
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
This reverts commit 620154a7dc.
Reason for revert: Breaks Win10.
Original change's description:
> Make GrFillInData use SkRasterPipeline
>
> Makes it easier to add new color types.
>
> Bug: skia:6718
> Change-Id: Id0e6974ec87fd06587b2ccd7a9b99ceb1b6284f1
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251236
> Reviewed-by: Robert Phillips <robertphillips@google.com>
> Commit-Queue: Brian Salomon <bsalomon@google.com>
TBR=bsalomon@google.com,robertphillips@google.com
Change-Id: I77b400fcb9a74b56f5b480c88e3d2340f26a6cf2
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:6718
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251349
Reviewed-by: Joe Gregorio <jcgregorio@google.com>
Commit-Queue: Joe Gregorio <jcgregorio@google.com>
Only send the glyph images that will be used by the GPU process. If the image
is too big to fit in that atlas, it will never be placed in the strike cache.
So, don't send it.
Change-Id: I8b3c3138555cf73b370784b37360b0a283bb3e41
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251239
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Herb Derby <herb@google.com>
Creating a cross-context texture exposed a hole in our lazyproxy
texture generation. Despite having a wrapped texture we were falling
back to drawing in tiled mode, which is incorrect. Filling in these
methods allows us to draw with the wrapped texture.
Bug: skia:9562
Change-Id: Ia26c5d75b202aefdf720e6d1f7a201af23e40676
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251214
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
Bug: chromium:1016183
Change-Id: I2fa470db3690f79d83fd17b01e421e7457f7c725
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251246
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Makes it easier to add new color types.
Bug: skia:6718
Change-Id: Id0e6974ec87fd06587b2ccd7a9b99ceb1b6284f1
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251236
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
Chrome is now using the newer version.
Bug: skia:8962
Change-Id: I8c38bde63e1e032281d19b0cc7cb8cf301061a9e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251198
Commit-Queue: Greg Daniel <egdaniel@google.com>
Auto-Submit: Brian Salomon <bsalomon@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
When run on cooperative threads, we need to notify the threading system
when we're going to block (in any way, sleep or spin) so that it doesn't
wake that thread up expecting it to make forward progress.
This should cover SkOnce, SkSpinlock, SkSemaphore, and by extension
SkMutex. Not sure if there are others to hit, but really the only way
to find out is by deadlocked stack traces. This CL (obviously?) does
nothing to mark synchronization primitives used by Skia's dependencies,
and in general I don't think we can do anything about them.
See cr/275261423 for more background and discussion. It's not clear to
me that marking these symbols as weak is necessary, so I figured I'd
just try not doing that and seeing what breaks. I can always follow up
with weak symbols if proven necessary.
Bug: skia:9577
Change-Id: I2c03fe92c58ad506dd8a68bdc90a09b28f965149
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251221
Commit-Queue: Mike Klein <mtklein@google.com>
Auto-Submit: Mike Klein <mtklein@google.com>
Reviewed-by: Herb Derby <herb@google.com>
This CL doesn't use the new VertexSpec member variable but should clarify the path forward (i.e., we will determine the index buffer option at characterize time and enforce that decision at onPrepare time for all the meshes).
This also refactors the GrTextureOp::characterize call.
Change-Id: I7010385abf5a462c12fd47e314aad893bca85fb9
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251002
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
The Pro Vega is used in the iMac Pro, and has the following
string:
"AMD Radeon Pro Vega 56 OpenGL Engine"
Make it behave like kAMDRadeonHD7xxx_GrGLRenderer.
Change-Id: I3eb60a56e0d10df6d5deab18302514d0ae3b2a56
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251116
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Herb Derby <herb@google.com>
Reading back pixel values from protected memory into cpu memory is
not allowed. This CL adds early returns so they are not attempted.
Bug: skia:9016, fuchsia:38648
Change-Id: Icc0b51a62e87b7aebd0e7cb2a061fea084e7f754
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251000
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
If the drawing is rotate, then it won't be handled by the
device fallback case. So, the source glyphs can fit in
the atlas with out scaling, so don't scale. Previously,
the system would put the largest possible glyph in the
cache, and scale it down.
Change-Id: If4261854100d4736702d192e4f0847014c55f1c5
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/250796
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Herb Derby <herb@google.com>
This is a reland of 162d16891f
Original change's description:
> Allow direct readback for formats in non-ES OpenGL
>
> Bug: skia:8962
> Change-Id: I85a2e228892a54cc2a0abd607d034515a9af12af
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/250258
> Reviewed-by: Greg Daniel <egdaniel@google.com>
> Commit-Queue: Brian Salomon <bsalomon@google.com>
Bug: skia:8962
Change-Id: Id878df9747653f2b34e551073a4562277e789e9d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/250657
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
These appear to autovectorize fine.
There are a ton of tiny diffs here, which sounds to me like the NEON
code is doing something slightly different than the portable path.
That's kind of reason enough for me to want to drop this code... it's
write-once code that never gets updated or bug fixes.
I'm going to try replacing these next with some skvx-based code to see
if there's any speed up to be gotten from readable code.
nanobench -m bitmap_ [-before-]{+after+} is uninteresting:
! -> high variance, ? -> moderate variance
micros bench
[-6086.72-]{+5996.35+} shadermaskfilter_bitmap_80 8888
[-5629.37-]{+5603.07+} shadermaskfilter_bitmap_ff 8888
[-348.31-]{+348.62+} draw_bitmap_aa_rotate 8888
[-215.12-]{+221.48+} draw_bitmap_aa_translate 8888
[-294.87-]{+315.18+} draw_bitmap_aa_scale 8888
[-11.89 !-]{+11.95+} draw_bitmap_aa_ident 8888
[-307.47-]{+304.01+} draw_bitmap_noaa_rotate 8888
[-14.56 !-]{+16.18+} draw_bitmap_noaa_translate 8888
[-294.56-]{+312.53+} draw_bitmap_noaa_scale 8888
[-12.05-]{+12.44+} draw_bitmap_noaa_ident 8888
[-38.14-]{+37.84+} ? bitmap_RGBA_8888_A_source_stripes_three 8888
[-35.98-]{+37.81 ?+} bitmap_RGBA_8888_A_source_stripes_two 8888
[-23.58-]{+23.89+} bitmap_RGBA_8888_A_source_transparent 8888
[-25.02-]{+24.96+} bitmap_RGBA_8888_A_source_opaque 8888
[-882.88-]{+777.45+} bitmap_RGBA_8888_A_scale_rotate_bicubic 8888
[-865.57-]{+451.20+} bitmap_RGBA_8888_A_scale_bicubic 8888
[-132.63-]{+145.47+} bitmap_RGBA_8888_update_scale_rotate_bilerp 8888
[-139.90-]{+147.01+} bitmap_RGBA_8888_update_volatile_scale_rotate_bilerp 8888
[-144.19-]{+132.19+} bitmap_RGBA_8888_scale_rotate_bilerp 8888
[-150.94-]{+158.66+} bitmap_RGBA_8888_A_scale_rotate_bilerp 8888
[-86.07-]{+85.63+} bitmap_RGB_565_scale 8888
[-455.76-]{+455.36+} bitmap_RGB_565_scale_bilerp 8888
[-91.71-]{+94.45+} bitmap_RGBA_8888_update_scale_bilerp 8888
[-93.79-]{+99.09+} bitmap_RGBA_8888_update_volatile_scale_bilerp 8888
[-95.02-]{+94.31+} bitmap_RGBA_8888_scale_bilerp 8888
[-100.45-]{+105.19+} bitmap_RGBA_8888_A_scale_bilerp 8888
[-20.89-]{+21.15+} bitmap_RGBA_8888_update 8888
[-21.16-]{+20.98+} bitmap_RGBA_8888_update_volatile 8888
[-81.12-]{+80.12+} bitmap_RGB_565 8888
[-21.05-]{+21.35+} bitmap_RGBA_8888_scale 8888
[-21.04-]{+20.99+} bitmap_RGBA_8888 8888
[-27.91-]{+27.78+} bitmap_RGBA_8888_A 8888
Change-Id: Ia2746ac342e2a29653846da5252c09467a85a077
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/250688
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
This is a reland of 3f55695a04
Original change's description:
> ccpr: Unblacklist Qualcomm with msaa
>
> Bug: skia:
> Change-Id: I1ab69fe87136955b01a329675f1d0affec3700ec
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/245530
> Commit-Queue: Chris Dalton <csmartdalton@google.com>
> Reviewed-by: Brian Salomon <bsalomon@google.com>
Bug: skia:
Change-Id: I22ee033652c9c9357698c4adf5c7dbe6a7a0a155
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249808
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Change-Id: I95e7eca71ee5d9ec1cf0d0136b560cd45cee910d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/250685
Commit-Queue: Mike Klein <mtklein@google.com>
Commit-Queue: Herb Derby <herb@google.com>
Auto-Submit: Mike Klein <mtklein@google.com>
Reviewed-by: Herb Derby <herb@google.com>
This is a reland of 598741667a
Original change's description:
> Enable Programs (formerly GLPrograms) test for other APIs
>
> Bug: skia:9365
> Change-Id: I2eeac4e628425411b0a8f9ffa94ad61d58254b77
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249806
> Reviewed-by: Robert Phillips <robertphillips@google.com>
> Reviewed-by: Eric Boren <borenet@google.com>
> Commit-Queue: Jim Van Verth <jvanverth@google.com>
Bug: skia:9365
Change-Id: I94db6cb2b1465edbb2e6d32708b835a76e12cbc6
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/250016
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
This trades memory and DDL-record time for GPU-flush time. That is, by tessellating in onPrePrepareDraws we will consume more memory (for the verts) and time at DDL-record time but, hopefully, less time when drawing the DDL.
Change-Id: I97dd1a00486c7a1da53add2ea203bf3f90c20162
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/250178
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Use `extra_cflags=["-DSK_CAPTURE_DRAW_TEXT_BLOB"]` to enable.
Change-Id: I1d6db478ee91696cdce090647b889c17a83a2718
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/250259
Commit-Queue: Hal Canary <halcanary@google.com>
Reviewed-by: Herb Derby <herb@google.com>
This is a reland of cba64462d2
... with a fix to SkColorFilterShader::onAppendStages() to
copy out the alpha. The blitters sometimes outlive the shader.
Original change's description:
> hide color filters from blitters
>
> This is all guarded by the old define we never rebaselined.
>
> Had to make some upgrades to SkColorFilterShader to support
> replacing an SkPaint's shader and color filter with a single
> merged SkColorFilterShader. Our pipeline's order of operations
> is
>
> 1) shader
> 2) scale by paint alpha
> 3) color filter
>
> but SkColorFilterShader had no way to get that paint alpha in
> the middle there, so I added one.
>
> Change-Id: Ibc1448c1b421747086030337c1a30b8f0af4aa5e
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/250296
> Commit-Queue: Mike Klein <mtklein@google.com>
> Reviewed-by: Mike Reed <reed@google.com>
Cq-Include-Trybots: skia.primary:Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN
Change-Id: Ia98dbeaba6220a60d195c0ef967772c9dce882a2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/250596
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
Make better use of SkISize and GrImageInfo.
Change-Id: Ie3c9f16d7db05e6527baf1aae4607d74d020ee49
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/250577
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reduce the number of branches, similar to GrHSLToRGBFilterEffect.fp.
colorfilter_matrix_hsla 500.92 -> 482.47
Change-Id: I7d11a226f7db314dd284be538eee37fbe59f60b4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/250339
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
There is a bug on Pixel and Pixel2 devices where the program
eventually terminates with a non-zero exit code. Closing the
outResultsFile between JSON flushes seems to fix it (for whatever
reason).
Bug: b/143074513
Change-Id: I935e982e88758fda19292129c8031f8501cca615
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249821
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
This is mostly the patch we've been looking at, rebased,
with some of my comments from the review folded in.
The perf speedup is qualitatively the same as I saw on the other patch.
On that same Snapdragon 835, with draw_bitmap_aa_rotate runs about 30%
faster (543.39 vs 712.71us) and draw_bitmap_noaa_rotate about 15% faster
(481.93 vs. 572.13us).
The main thing I have omitted is the NEON specialization of matrix
procs. It looks like both nofilter_affine() and filter_affine() are
autovectorized well, and we seem to perform fine enough without manual
specialization here. I'm even tempted to remove [no]filter_scale_neon()
as a follow up.
Image diffs look mostly fine. This unexpectedly fixes rotated lighting
shaders in GMs. Clearly that lighting shader must get a lot of use...
Change-Id: I67ee0b3ab92d6e56584ece05feb6e66d6fb7c660
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249860
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Reed <reed@google.com>
GrTestingBackendTextureUploadTest creates backend textures from BGRA
pixmaps. There is a bug on desktop GL. We choose a RGBA format for the
texture. We then infer the color type of the data from the format (via
a hop through GrPixelConfig) as RGBA and upload it as such.
Currently we don't fail the test because the test fails to read the data
back (because we don't support direct reading of BGRA data from textures
in GL).
Fixing the read back causes the test to fail.
This change removes the inference of color type from the format and
instead uses the pixmaps' color type.
This doesn't fix several larger issues, including:
1) The intended color type is not specified when creating a texture of a
solid color so we still infer it from the format in that case.
2) We may not support direct uploading of data in the pixmaps' color type
to the chosen texture format but must first convert it to some other
color type on the CPU.
Change-Id: I3b1022c40201fc107cb39bbb5cca775795c828e8
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/250336
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Currently, there are two methods for drawing paths. The device metrics
version that uses the glyphs from the mask paths directly, and the common
path (font size 64) version that uses scaling to generate the paths.
This change removes the device metrics version. This is a very rare execution
path because, the font size needs to be < 132, but still generate a glyph with
dimensions > 256. I have only seen this in the wild once.
This change simplifies the code, and does not change the behavior very much.
There are only two GMs show big numerical changes. One has visible differences
(textblobmixedsizes), and the other is very slight visible difference(mixedtextblobs),
but it is not wrong.
Change-Id: Ieb10cd73c81196c66be5f791d591471e15175917
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249888
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Herb Derby <herb@google.com>
Bug: skia:
Change-Id: Idfe709836a9c0be5ce9b6fd200956ff8e284596d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249981
Reviewed-by: Hal Canary <halcanary@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
This fixes the fpcoordinateoverride GM, and others.
Change-Id: I715e39201a4c77aa49395a3b9259caaf3ca0328e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249893
Commit-Queue: Stephen White <senorblanco@chromium.org>
Reviewed-by: Greg Daniel <egdaniel@google.com>
This reverts commit cba64462d2.
Reason for revert: ASAN failures: https://logs.chromium.org/logs/skia/4812b6e5916f3d11/+/steps/symbolized_dm/0/stdout
Original change's description:
> hide color filters from blitters
>
> This is all guarded by the old define we never rebaselined.
>
> Had to make some upgrades to SkColorFilterShader to support
> replacing an SkPaint's shader and color filter with a single
> merged SkColorFilterShader. Our pipeline's order of operations
> is
>
> 1) shader
> 2) scale by paint alpha
> 3) color filter
>
> but SkColorFilterShader had no way to get that paint alpha in
> the middle there, so I added one.
>
> Change-Id: Ibc1448c1b421747086030337c1a30b8f0af4aa5e
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/250296
> Commit-Queue: Mike Klein <mtklein@google.com>
> Reviewed-by: Mike Reed <reed@google.com>
TBR=mtklein@google.com,reed@google.com
Change-Id: Icc3a3916ca763de979c01d65746d74c49e14544c
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/250261
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
This is all guarded by the old define we never rebaselined.
Had to make some upgrades to SkColorFilterShader to support
replacing an SkPaint's shader and color filter with a single
merged SkColorFilterShader. Our pipeline's order of operations
is
1) shader
2) scale by paint alpha
3) color filter
but SkColorFilterShader had no way to get that paint alpha in
the middle there, so I added one.
Change-Id: Ibc1448c1b421747086030337c1a30b8f0af4aa5e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/250296
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Implementation is shared with with AsyncReadPixels.
Change-Id: If40705e96cc7fb073ab6024ab59819784c8be0ca
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/244717
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
These names are more appropriate after:
https://skia-review.googlesource.com/c/skia/+/241356 (Always create an approx-size texture for approx-fit proxies))
Note that this CL does have one substantive change in GrCoordTransform::hasSameEffectAs where we use our knowledge of the size at which the backing stores will be allocated to remove a sly usage of GrSurfaceProxy::underlyingUniqueID.
Change-Id: Ibbb8cb23c4503f267abbdf4794610f3262a6f515
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/250257
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
This centralizes the information we are preparing and reduces duplicate computation (e.g., of the VertexSpec).
Change-Id: Iac2c4d0890389e641ee9a7453dace31c0a4ca965
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249983
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
This reverts commit 766b4c9c21.
Reason for revert: GMs and bots
Original change's description:
> Rename sampleVariablesSupport() to sampleMaskSupport()
>
> We have only implemented support for the sample mask. Renaming the cap
> to reflect that.
>
> Change-Id: I10b5923c7464093187336016963a8ac51ebd54f5
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249932
> Commit-Queue: Chris Dalton <csmartdalton@google.com>
> Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
TBR=egdaniel@google.com,csmartdalton@google.com,ethannicholas@google.com
Change-Id: I712169e86ee479bffd71d6665710f731d6c0e042
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/250179
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
Rewrite program instructions so that each value becomes available as
late as possible, just before it's used by another instruction. This
reorders blocks of instructions to reduce them number of temporary
registers in flight.
Take this example of the sort of program that we naturally write,
noting the registers needed as we progress down the right:
src = load32 ... (1)
sr = extract src ... (2)
sg = extract src ... (3)
sb = extract src ... (4)
sa = extract src ... (4, src dies)
dst = load32 ... (5)
dr = extract dst ... (6)
dg = extract dst ... (7)
db = extract dst ... (8)
da = extract dst ... (8, dst dies)
r = add sr dr (7, sr and dr die)
g = add sg dg (6, sg and dg die)
b = add sb db (5, sb and db die)
a = add sa da (4, sa and da die)
rg = pack r g ... (3, r and g die)
ba = pack b a ... (2, b and a die)
rgba = pack rg ba ... (1, rg and ba die)
store32 rgba ... (0, rgba dies)
That original ordering of the code needs 8 registers (perhaps with a
temporary 9th, but we'll ignore that here). This CL will rewrite the
program to something more like this by recursively issuing inputs only
once needed:
src = load32 ... (1)
sr = extract src ... (2)
dst = load32 ... (3)
dr = extract dst ... (4)
r = add sr dr (3, sr and dr die)
sg = extract src ... (4)
dg = extract dst ... (5)
g = add sg dg (4, sg and dg die)
rg = pack r g (3, r and g die)
sb = extract src ... (4)
db = extract dst ... (5)
b = add sb db (4, sb and db die)
sa = extract src ... (4, src dies)
da = extract dst ... (4, dst dies)
a = add sa da (3, sa and da die)
ba = pack b a (2, b and a die)
rgba = pack rg ba ... (1, rg and ba die)
store32 rgba ... (0)
That trims 3 registers off the example, just by reordering!
I've added the real version of this example to SkVMTest.cpp.
(Its 6th register comes from holding the 0xff byte mask used
by extract, in case you're curious).
I'll admit it's not exactly easy to work out how this reordering works
without a pen and paper or trial and error. I've tried to make the
implementation preserve the original program's order as much as makes
sense (i.e. when order is an otherwise arbitrary choice) to keep it
somewhat sane to follow.
This reordering naturally skips dead code, so pour one out for ☠️ .
We lose our cute dead code emoji marker, but on the other hand all code
downstream of Builder::done() can assume every instruction is live.
Change-Id: Iceffcd10fd7465eae51a39ef8eec7a7189766ba2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249999
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Herb Derby <herb@google.com>
We have only implemented support for the sample mask. Renaming the cap
to reflect that.
Change-Id: I10b5923c7464093187336016963a8ac51ebd54f5
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249932
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
This is a reland of b09131f476
Original change's description:
> Use common fallback code for drawing an SkGlyphRun
>
> This reorganizes the code so that Mask, SDFT and Paths
> share calling the fallback code. It also orders the
> different drawing methods from most frequent to least.
>
> Change-Id: I1bbfc92765682c6a20d59da34734f127a6d017cb
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249558
> Reviewed-by: Ben Wagner <bungeman@google.com>
> Commit-Queue: Herb Derby <herb@google.com>
Change-Id: I6977a4d03831329a85c2a8563c15382d7b9dd387
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249979
Commit-Queue: Herb Derby <herb@google.com>
Reviewed-by: Herb Derby <herb@google.com>
This reverts commit b74d5548a4.
Reason for revert: see if this fixes the android roll
Original change's description:
> Track device coordinate space as matrix
>
> This is a required step to be able to cleanly draw image filtered
> device layers with arbitrary matrices, instead of relying on
> SkMatrixImageFilter to apply the transformation.
>
> Bug: skia:9545
> Change-Id: I8d84679a281538875cf4a1b73565294fb7f89c86
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249076
> Commit-Queue: Michael Ludwig <michaelludwig@google.com>
> Reviewed-by: Mike Reed <reed@google.com>
TBR=robertphillips@google.com,reed@google.com,michaelludwig@google.com
# Not skipping CQ checks because original CL landed > 1 day ago.
Bug: skia:9545
Change-Id: Ie374a7500cfbff35cb0782beb863086e118a005a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249986
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
This CL begins pulling some of the work forward into onPrePrepare.
Change-Id: If049e0662db51b465b8b82aafebeef2323bddfd4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249802
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
This reverts commit 598741667a.
Reason for revert: segfaults on Pixel bots
Original change's description:
> Enable Programs (formerly GLPrograms) test for other APIs
>
> Bug: skia:9365
> Change-Id: I2eeac4e628425411b0a8f9ffa94ad61d58254b77
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249806
> Reviewed-by: Robert Phillips <robertphillips@google.com>
> Reviewed-by: Eric Boren <borenet@google.com>
> Commit-Queue: Jim Van Verth <jvanverth@google.com>
TBR=borenet@google.com,jvanverth@google.com,robertphillips@google.com
Change-Id: I286c637490bb8a21c0020a8935ce4c850b98f6b0
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:9365
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249978
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Uses SkISize instead of separate width/height variables in many places.
No functional change.
Change-Id: If87b2c57e43d810f0820c4e3c9ef8e6b8ebd10ba
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249886
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
This reverts commit b09131f476.
Reason for revert: May break android
Original change's description:
> Use common fallback code for drawing an SkGlyphRun
>
> This reorganizes the code so that Mask, SDFT and Paths
> share calling the fallback code. It also orders the
> different drawing methods from most frequent to least.
>
> Change-Id: I1bbfc92765682c6a20d59da34734f127a6d017cb
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249558
> Reviewed-by: Ben Wagner <bungeman@google.com>
> Commit-Queue: Herb Derby <herb@google.com>
TBR=bungeman@google.com,herb@google.com
Change-Id: Id56187503b0eb8a9bc666fbd5c8e0f07e1510c46
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249977
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Herb Derby <herb@google.com>
Bug: skia:9365
Change-Id: I2eeac4e628425411b0a8f9ffa94ad61d58254b77
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249806
Reviewed-by: Robert Phillips <robertphillips@google.com>
Reviewed-by: Eric Boren <borenet@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
One is an API fuzzer, the other is for deserializing.
Bug: skia:9548
Change-Id: I5923b8fb76f36ec09fca74d5ba82245a8ddb5938
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249776
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Kevin Lubick <kjlubick@google.com>
Bug: skia:9552
Change-Id: Ifa199048e6d38ccb28f055b77128971411203188
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249800
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Hal Canary <halcanary@google.com>
It's only used in asserts, and it's completely redundant with other
asserts based on fInvMatrix.
Change-Id: I150dc5b948e5703fff75bf857cabb173428b081f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249818
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
Use a texture view with a mipLevelCount of 1 when using a texture
as an attachment.
Dawn validation will fail if the view has more than one mip.
Change-Id: I6a3594dade9f65fa8e713d433797414c6ba8ecec
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249423
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
It's totally redundant with fInvMatrix.getType(),
and mostly used in asserts, where the SkMatrix
methods are way easier to read than type masks.
Change-Id: I970f4ebbc1aa87a287ce965add827cdc6a3be5ff
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249816
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Reed <reed@google.com>
None of these are used.
Change-Id: Ia8c0eb88db747da55fd03ff1632820a521ed1842
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249817
Auto-Submit: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
If the layer has a scale factor we need to allocate a larger framebuffer.
Otherwise we'll end up drawing to a fraction of the window.
Bug: skia:9554
Change-Id: I93d1e0dc7172ed10bb99ce45524561ad841f0101
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249803
Reviewed-by: Hal Canary <halcanary@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
This reorganizes the code so that Mask, SDFT and Paths
share calling the fallback code. It also orders the
different drawing methods from most frequent to least.
Change-Id: I1bbfc92765682c6a20d59da34734f127a6d017cb
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249558
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Herb Derby <herb@google.com>
Mark them as untexturable, and they'll be converted at a higher level.
Use SkRectMemcpy() for GrDawnTexture::upload().
This also fixes an issue with large texture uploads.
Change-Id: I5b7041cde324f204074193398ca9f8b5a5dbd744
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249417
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
This is a required step to be able to cleanly draw image filtered
device layers with arbitrary matrices, instead of relying on
SkMatrixImageFilter to apply the transformation.
Bug: skia:9545
Change-Id: I8d84679a281538875cf4a1b73565294fb7f89c86
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249076
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Mike Reed <reed@google.com>
This helps differentiate the SkCanvas' total CTM
(canvas transform matrix), from the device-specific transform matrix
that maps draws from local to device space.
Bug: 9545
Change-Id: I67f40d9b1bc92377bf0520fbc9245f1058e179e6
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249424
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Mike Reed <reed@google.com>
The purpose of this is to delay acquiring the next drawable in the
swapchain to avoid stalling and gain better parallel execution between
the CPU and GPU.
Change-Id: I40ef7672394fd00616de43685530d2feaf7cab2d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249005
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
GrStencilSettings requires that single-sided stencil be accessed via
frontAndBack(), not via front() or back().
Change-Id: Ib35e6187bda05e21c164685f7b726ce4849979fe
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249416
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
* Have prepareForDrawing leave empty glyphs in.
This allows the SkSourceGlyphBuffer to track indexes properly.
Rename prepareForDrawingRemoving empty to prepareForDrawing.
This is only temporary until the new unified drawing CL is submitted.
* Make the device fallback case properly support subpixel positioning.
* Add calls to SkDrawableGlyphBuffer to handle the glyph flow of the
prepareForDrawing system.
* Remove most of the old buffering system except for path handling.
Change-Id: I3e51c96ec041896e07dd4a8f580c207e857911f7
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249221
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Herb Derby <herb@google.com>
This reverts commit dfa1de9180.
Reason for revert: 1 Google3 Scuba diff. :/
Original change's description:
> impl. _clamp_8888 shaders using general mechanism
>
> This should result in roughly the same binary at
> the same speed but with less duplication of code.
>
> The idea is that we take all the runtime configurable
> fields and make it clear to the compiler that they're
> actually constants, and it propagates them through.
>
> Order of operations does change slightly up in the float
> code and some operations become FMAs so there are tiny
> invisible diffs when we don't hit lowp.
>
> Cq-Include-Trybots: luci.chromium.try:linux-blink-rel
> Change-Id: Ic9d44207bcad39d0cf96c0b55bd65fb61997194f
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249054
> Reviewed-by: Mike Reed <reed@google.com>
> Commit-Queue: Mike Klein <mtklein@google.com>
TBR=mtklein@google.com,reed@google.com
Change-Id: Ic549e8c6488dc6db1d71e34f5e06fcdf9410c8b6
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Cq-Include-Trybots: luci.chromium.try:linux-blink-rel
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249279
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
This should result in roughly the same binary at
the same speed but with less duplication of code.
The idea is that we take all the runtime configurable
fields and make it clear to the compiler that they're
actually constants, and it propagates them through.
Order of operations does change slightly up in the float
code and some operations become FMAs so there are tiny
invisible diffs when we don't hit lowp.
Cq-Include-Trybots: luci.chromium.try:linux-blink-rel
Change-Id: Ic9d44207bcad39d0cf96c0b55bd65fb61997194f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249054
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
This reverts commit 63a3873957.
Reason for revert: fail
Original change's description:
> Reduce inputs to GrProgramDesc::Build method(s)
>
> This moves the computation of the GrStencilSettings into GrProgramDesc::Build for the Vulkan backend
>
> This makes it clear that the stencilSettings are determined by the GrProgramInfo.
>
> Note that this does change some behavior in that the number of stencil bits is now determined (and set up for) the number requested not the number actually available on the attached stencil buffer at flush time.
>
> Bug: skia:9455
> Change-Id: Ia5fa4e30e34952c1a492b8d571094abf2291b2a4
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/248696
> Reviewed-by: Greg Daniel <egdaniel@google.com>
> Commit-Queue: Robert Phillips <robertphillips@google.com>
TBR=egdaniel@google.com,robertphillips@google.com
Change-Id: Ib0b337c19acea8000b5592f3dfeda181fd6ef157
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:9455
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249222
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
This moves the computation of the GrStencilSettings into GrProgramDesc::Build for the Vulkan backend
This makes it clear that the stencilSettings are determined by the GrProgramInfo.
Note that this does change some behavior in that the number of stencil bits is now determined (and set up for) the number requested not the number actually available on the attached stencil buffer at flush time.
Bug: skia:9455
Change-Id: Ia5fa4e30e34952c1a492b8d571094abf2291b2a4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/248696
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
This is not a substantive CL. It is just setting up for removing the
usage of the GrGpu in the creation of the GrProgramDesc.
Change-Id: Ic24204de256862e5e780626bde3a44f4d735c6e9
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249121
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
All instances were using this function with a nullptr transform
parameter. Remove the parameter and pass nullptr to CoreText call
instead.
Change-Id: Ic3b4d97a800758a45f1d771cbf9230e255775821
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/248936
Commit-Queue: Ben Wagner <bungeman@google.com>
Reviewed-by: Ben Wagner <bungeman@google.com>
This is a reland of 77c53087c1
Original change's description:
> Introduce SkGlyphSourceBuffer
>
> SkGlyphSourceBuffer provides a system for taking rejected glyphs from
> one glyph drawing stage, and turns them into the source for the next stage.
> It is rarely used, so it tries to conserve memory.
>
> Change-Id: I5275ffa3e804fc494eb2f5803e0cf2d148a755f7
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/248260
> Reviewed-by: Ben Wagner <bungeman@google.com>
> Commit-Queue: Herb Derby <herb@google.com>
Change-Id: Ib90508a21993b12c71ee86cbdeb51c4d4c2ec913
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249128
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Herb Derby <herb@google.com>