Commit Graph

32011 Commits

Author SHA1 Message Date
John Stiles
bab224e1c2 Prevent interface block members from using invalid names.
Interface blocks now guard against naming their member variables with
built-in type names like "float" or "bool".

Change-Id: Ia767542ace76fb8fbc2d50c81772b7f54b1bf973
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/489616
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2021-12-28 20:57:18 +00:00
John Stiles
f604efbeb4 Add support for anonymous function parameters in SkSL.
Anonymous function parameters are now automatically assigned a name,
"_skAnonymousParamN", where N is the parameter index.

Change-Id: I87adcd51ed025c76ae2b333317f21b523a4632b4
Bug: skia:12769
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/489538
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2021-12-28 20:47:05 +00:00
Leon Scroggins III
2cc656a89c ANDROIDFRAMEWORK_DEBUGF -> RENDERENGINE_ABORTF
Bug: b/206415266

We added ANDROIDFRAMEWORK_DEBUGF logs to help diagnose a crash, but the
bugreports start with the crash, which occurs after these logs. Change
the logs to ABORTs so the bugreports will contain this new information.

Only turn on the new abort statements when in RenderEngine. Add a new
define so that we can distinguish between the version of Skia used in
RenderEngine from the one in HWUI.

Change-Id: Ib096fc0b09741ec73ddedaa7cfdd21c5584d74cd
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/489476
Reviewed-by: Derek Sollenberger <djsollen@google.com>
Commit-Queue: Leon Scroggins <scroggo@google.com>
2021-12-28 20:22:11 +00:00
John Stiles
106776364d Prevent structs/interface-blocks from claiming builtin types.
Structs and interface blocks allow a trailing identifier which is added
to the symbol table. This identifier is now prohibited from
overlapping built-in types.

Change-Id: I33b9d6156a27ce017e6744a05979748c04a04767
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/489516
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2021-12-28 19:32:22 +00:00
John Stiles
1a746070ac Fix overzealous debug trace generation.
When the SkVM interpreter is operating in "stride=1" mode, we should
only look at the first lane of the trace/execution masks. The other
lanes are not being actively used, but the "index" opcode still fills
all the lanes, so it's entirely possible for the trace coordinate to
match in an unused lane.

Change-Id: I7f04f5c59431b3c50b4b072bc3ea4f52f8aa1a1b
Bug: skia:12752
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/488796
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2021-12-28 15:39:16 +00:00
Brian Osman
2f2977e19d SkSL: Add color transform intrinsics
These convert a color between the working color space and a known,
useful space (linear TF, sRGB gamut).

Bug: skia:10479
Change-Id: I3308e691beeaca5120ed0c2e30cf08661caa3684
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/481416
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
2021-12-28 14:05:49 +00:00
Michael Ludwig
bd05d877db Use clipped bounds for tessellation heuristic
The heuristic estimates the fill cost of the path based on its bounds.
The goal is to use the inner triangulator for large paths with a low
vertex count so that filling is simpler (no stencil), but triangulation
cost is manageable.

Considering the unclipped bounds means that very large path coordinates
can mislead the heuristic into thinking there is substantial fill cost,
when in fact that's always bounded by the clip dimensions.

Bug: skia:12764
Change-Id: I9d14bbdd2b35df121b6a55d4a278656bf16ae8eb
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/488528
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
2021-12-24 01:01:42 +00:00
Greg Daniel
c1bc0205d9 [graphite] Move GrResourceKey to skgpu::ResourceKey.
We'll want to reuse this key class for Graphite resources as well. There
is nothing special about these keys that is Ganesh specific.

Bug: skia:12754
Change-Id: I39fe5a9968156985865bccbfc4978583120ac2e8
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/487384
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
2021-12-23 22:55:19 +00:00
Michael Ludwig
c2b31fb04a Use unsigned int to track POD skip
Bug: chromium:1274323
Change-Id: I5d2a25c381ddfa21e56b630139fa61a0bdd8d4e0
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/488527
Reviewed-by: Kevin Lubick <kjlubick@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
2021-12-23 20:44:09 +00:00
Leon Scroggins III
a7cb849eca Be more lenient with RLE BMPs
Bug: b/198566237

If the RLE data exceeds the width of the image, treat it as an incorrect
value in the number of pixels in the run. This allows decoding images
that are supported by other decoders (e.g. Mac Preview).

Add a test image to skimage tests.

Change-Id: I10955cbde3e28accf670417fa154a536c0732e6a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/488296
Reviewed-by: Derek Sollenberger <djsollen@google.com>
Commit-Queue: Leon Scroggins <scroggo@google.com>
2021-12-23 20:32:52 +00:00
Lei Zhang
7f99e8d824 Remove SkM44.h include from SkImage.h.
It is not needed there. Add it to files that do need it instead.

Change-Id: I2fa32d423972c4c91c4fbfe5508bd50323201714
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/463556
Reviewed-by: Derek Sollenberger <djsollen@google.com>
Auto-Submit: Lei Zhang <thestig@chromium.org>
Commit-Queue: Greg Daniel <egdaniel@google.com>
2021-12-23 13:45:20 +00:00
John Stiles
87ced29082 Track line reachability on a step-by-step basis.
Since we know the entire flow of execution ahead of time, at any point
during trace playback, we can know if a line will be reached again or
not. We no longer highlight lines as reachable (or allow setting
breakpoints) if the line will not be reached again during trace
playback.

Change-Id: Iff563b13e2f6efb5d4f2ff37215f2ff4fb5945ed
Bug: skia:12666
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/486496
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2021-12-22 19:33:17 +00:00
Brian Salomon
bc35172ce9 custom mesh produces color in user defined color space and alpha type
Bug: skia:12720
Change-Id: Icece250cd2642e63f9e04f139dc951f34f82c2ad
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/487383
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
2021-12-22 16:22:44 +00:00
Greg Daniel
fe995770fe Remove all unused uniqueKey support from SkPromiseImageTexture.
At this point SkPromiseImageTexture is not much more than a wrapper
around a GrBackendTexture. The next steps would be to switch to just
directly using GrBackendTexture in the fulfill procs and deleting
SkPromiseImageTexture.

