Commit Graph

8267 Commits

Author SHA1 Message Date
John Stiles
2064111d55 Fix early-return misdetection in the inliner.
The IR generator was previously unable to see inside sub-blocks when
checking for early return statements, so a function like this:

half fn() {
  {
    return 0.0;
  }
}

Would be wrapped with an unnecessary `do { ...; break; } while (false)`
construct during the inlining process.

Change-Id: Ie804261643b0bab38a08787d0b9d168a03faf070
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/313206
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-08-25 22:51:31 +00:00
Mike Reed
ad5494d1d9 use pathbuilder
Change-Id: I11c18d4ff0e60cc33d742cf49359039395abc6b4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/313256
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
2020-08-25 22:27:20 +00:00
John Stiles
c37d551167 Add unit test for return statements wrapped in a block.
The inlining output for these statements is optimized in a followup CL.

Change-Id: I3a9a0fdca27e6a0ce80fe80b8869b1be677a8443
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/313207
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-08-25 21:47:41 +00:00
Mike Reed
92f6eb1602 use pathbuilder
Change-Id: I2bca419a3273a9cc8a984b0f4159f518968c6652
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/313077
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
2020-08-25 16:29:48 +00:00
Robert Phillips
8025507f74 Simplify SkComputeBlurredRRectParams
Although cool, I don't know if this is worth the increased complexity
for an unused feature.

Change-Id: Id229beab176cebf5b7810fd1e44a5d1e25abcabc
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/312848
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
2020-08-25 15:04:08 +00:00
Brian Osman
767f444feb SkRuntimeEffect SkSL has a new signature for main()
There is no more 'inout half4 color'. Effects return their output color.
If an effect wants the input color, it must use the (already existing)
approach of sampling a nullptr input shader.

The change is guarded for Chromium (so we can update their runtime color
filters in skia_renderer.cc).

For the GPU backend, FPs can now override usesExplicitReturn to indicate
that their emitCode will generate a return statement. If that's true,
then writeProcessorFunction doesn't inject the automatic return of the
output color, and emitFragProc will *always* wrap that FP in a helper
function, even as a top-level FP. GrSkSLFP opts in to this behavior, so
that the user-supplied return becomes the actual return in the FP's
emitCode.

Adapting the skvm code to this wasn't too bad: It looks fragile (what
happens if there are multiple returns?), but that's not really possible
today, without varying control flow.

Bug: skia:10613

Change-Id: I205b81fd87dd32bab30b6d6d5fc78853485da036
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/310756
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Kevin Lubick <kjlubick@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
2020-08-25 13:36:28 +00:00
Mike Reed
47d795a127 remove DrawPictureMode enum
Change-Id: I9b9ca78fe2e73d7b76b25d7258038650fea744ec
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/312495
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
2020-08-24 17:52:33 +00:00
Jim Van Verth
36b86aff6b Revert "Remove ARC from Metal backend"
This reverts commit 6541013b53.

Reason for revert: TSAN issues with GrFence, and crash in GrMtlPipelineStateBuilder::CreatePipelineState.

Original change's description:
> Remove ARC from Metal backend
> 
> Change-Id: I5ab28f6eda3b37d1b82c94c7cc6eaa2ce59157da
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/311113
> Reviewed-by: Adlai Holler <adlai@google.com>
> Reviewed-by: John Stiles <johnstiles@google.com>
> Commit-Queue: Jim Van Verth <jvanverth@google.com>

TBR=jvanverth@google.com,bsalomon@google.com,adlai@google.com,johnstiles@google.com

Change-Id: I031629b483fc46de8bd3751253e5391c2ce87853
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/312843
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
2020-08-24 17:16:54 +00:00
Jim Van Verth
6541013b53 Remove ARC from Metal backend
Change-Id: I5ab28f6eda3b37d1b82c94c7cc6eaa2ce59157da
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/311113
Reviewed-by: Adlai Holler <adlai@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
2020-08-24 16:20:42 +00:00
Brian Salomon
87d42e5d12 A new way to specify YUVA planar data from SkCodec to SkImage_Lazy
Tunnels through SkImageGenerator as well.

The new SkCodec interface doesn't assume three 8 bit planes.

New SkYUVASpec more clearly defines chroma subsampling and siting of
the planes.

The intent is to use this for other YUVA APIs as well, in particular
SkImage factories in the future.

In this change we convert to the SkYUVASpec to SkYUVASizeInfo
and SkYUVAIndex[4] representation. But the intent is to use
the SkYUVASpec representation throughout the pipeline once
legacy APIs are removed.