Bug: skia:12758
Change-Id: Ic0526b869a0730c25b41b46fd6523604dedaba40
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/487382
Auto-Submit: Greg Daniel <egdaniel@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
2021-12-21 21:32:43 +00:00
Brian Salomon
12532a3a8f Add indexed support to custom mesh drawing
Bug: skia:12720
Change-Id: Ia40f2325e565d2dfbbac285b45eec6efc2944532
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/486896
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
2021-12-21 19:51:07 +00:00
Brian Salomon
2c3c3ca952 Fix range loop temporary warning in DrawCustomMeshOp
Bug: skia:12720
Change-Id: I50e52ac555465811f46ff8acdf27151b216bb991
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/487376
Commit-Queue: Brian Salomon <bsalomon@google.com>
Auto-Submit: Brian Salomon <bsalomon@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
2021-12-21 17:53:19 +00:00
Brian Osman
6ce203bf4c Copy dest color child index in GrSkSLFP copy constructor
Change-Id: I16c763a0e2634c9c408c25dbf26caf3c28b2ba79
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/487226
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
2021-12-21 17:07:19 +00:00
Julia Lavrova
20187a27b3 Reland "SkVM visualizer, version 0.1"
This reverts commit 372a36de75.

Relanding the change

Original change's description:
> Revert "SkVM visualizer, version 0.1"
>
> This reverts commit bf57843b01.
>
> Build break
>
> Original change's description:
> > SkVM visualizer, version 0.1
> >
> > Simplified - "no static instructions"
> > Added to skslc with .cpp -> .html
> >
> > Change-Id: I0b56ea0480f868ca4182acb7a23c03acf7f57519
> > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/473659
> > Reviewed-by: John Stiles <johnstiles@google.com>
> > Commit-Queue: Julia Lavrova <jlavrova@google.com>
>
> Change-Id: I938bbf7bb650d1636a0d9bd19e455b455a49ef27
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/487096
> Auto-Submit: Julia Lavrova <jlavrova@google.com>
> Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>

Change-Id: I15b5f6630de43138da2dc72c4fe708499bed63c3
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/487216
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Julia Lavrova <jlavrova@google.com>
2021-12-21 16:37:20 +00:00
Brian Salomon
380d1aedf9 Reland "Start on custom mesh API"
This is a reland of e1e1c03229

Original change's description:
> Start on custom mesh API
>
> Bug: skia:12720
> Change-Id: I8ed0555f1c5b8b0e97e73a657635dac2c0df0ccf
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/482457
> Reviewed-by: Brian Osman <brianosman@google.com>
> Commit-Queue: Brian Salomon <bsalomon@google.com>

Bug: skia:12720
Change-Id: I5c54f37949d8bd45ea606264c439912b65158b79
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/487220
Commit-Queue: Brian Salomon <bsalomon@google.com>
Auto-Submit: Brian Salomon <bsalomon@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
2021-12-21 16:08:49 +00:00
Brian Salomon
a88a627316 Revert "Start on custom mesh API"
This reverts commit e1e1c03229.

Reason for revert: broken w/ colorspace xform

Original change's description:
> Start on custom mesh API
>
> Bug: skia:12720
> Change-Id: I8ed0555f1c5b8b0e97e73a657635dac2c0df0ccf
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/482457
> Reviewed-by: Brian Osman <brianosman@google.com>
> Commit-Queue: Brian Salomon <bsalomon@google.com>

Bug: skia:12720
Change-Id: I897b84d6483da8c4bcf8a709e08c26d1dee65f00
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/487219
Auto-Submit: Brian Salomon <bsalomon@google.com>
Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
2021-12-21 15:26:10 +00:00
Brian Salomon
e1e1c03229 Start on custom mesh API
Bug: skia:12720
Change-Id: I8ed0555f1c5b8b0e97e73a657635dac2c0df0ccf
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/482457
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
2021-12-21 14:37:59 +00:00
Julia Lavrova
372a36de75 Revert "SkVM visualizer, version 0.1"
This reverts commit bf57843b01.

Build break

Original change's description:
> SkVM visualizer, version 0.1
>
> Simplified - "no static instructions"
> Added to skslc with .cpp -> .html
>
> Change-Id: I0b56ea0480f868ca4182acb7a23c03acf7f57519
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/473659
> Reviewed-by: John Stiles <johnstiles@google.com>
> Commit-Queue: Julia Lavrova <jlavrova@google.com>

Change-Id: I938bbf7bb650d1636a0d9bd19e455b455a49ef27
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/487096
Auto-Submit: Julia Lavrova <jlavrova@google.com>
Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
2021-12-21 02:54:12 +00:00
Julia Lavrova
bf57843b01 SkVM visualizer, version 0.1
Simplified - "no static instructions"
Added to skslc with .cpp -> .html

Change-Id: I0b56ea0480f868ca4182acb7a23c03acf7f57519
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/473659
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Julia Lavrova <jlavrova@google.com>
2021-12-21 00:59:52 +00:00
Greg Daniel
cdeb092655 [graphite] Move GrProcessorKeyBuilder to generic skgpu::KeyBuilder class.
This also allows the KeyBuilder class to be used in Graphite. In Graphite
I plan to use it for other keys besides building up shaders/processors
so I dropped that from the name. There was nothing special abouts its
implementation that made it specific to Processors anyways.

Bug: skia:12754
Change-Id: I1b25730b061f9342b61e3b2e4ac43328b8074d59
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/486897
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
2021-12-20 20:41:17 +00:00
Brian Salomon
dd9ef457d9 Reland "Add support for explicit attribute offsets and strides."
This is a reland of 6927ab9311

Original change's description:
> Add support for explicit attribute offsets and strides.
>
> Previously attribute offsets were always computed based on their
> position in an attribute array and the stride was determined
> by the offset and size of the last attribute.
>
> Now a GP has the option to create attributes with explicit offsets
> and specify an explicit vertex stride. All attributes must either
> be implicit or explicit (enforced by assert).
>
> GrGeometryProcessor::AttributeSet is now responsible for handling
> implicitly determined attribute offsets and strides. The backends
> no longer compute them.
>
> Bug: skia:12720
> Change-Id: I0211673dc70d4797c2d66b2555d8f5fb430be056
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/484736
> Reviewed-by: Greg Daniel <egdaniel@google.com>
> Reviewed-by: Michael Ludwig <michaelludwig@google.com>
> Commit-Queue: Brian Salomon <bsalomon@google.com>

Bug: skia:12720
Change-Id: Ic4975b5b2e52f2d8213154da0e585eca6dfdd78d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/486098
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
2021-12-20 14:50:20 +00:00
Leon Scroggins III
ec481097c2 Make it always possible to seek in SkWuffsCodec
Bug: b/195936927

On Android, we may need to be able to seek the stream, but the input may
not be seekable. Copy in SkWuffsCodec as needed.

Change-Id: I7d5742e478532943a90400267175da80411cacd9
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/485636
Commit-Queue: Leon Scroggins <scroggo@google.com>
Auto-Submit: Leon Scroggins <scroggo@google.com>
Reviewed-by: Kevin Lubick <kjlubick@google.com>
Commit-Queue: Kevin Lubick <kjlubick@google.com>
2021-12-20 13:32:56 +00:00
Fabrice de Gans
20981e308a [fuchsia] Implement SkFontMgr::onMakeFromData()
The implementation is similar to other platforms.

Bug: chromium:1260529
Change-Id: I61749796fe822c4d1f73a6fab4276633b12185ae
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/484616
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
2021-12-16 23:05:26 +00:00
Herb Derby
9a87395aed add max dimension to the glyphs digest
Store the max glyph dimension in the digest for fast scaling
calculations for drawing of last resort.

Bug: skia:12744

Change-Id: I453dac4ab855abfd8a107f6ee24d1fd308cb2bb4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/485793
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Herb Derby <herb@google.com>
2021-12-16 21:58:04 +00:00
John Stiles
44a8392620 Add breakpoint support in SkSL debugger.
Line numbers were previously Text. They are now SmallButtons; clicking
them sets and clears breakpoints. The set of active breakpoints is
stored in an unordered_set of line numbers. Breakpoints are visualized
by setting the color of the SmallButton controls to red.

We now also have "Reset" (start over) and "Run to Breakpoint" buttons.

http://screen/8rtenW2vszxDgCp

Change-Id: I30a79bb09811e1d8a4e4e8535cbe62020f20f111
Bug: skia:12747
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/485861
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
2021-12-16 20:46:56 +00:00
Brian Salomon
38d5328926 Revert "Add support for explicit attribute offsets and strides."
This reverts commit 6927ab9311.

Reason for revert: breaking roll?

Original change's description:
> Add support for explicit attribute offsets and strides.
>
> Previously attribute offsets were always computed based on their
> position in an attribute array and the stride was determined
> by the offset and size of the last attribute.
>
> Now a GP has the option to create attributes with explicit offsets
> and specify an explicit vertex stride. All attributes must either
> be implicit or explicit (enforced by assert).
>
> GrGeometryProcessor::AttributeSet is now responsible for handling
> implicitly determined attribute offsets and strides. The backends
> no longer compute them.
>
> Bug: skia:12720
> Change-Id: I0211673dc70d4797c2d66b2555d8f5fb430be056
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/484736
> Reviewed-by: Greg Daniel <egdaniel@google.com>
> Reviewed-by: Michael Ludwig <michaelludwig@google.com>
> Commit-Queue: Brian Salomon <bsalomon@google.com>

Bug: skia:12720
Change-Id: I938bc3776d598f0906465eb2677208c79676642f
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/486016
Auto-Submit: Brian Salomon <bsalomon@google.com>
Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
2021-12-16 20:00:18 +00:00
John Stiles
be4ef31f9e Honor breakpoints while stepping over/out.
Users expect that breakpoints will be hit even when stepping over or
stepping out. Rather than have one step call which honors breakpoints,
now the trace holds an unordered_set of breakpoints which all step calls
will honor.

Change-Id: I4055fc008e8cce4c413f357f375ae4038a7bd2a9
Bug: skia:12747
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/485918
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
2021-12-16 19:37:25 +00:00
John Stiles
abed06bb61 Implement 'stepToBreakpoint' in Trace player.
This allows the user to run up to a specified line (or until execution
is complete).

Change-Id: Ied34798d2df1b4a9e1d723c8d2eff3d579ca9b2d
Bug: skia:12747
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/485860
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
2021-12-16 18:31:02 +00:00
Maksim Ivanov
c47bdebda1 Fix use-after-move in DSLVarBase
Fix a use-after-move issue in DSLVarBase, as found by clang-tidy:

  sksl/dsl/DSLVar.cpp:49:
  'type' used after it was moved
  sksl/dsl/DSLVar.cpp:40:
  move occurred here

Bug: chromium:1122844
Change-Id: Ibb4cff71b3e27e1490baa1ae06f853711a84bbc4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/484180
Auto-Submit: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
2021-12-16 16:09:25 +00:00
Brian Salomon
6927ab9311 Add support for explicit attribute offsets and strides.
Previously attribute offsets were always computed based on their
position in an attribute array and the stride was determined
by the offset and size of the last attribute.

Now a GP has the option to create attributes with explicit offsets
and specify an explicit vertex stride. All attributes must either
be implicit or explicit (enforced by assert).

GrGeometryProcessor::AttributeSet is now responsible for handling
implicitly determined attribute offsets and strides. The backends
no longer compute them.

Bug: skia:12720
Change-Id: I0211673dc70d4797c2d66b2555d8f5fb430be056
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/484736
Reviewed-by: Greg Daniel <egdaniel@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
2021-12-16 14:38:12 +00:00
John Stiles
eff367ac83 Highlight reached/unreached lines differently in Debugger.
This is useful to know because breakpoints can only meaningfully be set
on a line of code which is reachable. In other words, we know the
entire execution path ahead of time, so we can tell you that some
branches aren't actually taken without needing to set a breakpoint at
all.

Change-Id: I72b2cddcf92fd6f75ea12d302230bae42b7112bc
Bug: skia:12666
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/485218
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
2021-12-15 20:08:06 +00:00
Herb Derby
ffc6574804 better handling of atlas size constraints
The problem is using the dimensions of the path glyphs to
approximate what will happen when we scale things to fit in
the atlas constraints. The path dimensions do necessarily scale to
represent the RGB dimensions of the emoji.

Round the max dimension up to provide a better margin of error.

The better solution will be to calculate the maxDimension in
MakeMask instead of MakePath, but this is a bigger engineering
exercise.

Bug: chromium:1280180

Change-Id: I994ed2b3461677890418d0472f31bd1b2651b037
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/485216
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Herb Derby <herb@google.com>
2021-12-15 19:55:07 +00:00
John Stiles
b713d81f51 Hide variables which fall out-of-scope in SkSL debugger.
We now track each slot's scope depth when it is written, and when scopes
are closed, we remove variables from display which fall out of scope.

Note that we DON'T have a specific trace-op dedicated to setting a
variable's stack depth when it is first declared. This is okay because
the SkVM code generation always stores a zero to a variable's slots as
soon as the variable is declared. This will consistently initialize its
depth to the depth of its initial declaration.