orientation GM is replicated to test a variety of chroma
subsampling configs.

Bug: skia:10632

Change-Id: I3fad35752b87cac16c51b24824331f2ae7d458d3
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/309658
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Reviewed-by: Leon Scroggins <scroggo@google.com>
2020-08-24 14:25:32 +00:00
Mike Reed
457c6ddff0 remove unused enums for picture-recorder
Change-Id: I43e74a56d0aa68260ac9a9020a06a308ad75f694
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/312248
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Florin Malita <fmalita@chromium.org>
2020-08-21 21:20:40 +00:00
Chris Dalton
c4ec291ec6 Reland "Add utilities to SkGeometry for quad and cubic rotation angles"
This is a reland of 26766ad427

Original change's description:
> Add utilities to SkGeometry for quad and cubic rotation angles
> 
> Adds methods to measure the rotation angles of quadratics and cubics,
> and to chop curves at locations that divide the rotation angle in half.
> 
> Bug: skia:10419
> Change-Id: I840e12034fc66e1a459de875fefda07a27a78335
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/308880
> Reviewed-by: Jim Van Verth <jvanverth@google.com>
> Commit-Queue: Chris Dalton <csmartdalton@google.com>

Bug: skia:10419
Change-Id: I62ea6847a91c054174f829962a901f21910c013b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/312438
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Reviewed-by: Chris Dalton <csmartdalton@google.com>
2020-08-21 17:57:40 +00:00
Brian Salomon
7a492f786d Fix -Wstring-concatenation warnings in clang 12
Change-Id: Ic09346b6079e6f316c28e03ddb02f12b4af8a38d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/312482
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
2020-08-21 17:17:50 +00:00
Greg Daniel
7b62dcae5a Add image usage flags to GrVkImageInfo
Bug: skia:9898
Change-Id: I46a66d4415af0bb013201ce756e8dbceb9e234cf
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/311437
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
2020-08-21 16:34:20 +00:00
Greg Daniel
6a4e145832 Make some public vulkan structs use default initialization.
We will still need to go through clients to remove uses of the main ctors
so that it can be deleted.

Change-Id: I7bdfa00ac56b2404cc7b2f183104ee97b4da1de7
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/311452
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
2020-08-21 14:33:20 +00:00
Ethan Nicholas
7018bcfbc9 Reland "SkSL now supports uniform array types"
This is a reland of 284f2c4bea

Original change's description:
> SkSL now supports uniform array types
> 
> Change-Id: I809e9c424ee92b05f0a87d75d1384c92849e1474
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/308498
> Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
> Reviewed-by: John Stiles <johnstiles@google.com>

Change-Id: I176f7fbdcbf3700e51e2303b06a4e906d22b2300
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/312244
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
2020-08-20 20:39:12 +00:00
Ben Wagner
9742f7c111 Notify when SkFontMetrics bounds are bogus.
OpenType and many other font formats have the concept of pre-computed
metrics for the union of all glyph bounding boxes. This allows for fast
though course quick rejecting of bounds, since the glyphs themselves may
potentially be quite a bit larger than the EM. With the introduction of
variable fonts OpenType does not vary these bounds, so the bounds are
only valid for the default non-varied font.

As a result the fTop, fBottom, fXMax, and fXMin reported in
SkFontMetrics may be bogus. Since simply always setting them to empty
zeros may be disruptive, provide a way forward for new users to check if
the bounds are valid.

This is a continuation which implements this in the DirectWrite and
CoreText ports.

Change-Id: I50812e78f31ee06fedf8ab1f005837d673a8f2ad
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/311976
Reviewed-by: Herb Derby <herb@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
2020-08-20 15:22:32 +00:00
Ethan Nicholas
f3c8f5df31 Reland "Added support for the 'inline' hint on SkSL functions"
This reverts commit 1394f71ff0.

Reason for revert: doesn't seem to have been the culprit

Original change's description:
> Revert "Added support for the 'inline' hint on SkSL functions"
> 
> This reverts commit 338e57d4b1.
> 
> Reason for revert: maybe breaking Chrome roll
> 
> Original change's description:
> > Added support for the 'inline' hint on SkSL functions
> > 
> > Change-Id: Ib78e0ad9fd1cc15e7afeb2a9ddd6b1249828fbe7
> > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/311603
> > Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
> > Reviewed-by: John Stiles <johnstiles@google.com>
> 
> TBR=brianosman@google.com,ethannicholas@google.com,johnstiles@google.com
> 
> Change-Id: Ifd199db94a78e4cb389576b9ff282f54a582c421
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/312078
> Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
> Commit-Queue: Ethan Nicholas <ethannicholas@google.com>