Change-Id: I68f76dfe2930fcd415ba635206cce3d0b94d1aac
Bug: skia:12741
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/484564
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
2021-12-15 19:09:59 +00:00
Brian Osman
5ef3f98ead Do some renaming of "intrinsic" throughout SkSL
Trying to land on more consistent terminology:
- builtin: Any symbol or program element that's declared in the one of
           the modules/pre-includes.
- intrinsic: The specific functions that are declared, but not defined
             in the modules. These are implemented by the generators.
- builtin functions: Use this to refer to functions that are both
                     declared and defined in the modules. (eg unpremul)

Note that Module is still a term, and that may go away as well. This was
focused on reducing overloaded terminology around the elements
themselves (and not referring to things like "unpremul" as an intrinsic,
in the case of "referencedIntrinsics").

Change-Id: I2b55c4628e9263a7f7a4faad005a653592e9724c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/484677
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
2021-12-15 18:47:03 +00:00
Greg Daniel
fccec5f0e9 When loading resolve in vulkan make to we give color attachment read access.
Bug: chromium:1280232
Change-Id: I66c5d36a0dfeac2d2a128eb8cf2798f0c02fbc86
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/484999
Commit-Queue: Greg Daniel <egdaniel@google.com>
Auto-Submit: Greg Daniel <egdaniel@google.com>
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
2021-12-15 18:01:26 +00:00
Herb Derby
5b9ecb9d8f Remove SkRemoteGlyphCache.h
SkRemoteGlyphCache has been moved to include/private/chromium, and
renamed SkChromeRemoteGlyphCache. As of Chromium CL:
https://chromium-review.googlesource.com/c/chromium/src/+/3335057,
src/core/SkRemoteGlyphCache.h is no longer used, and can be removed.

Change-Id: I5546c55d8edc41875fcfce05b33618a9cf6456e8
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/484339
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Herb Derby <herb@google.com>
2021-12-15 15:04:07 +00:00
Brian Osman
335a555b28 Clean up intrinsics slightly
We want to distinguish between actual intrinsics (functions declared in
the SkSL includes, but defined by the generators), and builtin functions
(declared and defined in the includes).

This removes unpremul from the intrinsic list (it's a builtin function,
not an intrinsic), and adds an assert that no intrinsic is defined.

Change-Id: I7b4f0cefd98364fe71aa570357f0baed3f5887ff
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/484441
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Auto-Submit: Brian Osman <brianosman@google.com>
2021-12-15 14:59:25 +00:00
John Stiles
71f7880bb6 Emit trace_scope ops from SkVM code generation.
These will give the debugger enough information to discard variables as
they fall out of scope.

Change-Id: Ia400e82a3ca9cf0a51a72d819f897d346979226c
Bug: skia:12741
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/484556
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2021-12-15 01:05:34 +00:00
John Stiles
b2284b2b82 Factor out mergeMasks into a helper method.
Change-Id: Iacbfa9c461669733938422d151820da37f78cb6c
Bug: skia:12741
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/484678
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
2021-12-14 22:58:56 +00:00
Brian Osman
fde20db7ca Rename SkSL's 2D cross product builtin function
Note that the 2D cross product isn't defined. There are at least two
possible interpretations of what that might mean. This name makes it
clearer that we're asking for the length of the resulting vector, if
we computed the 3D cross product (assuming Z == 0 for both vectors).

It also eliminates name overlap between builtin functions and actual
intrinsics.

Change-Id: I24e8bc0ab2ec91aaace20f0dd3e8565c10bd44a0
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/484440
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
2021-12-14 22:00:26 +00:00
John Stiles
09adf0bfc3 Add new SkVM trace op 'trace_scope' to track SkSL scope depth.
This CL adds the trace op and tests the builder commands, but it is not
yet hooked up to the SkVM code generator or debugger.

Change-Id: Iaa64293dfd0973e299eb480cb2b43672b0886c32
Bug: skia:12741
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/484439
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
2021-12-14 21:56:41 +00:00
Greg Daniel
749cbeb814 Remove workaround for not executing no op discard OpsTask.
This should fix the Vulkan validation warnings about have a render pass
with a 0 area bounds.

There are times in Skia (when not doing reduced op list splitting),
where we get a new offscreen surface, discard it, then get a second
offscreen before submitting any draws to the first yet. This causes us to
have an OpsTask for the first with a discard load but no ops. When we
get back to this first surface to add real ops it will have a load load.
Correctness wise we could drop the first OpsTask since it doesn't have
any affect (what the validation warning in this bug is referring to).

This original workaround was there to appease a different vulkan
validation warning about loading unitialized memory at the start of a
render pass. If we drop the discard then the validation would complain
the load (on the second OpsTask) was happening on unitialized memory.
However, with the workaround removed I no longer am getting such a
warning both with and without reducedOpListSplitting. So either we are
now avoiding this case via something else higher up or maybe this warning
was removed from the validation. Or I just can't get a good test case
for it. It does not repro running Skia gm or tests, or running chromes
test case for the 0 area render pass bounds.

Bug: chromium:1279794
Change-Id: I11ad5ce4e0000da74805a4cd9a0a9207d5adf60a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/484562
Auto-Submit: Greg Daniel <egdaniel@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
2021-12-14 21:49:36 +00:00
Julia Lavrova
f74c7893fc Introduce SkVM Op::duplicate to localize visualization code
Change-Id: Ic343b1dcddb74d31c768afa67ab78955af418c9d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/483603
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Julia Lavrova <jlavrova@google.com>
2021-12-14 18:51:41 +00:00
Derek Sollenberger
04a9672c0a Add Android Framework specific logging to SkSurface::MakeFromBackendTexture
This is an attempt to get more diagnostic information when an SkSurface fails
to be created.

Bug: b/206415266
Change-Id: I536417e1a6d1f0f99e5e9e41e2fee43f7aa9b464
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/484338
Reviewed-by: Leon Scroggins <scroggo@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Derek Sollenberger <djsollen@google.com>
2021-12-14 17:04:22 +00:00
Maksim Ivanov
16d3cc04cc Fix use-after-move in GrVkRenderTarget
Fix a use-after-move issue in GrVkRenderTarget, as found by clang-tidy:

  gpu/vk/GrVkRenderTarget.cpp:67:
  'resolveAttachment' used after it was moved
  gpu/vk/GrVkRenderTarget.cpp:62:
  move occurred here