TBR=brianosman@google.com,ethannicholas@google.com,johnstiles@google.com

# Not skipping CQ checks because this is a reland.

Change-Id: I241f6bf16602bb5e011a2a5879a2df515fa0953b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/312097
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
2020-08-20 13:42:02 +00:00
Mike Klein
dc594f21c0 Revert "Add utilities to SkGeometry for quad and cubic rotation angles"
This reverts commit 26766ad427.

Reason for revert: Pixel & Nexus 5 failing with

Failures:
	../../../../../../skia/tests/GeometryTest.cpp:424	 [Geometry]: SkScalarNearlyEqual(leftRotation, expectedChoppedRotation)
	../../../../../../skia/tests/GeometryTest.cpp:424	 [Geometry]: SkScalarNearlyEqual(leftRotation, expectedChoppedRotation)


Original change's description:
> Add utilities to SkGeometry for quad and cubic rotation angles
> 
> Adds methods to measure the rotation angles of quadratics and cubics,
> and to chop curves at locations that divide the rotation angle in half.
> 
> Bug: skia:10419
> Change-Id: I840e12034fc66e1a459de875fefda07a27a78335
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/308880
> Reviewed-by: Jim Van Verth <jvanverth@google.com>
> Commit-Queue: Chris Dalton <csmartdalton@google.com>

TBR=egdaniel@google.com,jvanverth@google.com,csmartdalton@google.com,reed@google.com

Change-Id: Ic3d5c1ae35b74aa340757e92132bb2c1b8910cc6
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:10419
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/312119
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
2020-08-20 01:46:24 +00:00
Ethan Nicholas
1394f71ff0 Revert "Added support for the 'inline' hint on SkSL functions"
This reverts commit 338e57d4b1.

Reason for revert: maybe breaking Chrome roll

Original change's description:
> Added support for the 'inline' hint on SkSL functions
> 
> Change-Id: Ib78e0ad9fd1cc15e7afeb2a9ddd6b1249828fbe7
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/311603
> Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
> Reviewed-by: John Stiles <johnstiles@google.com>

TBR=brianosman@google.com,ethannicholas@google.com,johnstiles@google.com

Change-Id: Ifd199db94a78e4cb389576b9ff282f54a582c421
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/312078
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
2020-08-20 00:13:17 +00:00
Ethan Nicholas
95b24b9a9d Revert "SkSL now supports uniform array types"
This reverts commit 284f2c4bea.

Reason for revert: leak is angering ASAN

Original change's description:
> SkSL now supports uniform array types
> 
> Change-Id: I809e9c424ee92b05f0a87d75d1384c92849e1474
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/308498
> Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
> Reviewed-by: John Stiles <johnstiles@google.com>

TBR=brianosman@google.com,ethannicholas@google.com,michaelludwig@google.com,johnstiles@google.com

Change-Id: I614f2f5cbe8bba7fc8678143fe059c7b69866254
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/312077
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
2020-08-20 00:08:14 +00:00
Chris Dalton
6b3c2f653b Move GrWangsFormula::nextlog2 to sk_float_nextlog2
Other code outside this namespace will want to use this method soon.

Bug: skia:10419
Change-Id: Ib155f224866fd333b8f9a4b78e6c9e51ac0600df
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/311936
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
2020-08-19 23:45:12 +00:00
Ethan Nicholas
284f2c4bea SkSL now supports uniform array types
Change-Id: I809e9c424ee92b05f0a87d75d1384c92849e1474
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/308498
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
2020-08-19 21:50:56 +00:00
Chris Dalton
26766ad427 Add utilities to SkGeometry for quad and cubic rotation angles
Adds methods to measure the rotation angles of quadratics and cubics,
and to chop curves at locations that divide the rotation angle in half.

Bug: skia:10419
Change-Id: I840e12034fc66e1a459de875fefda07a27a78335
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/308880
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
2020-08-19 21:39:44 +00:00
Mike Klein
f647dc752d update placeholder approx op count
Now that approxOpCount() can recurse into sub pictures,
adding ~0 will overflow its total count.

New tests fail at head, pass now.

Change-Id: Icdb7d8a062739724207c9a6369734510f00f2ffd
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/311774
Reviewed-by: John Stiles <johnstiles@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
2020-08-19 21:33:54 +00:00
John Stiles
1f02286ea6 Remove sk_InColor from unit tests.
It's been replaced with a `uniform half4` in tests where it was needed,
which tends to generate similar code overall.

Change-Id: Iacc062efaeae37ebecf78505abe0fc563b69ceb0
Bug: skia:10619
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/311099
Commit-Queue: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
2020-08-19 21:26:54 +00:00
John Stiles
9d944236e8 Fix simplification of switch statements with casts.
The original code assumed that the switch value and case value would
both be IntLiterals, and asserted if this were not true. However, in
sufficiently complicated cases, the switch value can sometimes be a
Constructor containing a scalar.

It's possible that there's a fix to constant propagation which would
flatten out this Constructor to just a scalar, but that has eluded me
for today, and this approach does seem to solve the issue. (Also, it's
surprising that the optimizer does not notice that it can simplify
`half4(1.0, 2.0, 3.0, 4.0).yyyy`.)

Change-Id: Id490b15c724dd174c448665a19242cc80cdce213
Bug: skia:10623
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/311636
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-08-19 18:43:27 +00:00
Mike Reed
18305c3d36 pass 'nested' bool to approximateOpCount
Change-Id: I5b1baf2bc3aafa03c1d0cace4f7c09a09cf4a084
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/311112
Reviewed-by: Julia Lavrova <jlavrova@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Reed <reed@google.com>
2020-08-19 16:45:53 +00:00
Ethan Nicholas
338e57d4b1 Added support for the 'inline' hint on SkSL functions
Change-Id: Ib78e0ad9fd1cc15e7afeb2a9ddd6b1249828fbe7
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/311603
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
2020-08-19 15:47:09 +00:00
Ben Wagner
81eabce6a3 SkCustomTypefaceBuilder to set SkFontStyle
Allow the user of SkCustomTypefaceBuilder to set the SkFontStyle of the
resulting SkTypeface. This allows users to build font families.

Fix the Font_flatten test to actually work (instead of relying on the
magic behavior of nullptr for SkTypeface), add a test with the custom
typeface, and reduce the number of times the inner loop runs from
302,400 times to 4,032 times so that the test finishes in a reasonable
amount of time.

Bug: skia:10630
Change-Id: I0b5e939552ee4a9a1249eefbb7a7279a59b38e5a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/311596
Commit-Queue: Ben Wagner <bungeman@google.com>
Reviewed-by: Xiao Yu <xster@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
2020-08-19 00:09:55 +00:00
John Stiles
0e8149c6bd Add support for more basic types in SkSLCPPCodeGenerator.
While writing test code for skia:10623, I encountered a separate bug in
the SkSL compiler. Specifically, the codegen would assert when trying to
emit a function that returned an int. There were several basic types
missing from `glsltype_string`. I've added them, and created a unit
tests to exercise a subset of them.

Change-Id: Ied6aaacc67f472998cb6673490c4d98ce98886d2
Bug: skia:10631
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/311453
Commit-Queue: John Stiles <johnstiles@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
2020-08-18 17:19:16 +00:00
John Stiles
534d79979d Fix constness of ExternalValue* inside ExternalValueReference.
Objects in the symbol table are intentionally constant. However, when
converting "ExternalValue" AST nodes into symbols via symbol table
lookup, IRGenerator::convertIdentifier was casting away constness
because ExternalValueReference held a non-const pointer. Fixing this
involved significant ripple-effect additions of "const" throughout the
ExternalValue class and its subclasses.

These changes generally appear to be benign, but one interesting edge
case is `ExternalValue::write`, which intuitively does not seem to make
sense as a const method. However, invoking `write` should not alter the
ExternalValue object itself; rather, it is intended to alter the
*external value* that is being referenced. (In practice, nothing invokes
write() anyway except for one unit test, which continues to pass.)

This issue was discovered while converting casts to `as<T>()` calls.

Change-Id: I8ff6a477e475833d2a99c72f1c79c766b57767ee
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/311276
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-08-18 13:44:05 +00:00
Brian Osman
b65dc4a374 SkSL: Disallow swizzles that *only* contain '0' or '1' components
These are very easy to mis-read, and they don't make much sense.
Swizzles should refer to the base expression at least once.