Bug: chromium:1122844
Change-Id: I4f65784cc1d8e39fb60ce3439e316a9dc399eca8
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/484178
Auto-Submit: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
2021-12-14 16:49:08 +00:00
Jim Van Verth
5120749c9d Add missing comment.
Meant to add this as part of
https://skia-review.googlesource.com/c/skia/+/483596

Change-Id: I2d5ab327b786d74ad5c96eaad5dde79676fce1ca
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/484340
Commit-Queue: Jim Van Verth <jvanverth@google.com>
Auto-Submit: Jim Van Verth <jvanverth@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
2021-12-14 16:08:01 +00:00
John Stiles
80d2a50d4b Move newly-updated variables to the top of the Variable list.
Previously, the variable pane listed variables in slot order, which was
not very helpful (other than usually mapping to a top-to-bottom order in
the original source code). Now, the variable pane sorts variables to the
top when they are modified, and maintains their relative order
throughout execution. This is much easier to follow.

http://screen/C9odSHV4asFSLZH

Change-Id: Id86adf745207451a38a4dc46756f316e8d86bf81
Bug: skia:12666
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/483958
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
2021-12-14 15:53:14 +00:00
Maksim Ivanov
e3c0d7356c Fix use-after-move in GrResourceAllocator
Fix a use-after-move issue in GrResourceAllocator::Register, as found by
clang-tidy:

  gpu/GrResourceAllocator.cpp:116:
  'scratchKey' used after it was moved
  gpu/GrResourceAllocator.cpp:111:
  move occurred here

Bug: chromium:1122844
Change-Id: I8f00c6c82ae25a12045b6c101c608b52b90a51d1
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/484177
Auto-Submit: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
2021-12-14 14:24:19 +00:00
Maksim Ivanov
ecbad28361 Fix use-after-move in GrPixmapBase
Fix a use-after-move issue in GrPixmapBase, as found by clang-tidy:

  gpu/GrPixmap.h:65:
  'info' used after it was moved
  gpu/GrPixmap.h:64:
  move occurred here

Bug: chromium:1122844
Change-Id: I7403805e3e63592119b66c1e5840bc48d5e33832
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/484176
Auto-Submit: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
2021-12-14 14:04:00 +00:00
Maksim Ivanov
2ca96704ee Fix use-after-move in SkPDFDocument
Fix a use-after-move issue in SkPDFDocument, as found by clang-tidy:

  pdf/SkPDFDocument.cpp:222:
  'metadata' used after it was moved
  pdf/SkPDFDocument.cpp:213:
  move occurred here

Bug: chromium:1122844
Change-Id: Ibcc09353af431f1389a2c80a3b94acb345b4f809
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/484179
Auto-Submit: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Herb Derby <herb@google.com>
2021-12-14 04:51:47 +00:00
John Stiles
0745d19ae3 Hide function return values after a step.
Previously, return values like `[func].result` would stick around in the
Variables table indefinitely. This felt very counterintuitive. Now they
only appear for one step, then vanish.

Change-Id: Iedfc7d2ddf136111005b26aaefb380ffc6281d05
Bug: skia:12666
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/483605
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
2021-12-13 22:14:35 +00:00
John Stiles
0385de0f88 Add helper method to get the human-readable value of a slot.
We already had this logic in SkVMDebugTrace::dump; it just needed to be
factored out so that it could be accessed directly.

Change-Id: Ib497b82a7722b8ac2285de74f1937379c2f9a51b
Bug: skia:12666
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/483600
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2021-12-13 19:57:28 +00:00
Jim Van Verth
c46b4d0a48 Add divide-by-zero check to GrGenerateDistanceFieldFromPath
Bug: oss-fuzz:32768
Change-Id: I9273ba1242a0f61dc5b26b2651400b4b46dd3992
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/483596
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
2021-12-13 19:54:28 +00:00
John Stiles
9247feb52c Report slot updates using a dirty mask.
By tracking slot writes using a dirty mask, and reporting these in the
VariableData, we will be able to highlight assigned-to variables in the
debugger.

Change-Id: I93a767095c9c1b6dedc55a08424649f83aa1c960
Bug: skia:12666
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/483598
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
2021-12-13 19:26:43 +00:00
Jim Van Verth
e4bccab4ac Fix divide-by-zero in AAConvexTessellator.
Bug: oss-fuzz:32385
Change-Id: I048e5a55430c0c968b858b0ac25d077a35332e02
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/483519
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
2021-12-13 19:10:34 +00:00
Herb Derby
8dc9a337ab rename GrTextBlobCache to GrTextBlobRedrawCoordinator
Change-Id: Ib1ea2936f7a9431bc62c04b1931cf6da2c213b36
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/483496
Reviewed-by: Robert Phillips <robertphillips@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Herb Derby <herb@google.com>
2021-12-13 17:38:00 +00:00
John Stiles
fbb743377a Add method to get the suffix for a trace's slot.
We already had this logic in SkVMDebugTrace::dump; it just needed to be
factored out so that it could be accessed directly.

Change-Id: Idd6c92d23ab4dddc60fdc3c7b1693a0d89b1c992
Bug: skia:12666
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/483517
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2021-12-13 16:54:33 +00:00
John Stiles
5d3060ed94 Add support for stepping out from a function.
Stepping out is extremely similar to stepping-over, so this was mostly
working already.

Change-Id: Ib1c1ba96b45a732500e72b6da4cbfe41a1f75307
Bug: skia:12666
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/483196
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2021-12-13 16:43:49 +00:00
Jim Van Verth
db9f95c888 Move ShaderUtils out of Ganesh.
This will allow us to use ShaderUtils in both Ganesh and Graphite.

Change-Id: I78e34c4eb969a0d827c459d7fb945d17fdc22efa
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/482696
Reviewed-by: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
2021-12-10 23:10:25 +00:00
John Stiles
5d5f24e814 Move SkVMDebugTrace into src/sksl/tracing.
Change-Id: Id4fc455f0eb23aa8d9b6f5474be7f6eba71c48de
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/482698
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
2021-12-10 21:58:01 +00:00
John Stiles
f3b4617828 Create SkVMDebugTrace player class.
This class is responsible for interpreting a debug trace and allowing it
to be stepped through, like a debugger. It tracks the current line
number, call stack, slot values, and associates slots with stack frames.
It supports stepping forward or stepping over (i.e., stepping to the
next line in the current function, hiding function calls).