Change-Id: I4c2740c7439a11b51b2eb41263c6435e3aefad35
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/310376
Commit-Queue: Brian Osman <brianosman@google.com>
Auto-Submit: Brian Osman <brianosman@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
2020-08-17 17:49:09 +00:00
Robert Phillips
37e6f530dc Remove some (presumably) unneeded calls to textureParamsModified in GrGLGpu
Just wrapping the backend texture shouldn't invalidate any parameters.

Change-Id: I02859e519b2c8e9612533b2230da753d5fff97b7
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/261084
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
2020-08-17 16:14:29 +00:00
Ethan Nicholas
63d7ee398a SkSL now detects modifiers used in incorrect contexts
Change-Id: I3847a17450c3185284961f35064c4f225aeb8b61
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/308769
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Auto-Submit: Ethan Nicholas <ethannicholas@google.com>
2020-08-17 15:40:19 +00:00
John Stiles
fdbd50a8dc Simplify SkSL::String by removing unused parts.
- reset, findLastOf: these were entirely unused
- find: already existed in C++11's std::string, can just be inherited
- defaulted constructors: in C++11, these can be inherited directly from
  std::string via 'using'

Change-Id: I1772ef04e49ab905aaada2ec38c1abeb9a8e26bf
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/311039
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-08-17 14:21:09 +00:00
John Stiles
a008b0fa8b Enable ClangTidy check readability-redundant-smartptr-get.
To my surprise, this even works with homegrown smart pointers (such as
SkTLazy).

https://clang.llvm.org/extra/clang-tidy/checks/readability-redundant-smartptr-get.html

Find and remove redundant calls to smart pointer’s .get() method.

Examples:

  ptr.get()->Foo()  ==>  ptr->Foo()
  *ptr.get()  ==>  *ptr
  *ptr->get()  ==>  **ptr
  if (ptr.get() == nullptr) ... => if (ptr == nullptr) ...

Change-Id: I8ff541e0229656b4d8e875c8053a7e6138302547
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/310976
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
2020-08-16 15:56:48 +00:00
John Stiles
c1c3c6d70d Enable ClangTidy flag bugprone-suspicious-string-compare.
https://clang.llvm.org/extra/clang-tidy/checks/bugprone-suspicious-string-compare.html

Find suspicious usage of runtime string comparison functions.
This check is valid in C and C++.

Checks for calls with implicit comparator and proposed to
explicitly add it:

  if (strcmp(...))       // Implicitly compare to zero
  if (!strcmp(...))      // Won't warn
  if (strcmp(...) != 0)  // Won't warn

Checks that compare function results (i,e, strcmp) are compared to valid
constant. The resulting value is

  <  0    when lower than,
  >  0    when greater than,
  == 0    when equals.

A common mistake is to compare the result to 1 or -1:

  if (strcmp(...) == -1)  // Incorrect usage of the returned value.

Additionally, the check warns if the results value is implicitly cast
to a suspicious non-integer type. It’s happening when the returned
value is used in a wrong context:

  if (strcmp(...) < 0.)  // Incorrect usage of the returned value.

Change-Id: I001b88d06cc4f3eb5846103885be675f9b78e126
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/310761
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
2020-08-16 03:54:08 +00:00
John Stiles
4e54367db3 Fix SkSL constant propagation within nested casts.
Previously, the inner type was ignored.

Change-Id: I51d251fc38358ef889b5a3f85d5f2d23bd8cf4c5
Bug: skia:10615
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/310657
Commit-Queue: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-08-14 21:18:56 +00:00
John Stiles
03add801fe Improve unit tests for switch-case and enum error handling.
These tests verify that switches and enums only work with constant
integral values. Floats or uniforms should be rejected with an easy-to-
understand error message.

Change-Id: Ib634cb1ca1734a4b66ba53a3476e9ee539a63e3e
Bug: oss-fuzz:24889, skia:10615
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/310396
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-08-14 17:10:15 +00:00
Brian Osman
3e3db6c9a6 Make switch case handling safer
It's possible to construct a case value expression that's a compile time
constant, but fails to produce a value from getConstantInt. MSAN noticed
us using the uninitialized integer. It's now initialized, but also never
used in the failure case: We make getConstantInt return status, and give
better error messages in the two places it's used.

Bug: oss-fuzz:24889
Change-Id: I88e4e5b7bd1caeea1cf53f9b1d6f345dd8a5326f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/310296
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
Auto-Submit: Brian Osman <brianosman@google.com>
2020-08-14 16:18:30 +00:00
John Stiles
fe0de30a87 Enable ClangTidy check modernize-use-nullptr.
https://clang.llvm.org/extra/clang-tidy/checks/modernize-use-nullptr.html

The check converts the usage of null pointer constants (eg. NULL, 0) to
use the new C++11 nullptr keyword.

Change-Id: Iaea2d843154c70e49d62affdc5dceb3bca8c1089
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/310297
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
2020-08-14 16:14:30 +00:00
John Stiles
48bdf6ddb1 Use a scoped block for inlined return statements.
Inlined return statements emit two statements--an assignment, then a
break. If scope braces are otherwise missing, the break statement will
end up in the wrong place. i.e.:

Mistranslated:
	if (foo) return bar;  --> if (foo) out = bar; break;

Translated properly:
	if (foo) return bar;  --> if (foo) { out = bar; break; }

Change-Id: Id992abf64ad09e6752f64c71cb556f05c868a453
Bug: skia:10607
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/310177
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-08-14 13:05:16 +00:00
John Stiles
1cf2c8d6ec Enable ClangTidy flag modernize-use-override.
https://clang.llvm.org/extra/clang-tidy/checks/modernize-use-override.html

Adds override (introduced in C++11) to overridden virtual functions and
removes virtual from those functions as it is not required.

virtual on non base class implementations was used to help indicate to
the user that a function was virtual. C++ compilers did not use the
presence of this to signify an overridden function.

Change-Id: If66d8919358f72a4035190caf8d7569268037a9a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/310160
Commit-Queue: Mike Klein <mtklein@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
2020-08-14 10:54:45 +00:00
Mike Klein
9e77f20864 more careful SkColorSpace hash collision detection
The new unit test SkASSERT()s a hash collision at head
(but passes in release builds) and does not SkASSERT()
with this patch to SkColorSpace.cpp.

Bug: chromium:1113865
Change-Id: Ibc05af4145a92bbd15c7d5e06ece9d269bd7a242
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/310110
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
2020-08-13 19:25:32 +00:00
John Stiles
8c91c93dce Refuse to inline SkSL with returns inside breakable constructs.
We do not have a good mechanism to break out of a nested for/while loop
or switch statement. Our inlining approach generates incorrect code in
those cases, and there's no apparent fix, since we don't have a
mechanism for subverting control flow like 'goto'. When we detect this
case, disable inlining for that function.

Change-Id: Ic4180b367a3895806b0cc36872155185138826e1
Bug: skia:10606
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/310063
Commit-Queue: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-08-13 19:10:02 +00:00
Robert Phillips
dc3697036e Handle invalid DDLRecorder case
Prior to this CL, if we failed to create the DDL Recorder's target
proxy while creating the target surface we could create an invalid
DDL.

The specific repro case involved too big of an target proxy but
many other scenarios could result in the same behavior.

Bug: 1105903
Change-Id: I519a072600c168aa590fbe920f4029d08fe29e6f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/309777
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
2020-08-13 18:20:12 +00:00
Leon Scroggins III
326b98981e Add platform image encoder for using NDK APIs
Bug: skia:10369

Add SkEncodeImageWithNDK, mirroring the CG and WIC versions, for
encoding with the NDK APIs added to R.

Rename SK_ENABLE_NDK_DECODING to SK_ENABLE_NDK_IMAGES and use it for
both encoding and decoding.

Move code for converting to/from NDK types into a common location.

Update encode_platform.cpp to use NDK encoding APIs when available and
to use both types of webp (lossy and lossless). Add tests specifically
for the new implementation.

Update NdkDecodeTest to use ToolUtils::equal_pixels for comparing
pixels.

Change-Id: Ic62f89af27372ccce90b8e028e01c388a135a68c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/308800
Commit-Queue: Leon Scroggins <scroggo@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
2020-08-13 15:21:41 +00:00
John Stiles
776c2841f8 Move onDumpInfo calls in gencode to the private section.
`onXxxxx` methods in Skia generally appear to be non-public, which I did
not realize until after originally implementing this task.

Followup CLs will update the non-gencode `onDumpInfo` methods to be
private as well.

Change-Id: I807eee132b080f72f6b040e1ca7f687be25dff11
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/309883
Commit-Queue: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
2020-08-13 14:48:51 +00:00
Brian Salomon
652124c372 sk_gpu_test::MakeTextureProxyFromData -> MakeTextureProxyViewFromData
Change-Id: Ie55a147566ef68a64e3b03d8cab701e54dbf1f0d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/309780
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
2020-08-12 20:43:41 +00:00