Change-Id: I2b7d90c3b38b0006bebdfbf65a7bf678d5227d56
Bug: skia:12666
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/482460
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
2021-12-10 21:57:58 +00:00
Herb Derby
c279e7640b add bilerp atlas support flag
Move the compile-time flag SK_EXPERIMENTAL_ADD_ATLAS_PADDING,
to a runtime flag in GrContextOptions.

Bug: chromium:1275890

Change-Id: I7e051cd4834ac44958b1431976535519e8bdaa3e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/482416
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Herb Derby <herb@google.com>
2021-12-10 20:33:57 +00:00
Herb Derby
0f2390f7fb move SkRemoteGlyphCache.h to private
Chromium has been using the remote glyph cache for a few years now.
It's time to give it a proper home.

This is an intermediate CL. The old .h file includes the new .h file.
After I change the include paths in Chromium, I will delete the old
file.

Change-Id: Iaf00c46aa0698326c0bdec9a0eed218bcc3e334e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/482700
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Herb Derby <herb@google.com>
2021-12-10 20:20:56 +00:00
Herb Derby
4d35c0d31d relocate GrTextBlob creation to GrTextBlobCache
Move the GrTextBlob creation code to GrTextBlobCache allowing
more cache calls to be private.

Change-Id: I9ecb732c066ef7dadf8bc478a8b4d3dea8c292a9
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/482697
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Herb Derby <herb@google.com>
2021-12-10 18:56:35 +00:00
John Stiles
b1a97caf71 Revert "Trace function return values after function-exit."
This reverts commit 85cc1bece7.

Reason for revert: ends up not being useful after all

Original change's description:
> Trace function return values after function-exit.
>
> This will allow function return values to be easily seen when stepping
> "over." This has the unexpected side benefit of generating slightly
> fewer ops when a function has unoptimizable conditional returns.
>
> Change-Id: I48d23de635d3caaddff91aa595593d0371dfcdcb
> Bug: skia:12708
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/481076
> Reviewed-by: Brian Osman <brianosman@google.com>
> Commit-Queue: John Stiles <johnstiles@google.com>
> Auto-Submit: John Stiles <johnstiles@google.com>

Bug: skia:12708
Change-Id: I61ebb175b60d2060f6ad21b170238b37557b80be
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/482458
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2021-12-10 18:06:04 +00:00
Ben Wagner
15f186d277 GrMemoryPool always standard_layout for offsetof
GrMemoryPool in debug has extra fields and so wants to make use of
offsetof. The offsetof can only be taken on standard layout objects.
However, in debug std::unique_ptr may not be standard layout, which
makes SkAutoTArray not standard layout, which makes SkTHashTable not
standard layout, which makes SkTHashSet not standard layout, which makes
GrMemoryPool not standard layout, producing a compile error.

Since this is debug only, move the debug only fields behind a pointer
(which unfortunately cannot be a std::unique_ptr, since it may not be
standard layout). This allows building with recent libc++ headers and
clang.

Change-Id: Id9d312d7939808399d0796428de218d30263c26f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/482004
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
2021-12-10 16:11:35 +00:00
Michael Ludwig
b05732e102 Rewind farther on topology intersect mismatch
Also fixes recursion end point update in recursive_edge_intersect, which
was causing us to search in the wrong area of the lines and falsely
report no intersection when there should have been one (which is then
detected by the topology check in intersectEdgePair() and more less
accurately corrected for).

Bug: chromium:1245359
Change-Id: I1d21c934a23c9b99c3767849ee19bc2f6c551d3f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/482456
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
2021-12-10 15:46:53 +00:00
John Stiles
83b5237b53 Fix assertion when debug-tracing a void-return function.
The debug-slot code didn't expect to encounter a void type.

Change-Id: Ied452b51e1cf90a0c0bc24770f82e711105b8e82
Bug: skia:12708
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/482461
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2021-12-10 14:39:05 +00:00
John Stiles
c962042ed2 Add field to SkVMSlotInfo indicating function return values.
Function return values exist at the boundary between stack frames and
will need slightly special treatment by the debugger.

Change-Id: I017b5713919f507074f072d040332325307c2e81
Bug: skia:12666
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/482459
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
2021-12-10 14:10:57 +00:00
Brian Osman
351148ff38 Create SkVMCallbacks, to bundle the child-sampling routines
I'm about to add more callbacks, and the collection of std::function was
getting unmaintainable. This mirrors the pipeline-stage generator, and
also is structured to share more code among the different runtime effect
objects.

Change-Id: Ib82042781051471a6743401db45ce24540bfa253
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/481684
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
2021-12-10 13:53:22 +00:00
Herb Derby
3317b1b23e consolidate processing for sub runs multiple formats
Change-Id: Ief27a4a8051485bed20e1a5312457e778cb28171
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/482007
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Herb Derby <herb@google.com>
2021-12-09 22:45:47 +00:00
Lei Zhang
e4f148f09f Remove unneeded include from SkFloatingPoint.h.
The _POSIX_VERSION check was initially added in
https://skia.googlesource.com/skia/+/d3fbd34099, and its usage was
removed in https://skia.googlesource.com/skia/+/d7dc76f7e9. Since that's
long gone, remove the include associated with that. Then do IWYU to fix
the build.

Change-Id: Ic256d64a2e02bd8ada03513bb04b0e733576c474
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/482256
Auto-Submit: Lei Zhang <thestig@chromium.org>
Reviewed-by: Ben Wagner <bungeman@google.com>
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Herb Derby <herb@google.com>
2021-12-09 22:45:23 +00:00
Arman Uguray
b58bab1fed [skslc] Support HLSL output
- skslc can now generate HLSL using spirv-cross if invokved with an output
file with the ".hlsl" extension
- The SkSL::SPIRVtoHLSL function used to be conditionally compiled based
on the SK_USE_DIRECT3D define, which gates D3D support for the entire
gpu backend. This function is now conditionally compiled using a new,
more narrowly scoped define, which is always enabled when building
skslc.

Bug: skia:12691
Test: Run:
Change-Id: I6967c26ab28954ec09e1c62513187c8986135290
      1. ./skslc ../../resources/sksl/spirv/Ossfuzz35916.sksl TEST.hlsl
      2. ./dxc -T ps_6_7 TEST.hlsl
      Ensure that 1 runs without any errors and 2 does not detect any
      issues in the hlsl.
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/482257
Auto-Submit: Arman Uguray <armansito@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
2021-12-09 21:07:30 +00:00
Julia Lavrova
57043197c1 Merging the logic for binary and compare
I was wrong and @johnstiles was right. It does work...

Change-Id: Id51d7732a44db996e078337a9b8e4136353ac922
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/482009
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Julia Lavrova <jlavrova@google.com>
2021-12-09 21:06:25 +00:00
Leon Scroggins III
30d5eea3dc Treat AHARDWAREBUFFER_FORMAT_R8_UNORM as kAlpha_8_SkColorType
Bug: b/193170859
Bug: b/209497983

Change-Id: I51d38cfcd89623e618e1fa34a1f87c1dd777b7f5
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/479737
Reviewed-by: Derek Sollenberger <djsollen@google.com>
Commit-Queue: Leon Scroggins <scroggo@google.com>
2021-12-09 20:52:31 +00:00
Brian Osman
3695bdb587 Refactor SkMatrixProvider slightly
There was only one virtual method, so switch that to a bool stored in
the base class. The derived types exist as hints for the reader, and an
easy way to adjust how the new localToDevice is constructed.

With this change, we don't need SkSimpleMatrixProvider. SkMatrixProvider
is concrete, so we can use it directly. SkOverrideDeviceMatrixProvider
no longer needs the original provider for anything, so remove that
parameter. It now exists solely to inhibit the hitsPixelCenters flag.

Fix a few spots (SkParticleBinding, some sites in SkRuntimeEffect) where
we used SkSimpleMatrixProvider, even though the local coordinates being
passed did not obey the hits-pixel-centers constraints.

Most importantly, document how localToDeviceHitsPixelCenters works.

Change-Id: Ibe9060bac0822d0edf52a507d390bd198d8e6dbd
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/482176
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
2021-12-09 20:10:58 +00:00
Dominik Röttsches
08c63ec5a5 Use Skia instead of FreeType color type in COLR rasterization
Preparation for being able to change the palette to a custom palette.
No functional change.

Bug: skia:12730
Cq-Include-Trybots: luci.skia.skia.primary:Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android_NativeFonts
Change-Id: Ife068c50ac9f385090637f9f73beb2baec76a4b0
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/482096
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
2021-12-09 19:34:04 +00:00
Brian Osman
ca916f705f Remove canvas marker stack, marked matrices, etc...
This entire API existed, but was unused (no longer connected to
drawVertices or runtime effects).

In theory, we could further simplify some of the matrix providers, but
more importantly - I have serious doubts about the correctness of
localToDeviceHitsPixelsCenters for most of them.

Change-Id: If5af182015dd96e5ed3353a117223e8dbbe17097
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/481683
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
2021-12-09 16:22:16 +00:00
John Stiles
bc5b9f6b53 Migrate SK_strcasecmp to SkStringUtils.h.
This will let us use it elsewhere.

Change-Id: I39a5dc0651bee8fbd5fa7302e34a3a79f7efbd3d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/481736
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
2021-12-08 22:52:04 +00:00
John Stiles
0ee3e0c959 Fix source repetition in debug traces.
This fix appeared in prior CL patchsets, but got lost through rebases
and CL splits.

Change-Id: I1befff3830b40740f1e52e3e88f74484122027ce
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/481680
Reviewed-by: Julia Lavrova <jlavrova@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2021-12-08 21:45:25 +00:00
Herb Derby
22960eb7b2 don't produce empty slugs!
The current system short circuits out when an SkTextBlob will draw
anything based on its bounds, the bounds of the clip, and the state
of the paint.

A similar thing needs to happen, but the clip needs to be ignored.
Return the nullptr if the SkTextBlob would never draw to signal that
the Slug can be ignored.

Bug: chromium:1277583

Change-Id: I2d6641e03c88ae5f160c479c9e715ad8dc9f65b3
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/481592
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Herb Derby <herb@google.com>
2021-12-08 20:34:41 +00:00
John Stiles
3856a5854e Revert "Add SkVM op trace_done to indicate completion of debug tracing."
This reverts commit 062652067b.

Reason for revert: design change removes need for this op

Original change's description:
> Add SkVM op `trace_done` to indicate completion of debug tracing.
>
> This op can be used to invoke a callback function and dump the log to
> disk when it is ready. SkRuntimeEffect doesn't have any other viable
> mechanisms for detecting that a paint has completed, AFAIK. We can
> wait for ~SkRTShader to occur, but there's no guarantee that this will
> happen quickly, and the SkPaint with the SkRTShader shader can be reused
> over and over again.
>
> Unlike other trace ops, this only needs a trace mask, not an execution
> mask (we are unconditionally done at the end of main).
>
> Change-Id: I6f7ee41f2005b65940d36dee892279d4f245509f
> Bug: skia:12708
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/479876
> Auto-Submit: John Stiles <johnstiles@google.com>
> Commit-Queue: Brian Osman <brianosman@google.com>
> Reviewed-by: Brian Osman <brianosman@google.com>

Bug: skia:12708
Change-Id: Ic4c4f5dd72541195f07ca32035267a20a82536e7
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/481577
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
2021-12-08 17:49:56 +00:00
Brian Salomon
b7f5278009 Geometry Processor can output local coord in fragment stage.
Currently GPs inform the program builder of the variable that contains
the local coordinates and it is assumed to be defined in the VS.
Additionally, the builder process will attempt to lift derived
coordinate computations to the VS as varying outputs when they are a
linear/projective transformation of the the GP's local coords.

This change makes it so that the GP can state that the local coord
variable is instead available in the fragment stage. If the GP uses
this option then lifting of coordinate transformations to the VS is
blocked.

Bug: skia:12720
Change-Id: I63d3ffe069c9e4ac43ac5bb305d6e04a11119626
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/481279
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
2021-12-08 16:52:57 +00:00
John Stiles
44f8636b30 Disable SkVMBlitter cache for Programs with trace hooks.
The trace hooks don't participate in the cache key, so the "matching"
Program in the cache may not have the same trace hook pointers as the
Builders. In fact, the trace hook pointers in the cached Program are
very likely to point to objects that no longer exist at all.

We could incorporate the trace hooks into the key, but this seems like a
losing battle--they're raw pointers and are extraordinarily unlikely to
stay consistent over time. Since trace hooks are only used in a
debugging context, where performance is not very important, the simplest
solution is to just exclude programs with trace hooks from the cache
entirely.

Change-Id: I65799331da012656c8b13e76107bc893418a874c
Bug: skia:12708
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/481440
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
2021-12-08 15:59:39 +00:00
Brian Salomon
78fa6d23ef Make SkRuntimeEffect's compiler instance shareable.
No functional change.

Bug: skia:12720
Change-Id: I649bc258c9a6b4973cdd9d1727827cdaf89b43ad
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/481280
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
2021-12-08 15:31:25 +00:00
John Stiles
543b8681c7 Add SkRuntimeEffect::MakeTraced API for SkShader debugging.
Color filters and blenders are currently not supported for tracing,
because we don't have access to the pixel coordinate, and so there is
nothing to compare the debug-trace coordinate with.

Change-Id: I7fe7fb4955b002432046ceef61c6f0a4c721a581
Bug: skia:12708
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/481278
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
2021-12-07 22:34:00 +00:00
Herb Derby
1c4cf27965 better tracing
Change-Id: I778703ae91df56ba4b7dd768637ac774010c4e08
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/481197
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Herb Derby <herb@google.com>
2021-12-07 20:53:28 +00:00
Brian Osman
8c3d183cc2 Rename SkSL 'srgb_unpremul' to just 'color'
Added comments to explain the semantics (both what's expected when you
set the uniform, and what you see in the shader). The old name was
confusing, because it sounded like you got an sRGB color in the shader.
This is terse, but I think it's the cleanest syntax - and for embedding
clients, they can use C++ (etc.) API to require that color uniforms are
assigned from color types.

Bug: skia:10479
Change-Id: If00ea754060494aaa83001a5b357687953de8a5f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/480577
Reviewed-by: John Stiles <johnstiles@google.com>
Reviewed-by: Derek Sollenberger <djsollen@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
2021-12-07 17:56:27 +00:00
John Stiles
85cc1bece7 Trace function return values after function-exit.
This will allow function return values to be easily seen when stepping
"over." This has the unexpected side benefit of generating slightly
fewer ops when a function has unoptimizable conditional returns.

Change-Id: I48d23de635d3caaddff91aa595593d0371dfcdcb
Bug: skia:12708
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/481076
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2021-12-07 16:32:44 +00:00
John Stiles
5fb4753483 Revert "Remove newly-added SkSL::DebugTrace base class."
This reverts commit 873a39ebd1.

Reason for revert: rework #2 of trace design, DebugTrace is back

Original change's description:
> Remove newly-added SkSL::DebugTrace base class.
>
> Slight rework of the SkRuntimeEffect trace design means we won't expose
> any debug-trace class at the public level, so an interface base class
> doesn't add value after all.
>
> Change-Id: I82739e9c5ba5ce5c7a63793ec0c09a50ab19fbb3
> Bug: skia:12708
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/480776
> Auto-Submit: John Stiles <johnstiles@google.com>
> Commit-Queue: Brian Osman <brianosman@google.com>
> Reviewed-by: Brian Osman <brianosman@google.com>

Bug: skia:12708
Change-Id: I02d51f83c7a3384b1eaa74ecf1a80b5f6e4fd774
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/481196
Auto-Submit: John Stiles <johnstiles@google.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
2021-12-07 16:25:17 +00:00
John Stiles
4c5d2f550c Show vectors and matrices properly in debug traces.
Matrices now include [C][R] notation and vectors indicate .x/.y/.z/.w.
Previously this information was missing, so you couldn't tell which slot
of a variable was being altered.

Change-Id: I590614372b1fc98e95e8fb5ebc3d318c449a8ee1
Bug: skia:12708
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/480798
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2021-12-07 15:14:54 +00:00
Ben Wagner
668995122f Fix when a glyph has a path
Always call generateMetrics before generatePath so that generateMetrics
can determine which glyph representation to use and if that glyph
representation can be modeled as a path.

Pass an allocator into generateMetrics so that it can set the path to
not existing. This allows generatePath to continue to work as it used
to, creating a path if any path is available. However, generateMetrics
may first set the path to not existing.

Update getPath and internalGetPath to use the path on the glyph if it
has already been set. Update makeGlyph and internalMakeGlyph to always
call generateMetrics first (which is now more like initGlyph).

Update the SkGlyph::PathData to indicate that it is a dev-path and not a
user-path. A user-path will have effects applied to it. A dev-path is
always a resolved path which is always filled -- unless it is hairline.

Update everything else for the knock on effects and to take advantage of
this information.

Bug: chromium:1266022
Change-Id: Id3f3cf5a534ab99f3a5779c910c1d1e191e68b1e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/478658
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
2021-12-07 14:58:29 +00:00
John Stiles
873a39ebd1 Remove newly-added SkSL::DebugTrace base class.
Slight rework of the SkRuntimeEffect trace design means we won't expose
any debug-trace class at the public level, so an interface base class
doesn't add value after all.

Change-Id: I82739e9c5ba5ce5c7a63793ec0c09a50ab19fbb3
Bug: skia:12708
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/480776
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
2021-12-07 00:54:08 +00:00
Julia Lavrova
4388f16262 Fixing comparison for structs and arrays
Recursive comparison with tests

Bug: skia:12642
Change-Id: I344812a26f9af7b8a904c6faf6319df86ce57d03
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/472997
Commit-Queue: Julia Lavrova <jlavrova@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
2021-12-06 20:46:41 +00:00
John Stiles
062652067b Add SkVM op trace_done to indicate completion of debug tracing.
This op can be used to invoke a callback function and dump the log to
disk when it is ready. SkRuntimeEffect doesn't have any other viable
mechanisms for detecting that a paint has completed, AFAIK. We can
wait for ~SkRTShader to occur, but there's no guarantee that this will
happen quickly, and the SkPaint with the SkRTShader shader can be reused
over and over again.

Unlike other trace ops, this only needs a trace mask, not an execution
mask (we are unconditionally done at the end of main).

Change-Id: I6f7ee41f2005b65940d36dee892279d4f245509f
Bug: skia:12708
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/479876
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
2021-12-06 18:44:27 +00:00
John Stiles
dfc7f31bd1 Create a public base class for debug traces.
SkRuntimeEffect needs an API for generating debug traces. This means
that we will need references to debug traces inside a public header.
Rather than reference SkVMDebugInfo directly, we now have a simpler
base class for debug traces. This is better suited to landing in
include/.

I've also renamed SkVMDebugInfo to SkVMDebugTrace for consistency, since
it now contains all the trace data. (When it was first added, it only
had the slot info.)

Change-Id: Ibaa4dedf9a17b9462b4f233a28a7b875d0317892
Bug: skia:12708
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/480356
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
2021-12-06 18:22:51 +00:00