Commit Graph

27589 Commits

Author SHA1 Message Date
Jim Van Verth
0ef049177f Use Microsoft's ComPtr to wrap D3D12 objects.
Change-Id: I4bd173428a2b65f0bc1994fb794ef9d4d68d5ba0
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314957
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
2020-09-08 17:22:50 +00:00
Brian Salomon
9e5a60c9db Don't set BASE/MAX mip map level on PowerVR.
Speculative fix for Chrome crashes.

Implemented by separating out LOD and level caps.

Also don't allow GrContextOptions to enable manual mip mapping
if level control is not available.

Change-Id: Ibdf647792e1e018efeffa0af34ceb59e751e6749
Bug: chromium:1123874
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/315638
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
2020-09-08 17:22:30 +00:00
Jim Van Verth
d2b695a705 Close disabled warning pragmas
Change-Id: Ic35abc701e329d929c898dc431dd3dbd89262ff4
Bug: skia:10704
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/315637
Commit-Queue: Jim Van Verth <jvanverth@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: Jim Van Verth <jvanverth@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
2020-09-08 16:12:10 +00:00
Ethan Nicholas
e659214bc6 Revamped handling of SkSL node kinds
Moved the actual field into the base class, changed all of the enums
into non-overlapping enum classes, and finally renamed Type::Kind to
fix the ambiguity there.

Change-Id: I4e6c24d2dbbc7b1d12b7b7bf12e77c651eea7ed9
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/315318
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
2020-09-08 15:00:10 +00:00
Brian Salomon
a9b45b6a7c Re-enable use of sampler objects on ANGLE.
Performance didn't budge.

Bug: skia:10644
Change-Id: Ia6f8f39c32aed84ecf59538bfad7804b44f15e76
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/315600
Commit-Queue: Brian Salomon <bsalomon@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
Auto-Submit: Brian Salomon <bsalomon@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
2020-09-08 14:55:50 +00:00
John Stiles
6eadf13783 Change Inliner signature in preparation for analyzer pass.
These changes don't seem to add much value in isolation, but they will
smooth our transition to inline analysis during optimization.

- The passed-in FunctionCall no longer needs to be a unique_ptr.
- The fInlinedBody is guaranteed to be a Block now. (This change caused
  a slight ripple effect in unit test output; in some cases it creates
  an additional newline in the final code. This is harmless.)
- has_early_return is checked earlier, before we've made any mutations
  to the FunctionCall. This should work around errors that can occur if
  a function is trying to inline itself. (Ideally we wouldn't be trying
  to do this at all, but either way, we shouldn't crash.)

Change-Id: I0a565d477f680c0ba061df2686a36e42aa75de95
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/315599
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-09-08 14:52:30 +00:00
Brian Osman
2b3b35f838 Handle function reference expressions in the inliner
Bug: oss-fuzz:25395
Change-Id: Ifd9bcb1e8e510488e43fde359f011800c8647435
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/315557
Commit-Queue: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: Brian Osman <brianosman@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
2020-09-08 14:04:30 +00:00
Brian Osman
6763a713f9 Limit morphology radius to 100 pixels
This limit is arbitrary, but hopefully prevents pathological (or
malicious) SVG content from consuming huge amounts of CPU/GPU time,
without impacting any legitimate uses of feMorphology. (Typical usage
has a much smaller radius).

Bug: chromium:1123035
Change-Id: I4405bc595128e9a6287eb5efa1be14621baa3a00
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/315219
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
2020-09-03 20:17:57 +00:00
Robert Phillips
1ee21cdfb6 Create cpu-side blurred RRect mask when recording DDLs (take 2)
Bug: 1108408
Change-Id: Ib2d9a20d67a9afd80fd3c11a32ff7174f4cebb59
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/315298
Reviewed-by: Adlai Holler <adlai@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
2020-09-03 18:23:27 +00:00
Brian Salomon
59c60b0cb3 Reland "Add idea of DataType to SkYUVAPixmapInfo."
This is a reland of ed63444587

Original change's description:
> Add idea of DataType to SkYUVAPixmapInfo.
> 
> DataType describes the data type of YUVA channels
> independent of how they are grouped into planes.
> 
> Adds mapping functions between SkColorType/channel count
> and DataType.
> 
> SkYUVAPixmapInfo can be constructed from DataType and will
> choose appropriate SkColorTypes for each plane.
> 
> Valid SkYUVAPixmapInfos now have the same DataType for each
> plane (could relax this in the future, esp for alpha plane).
> 
> SkYUVAPixmapInfo::SupportedDataTypes specifies the supported
> combinations of SkYUVAInfo::PlanarConfig and
> kYUVAPixmapInfo::DataType supported by a GrContext (based on
> supported texture formats).
> 
> SkImageGenerator/SkCodec YUVA query API now takes a
> SupportedDataTypes.
> 
> Change-Id: I8791234638e6ba3396d1e7960b7bc210edc6dd57
> Bug: skia:10632
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314276
> Reviewed-by: Leon Scroggins <scroggo@google.com>
> Reviewed-by: Robert Phillips <robertphillips@google.com>
> Commit-Queue: Brian Salomon <bsalomon@google.com>

Bug: skia:10632
Change-Id: I35b55b7477c11c822fdb3729a9f84acff1eb785d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/315284
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Leon Scroggins <scroggo@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
2020-09-03 18:05:17 +00:00
Herb Derby
00b2fdbc3c move blur and path attributes to key
Blur and stroke information were kept out of line with the key.
Make them part of the key, and update operator==.

Change-Id: I2e7669aae4e9c3243c078b039ae796a7e371ef8e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/315282
Commit-Queue: Herb Derby <herb@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
2020-09-03 17:34:37 +00:00
Robert Phillips
f3e00d8d40 Revert "Create cpu-side blurred RRect mask when recording DDLs"
This reverts commit 5951e8fc33.

Reason for revert: ASAN woes

Original change's description:
> Create cpu-side blurred RRect mask when recording DDLs
> 
> Bug: 1108408
> Change-Id: Ib66b04cb4ab7bddc08fa3857f7bc186948afb0b2
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314930
> Reviewed-by: Adlai Holler <adlai@google.com>
> Commit-Queue: Robert Phillips <robertphillips@google.com>

TBR=robertphillips@google.com,adlai@google.com

Change-Id: Idecfbf9591f2cedc0a1e7d491514f22716c7a666
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 1108408
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/315194
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
2020-09-03 17:15:48 +00:00
Robert Phillips
5951e8fc33 Create cpu-side blurred RRect mask when recording DDLs
Bug: 1108408
Change-Id: Ib66b04cb4ab7bddc08fa3857f7bc186948afb0b2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314930
Reviewed-by: Adlai Holler <adlai@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
2020-09-03 16:47:37 +00:00
John Stiles
3454885c79 Add is<T> to IRNode types.
This is a shorthand function for verifying the kind of IRNode you have.

Change-Id: Ifc53100b6d29d9fcd02e90e0658fda971f136210
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/315256
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-09-03 16:09:47 +00:00
John Stiles
eadfc3bccd Use erase-remove idiom for dead-declaration removal.
Change-Id: I4ba2aed45c461ae77017d0d60307dcf2859989a9
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314461
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-09-03 15:48:37 +00:00
John Stiles
7571f9e490 Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'.
Mechanically updated via Xcode "Replace Regular Expression":

  typedef (.*) INHERITED;
    -->
  using INHERITED = $1;

The ClangTidy approach generated an even larger CL which would have
required a significant amount of hand-tweaking to be usable.

Change-Id: I671dc9d9efdf6d60151325c8d4d13fad7e10a15b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314999
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-09-03 03:41:26 +00:00
Greg Daniel
6ed2dccafd Don't require secondary command buffers on mali vk.
Change-Id: Ib2c3a55421fa3f052f337be6b75022fa4d30ac8d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314319
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
2020-09-02 21:27:46 +00:00
Michael Ludwig
c7fa895e50 Revert "Add idea of DataType to SkYUVAPixmapInfo."
This reverts commit ed63444587.

Reason for revert: trying to unblock android roller, which incorrectly thinks this has a merge conflict: https://b.corp.google.com/issues/167576324

Original change's description:
> Add idea of DataType to SkYUVAPixmapInfo.
> 
> DataType describes the data type of YUVA channels
> independent of how they are grouped into planes.
> 
> Adds mapping functions between SkColorType/channel count
> and DataType.
> 
> SkYUVAPixmapInfo can be constructed from DataType and will
> choose appropriate SkColorTypes for each plane.
> 
> Valid SkYUVAPixmapInfos now have the same DataType for each
> plane (could relax this in the future, esp for alpha plane).
> 
> SkYUVAPixmapInfo::SupportedDataTypes specifies the supported
> combinations of SkYUVAInfo::PlanarConfig and
> kYUVAPixmapInfo::DataType supported by a GrContext (based on
> supported texture formats).
> 
> SkImageGenerator/SkCodec YUVA query API now takes a
> SupportedDataTypes.
> 
> Change-Id: I8791234638e6ba3396d1e7960b7bc210edc6dd57
> Bug: skia:10632
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314276
> Reviewed-by: Leon Scroggins <scroggo@google.com>
> Reviewed-by: Robert Phillips <robertphillips@google.com>
> Commit-Queue: Brian Salomon <bsalomon@google.com>

TBR=bsalomon@google.com,robertphillips@google.com,scroggo@google.com

Change-Id: I72c39539a4766f10cac3ca3cdef6c503a8319ff1
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:10632
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314895
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
2020-09-02 21:26:39 +00:00
John Stiles
fffe3844ef Remove pipeline-stage workarounds from the GLSL code generator.
These checks don't appear to be useful; the methods in question are
overloaded anyway, and don't access the INHERITED:: methods.

Change-Id: I2ae637b7fb7f2281dc00fe148fbbbccb464cded9
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314885
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
2020-09-02 20:43:35 +00:00
John Stiles
2ff9706328 Replace empty Block with Nop statement.
Change-Id: I2db149103a86e8d348affee2ba7b5bd70b0a2990
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314883
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
2020-09-02 19:47:35 +00:00
Herb Derby
3d1d636cd8 simplify fill vertex calculations
Make direct2D concrete. Simplify the math.

Change-Id: I4cfa3263cedcd53108e47cfb4f503060ea13a7d8
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314458
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Herb Derby <herb@google.com>
2020-09-02 19:28:05 +00:00
Brian Osman
16f376f5ee Disallow some combinations of program element and program kind
- Section is only allowed in .fp files
- Interface blocks, extensions,  and layout qualifiers (not attached
  to a declaration) are only allowed in fs/vs/gs.
- Enums are not allowed in runtime effects

Bug: skia:10626
Change-Id: I3de8c6894fa18340f5da942fb7d995e5426ef0d9
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314878
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
2020-09-02 19:09:25 +00:00
John Stiles
ad2319f7c4 Ensure that inlined if/else blocks are properly scoped.
The bulk of the diff is just reordering existing code; the logical
changes are very small.

Change-Id: I3b918e64f5229da43d43f0922e8b59a007a6ad3e
Bug: skia:10687
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314882
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
2020-09-02 19:07:55 +00:00
Ethan Nicholas
da6320ca11 Disallow a bare ';' at the top level of SkSL files
It turns out the parser was accepting empty declarations, turning them
into an empty modifiers declaration. This was causing problems with a
CL that was going to disallow declarations in contexts where they
weren't allowed. Since this was never the intended behavior, we now
disallow it.

Change-Id: Iea56529c76a946e8002ce1e929790aec488fd4f5
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314879
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Auto-Submit: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
2020-09-02 18:46:05 +00:00
Brian Osman
0e47880713 Remove some leftover double types from SkSLContext
Change-Id: I9d9a18f9d37cac385921fc0bd759407ea2f3db31
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314881
Commit-Queue: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: Brian Osman <brianosman@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
2020-09-02 18:33:45 +00:00
Greg Daniel
e9a9ad9082 Remove unused GrVkDescriptorSetManager factor.
Change-Id: I50476e8b8bc9796656cb87cdbd6ec0fe83819f0e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314496
Commit-Queue: Jim Van Verth <jvanverth@google.com>
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Auto-Submit: Greg Daniel <egdaniel@google.com>
2020-09-02 17:59:25 +00:00
John Stiles
c0dd06d0cb Ensure that inlined statements are properly scoped.
Change-Id: I43479d8543ea4860be45614a65cf8ad4cec307d8
Bug: skia:10687
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314877
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-09-02 17:50:35 +00:00
Mike Klein
5bdba1a5a6 add missing clamp to SkColorFilter_Matrix
I'm not sure why I left this out, or why for so long.
This fixes a few GMs, especially F16 where we're not
otherwise clamped.

Creates a little `Color clamp01(Color)` helper to
dedup this logic a little.

Bug: skia:10689
Change-Id: If879f75b219f910ac3e1491625674bcfc38d36bf
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314863
Reviewed-by: Florin Malita <fmalita@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
2020-09-02 17:34:06 +00:00
Robert Phillips
4ef21edffb Split creation of integral table out of GrRectBlurEffect
The plan is to use this table to evaluate the vertical blur
when creating the blurred rrect mask on the cpu.

Bug: 1108408
Change-Id: Ie322b9e2924d7b0f2242b28daebfcf21c8062aa8
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314716
Reviewed-by: Adlai Holler <adlai@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
2020-09-02 16:43:55 +00:00
John Stiles
8fa3b4e8cd Disallow inlining ternary true/false branches.
This prevents unnecessary work from being done, and also prevents us
from executing side-effects from the wrong side.

Change-Id: I4dbf3974388807f15e9eadb2abf1b1243d047ce2
Bug: skia:10688
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314797
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-09-02 16:14:35 +00:00
John Stiles
648a81e5e8 Add unit tests for the inliner.
Some of these tests worked perfectly, but others expose latent inlining
bugs. The following tests show incorrect results from the inliner:
- SkSLFPTernaryExpressionsShouldNotInlineResults
- SkSLFPInlinedWhileBodyMustBeInAScope
- SkSLFPInlinedDoWhileBodyMustBeInAScope
- SkSLFPInlinedForBodyMustBeInAScope

Change-Id: I523e2e3272dea01d5c194a478df6f39ecadf2f5c
Bug: skia:10687, skia:10688
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314796
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
2020-09-02 15:39:35 +00:00
Robert Phillips
5bc0b65a4b Split up find_or_create_rrect_blur_mask_fp
Prepare this method for cpu-side generation of the rrect blur mask in DDL-mode

Bug: 1108408

Change-Id: I902ad507cd53f5f5b1d418a8b52f96dddffd0b18
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314621
Reviewed-by: Adlai Holler <adlai@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
2020-09-02 14:50:05 +00:00
Brian Salomon
ed63444587 Add idea of DataType to SkYUVAPixmapInfo.
DataType describes the data type of YUVA channels
independent of how they are grouped into planes.

Adds mapping functions between SkColorType/channel count
and DataType.

SkYUVAPixmapInfo can be constructed from DataType and will
choose appropriate SkColorTypes for each plane.

Valid SkYUVAPixmapInfos now have the same DataType for each
plane (could relax this in the future, esp for alpha plane).

SkYUVAPixmapInfo::SupportedDataTypes specifies the supported
combinations of SkYUVAInfo::PlanarConfig and
kYUVAPixmapInfo::DataType supported by a GrContext (based on
supported texture formats).

SkImageGenerator/SkCodec YUVA query API now takes a
SupportedDataTypes.

Change-Id: I8791234638e6ba3396d1e7960b7bc210edc6dd57
Bug: skia:10632
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314276
Reviewed-by: Leon Scroggins <scroggo@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
2020-09-02 13:21:45 +00:00
Julia Lavrova
05ce2817f2 Revert "Removing ICU dependencies from skparagraph BUILD.gn file"
This reverts commit f1711adb1a.

Reason for revert: Build break

Original change's description:
> Removing ICU dependencies from skparagraph BUILD.gn file
> 
> (and from the sources, too)
> 
> Change-Id: I9d8ff51c91aad4b770b1f183c04734d31252b851
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/313148
> Commit-Queue: Julia Lavrova <jlavrova@google.com>
> Reviewed-by: Ben Wagner <bungeman@google.com>

TBR=bungeman@google.com,jlavrova@google.com

Change-Id: I1fce2436855e3e2a4cb7d1d7204b3ae49fd530e8
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314540
Reviewed-by: Julia Lavrova <jlavrova@google.com>
Commit-Queue: Julia Lavrova <jlavrova@google.com>
2020-09-01 20:51:33 +00:00
Julia Lavrova
f1711adb1a Removing ICU dependencies from skparagraph BUILD.gn file
(and from the sources, too)

Change-Id: I9d8ff51c91aad4b770b1f183c04734d31252b851
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/313148
Commit-Queue: Julia Lavrova <jlavrova@google.com>
Reviewed-by: Ben Wagner <bungeman@google.com>
2020-09-01 20:35:34 +00:00
Herb Derby
75f5314fb8 fix unsigned compare against zero
Change-Id: Ia97c4d653331414a05e73945d3a9c6a953ffc97b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314497
Commit-Queue: Herb Derby <herb@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Auto-Submit: Herb Derby <herb@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
2020-09-01 19:32:11 +00:00
Mike Reed
3867c7013f plumb cubic params into gpu backend
Tiny diffs seen, but not sure how to avoid those and keep the code
path simple -- so just plan/hope to rebaseline as needed.

Change-Id: Id8ff7e85a6e70785592f76118a32def2d61599ec
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314076
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
2020-09-01 19:31:51 +00:00
Brian Salomon
a0d913bef3 Separate our use of sampler object from GL support.
When sampler objects exist but we're not using them we bind 0.

Speculatively disable use on ANGLE to see effect on performance.

Change-Id: I5c76bd812760a5ac67a4327f2d02f4f831155029

Bug: skia:10644
Change-Id: I7ef23704b2ca11d92806f196589ec561a3ac9435
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314462
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
2020-09-01 18:55:11 +00:00
Herb Derby
e1a00890a0 maintain the page index in AtlasLocator
AtlasLocator maintains the page index, and atlas location in fUVs.
This reduces the number of instructions needed to produce the
glyphs vertices. Moving the page index to the high bits allows many
simplifications to the code because subtraction can be used to
calculate width and height, and small offsets can be added with
no re-encoding.

Change-Id: I592543f772274dd18e00c0aec2520aadb1bf4158
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314317
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Commit-Queue: Herb Derby <herb@google.com>
2020-09-01 18:24:51 +00:00
John Stiles
4202dc47a4 Use erase-remove idiom for dead-variable removal.
Change-Id: Ief9aa9aa035424573533072af2c0cd8cee5bf9b4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314460
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
2020-09-01 15:50:11 +00:00
John Stiles
7954d6c77c Use erase-remove idiom to remove dead SkSL functions.
This pattern is a bit more efficient when multiple removals occur; it
avoids moving elements up more than once.
(https://en.wikipedia.org/wiki/Erase%E2%80%93remove_idiom)

Change-Id: I612d3c52145c889e30f7203f3c7298e461e855a5
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314459
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-09-01 15:30:01 +00:00
John Stiles
7b46300fe4 Move ownership of SkSL::Inliner to SkSL::Compiler.
This will allow the Compiler to access the Inliner (in addition to the
IRGenerator, as before).

Change-Id: I1aeeaf8e3d3fb5d15533f7bf5c635a4798115d1f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314357
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
2020-09-01 13:31:58 +00:00
John Stiles
cf936f9af1 Replace salting process in SkSLInliner with a symbol table check.
Ideally, we wouldn't need a counter at all here, and we could just rely
on the symbol table to check for name collisions. Unfortunately, this
fails in practice on a couple of tests, because we don't construct
programs in a strict top-to-bottom order--particularly when inlining.
However, by checking the symbol table before using a name, we can at
least solve cases where the inliner reuses a name that was taken in a
previous pass, which was why salt was originally added. This makes the
generated code much easier to read.

Change-Id: Ib69611c8df457fbd03b31e52158113ad4a8735d5
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314277
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-09-01 13:30:29 +00:00
John Stiles
b92641c34d Update contains_xxxx_break to use ProgramVisitor.
It isn't actually fewer LOC, but the level of complexity is lower;
rather than having to reason about recursion, it allows the reader to
assume that ProgramVisitor does the right thing, and focus on the
interesting parts of the algorithm.

Change-Id: I3f110a6029481afac1c9634035eb275c3b2d6455
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314321
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
2020-09-01 13:16:18 +00:00
Jim Van Verth
3913d3e137 Set Metal semantics for SkSL point size.
Metal requires any variable in the vertex shader representing point size
to be assigned the [[point_size]] semantic. Otherwise, point size is
undefined.

Bug: skia:10658
Change-Id: Iac428175327a27ba319e9dab9a0c17d4b1731cce
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314318
Commit-Queue: Jim Van Verth <jvanverth@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Auto-Submit: Jim Van Verth <jvanverth@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
2020-08-31 19:48:03 +00:00
John Stiles
39616ec7c9 The inlined function body is now returned as a single Statement.
If only a single statement is necessary, it is returned as-is.
If multiple statements are needed, they are wrapped in a non-scoped
Block statement. If no statements at all are needed (!), null will be
returned.

Change-Id: I6ba373f73d339b8c2e7b8d39dfb28f13655e3d03
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/313911
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-08-31 18:51:46 +00:00
John Stiles
44e96bee4b Migrate SkSL Inliner out of IRGenerator and into its own module.
The functional changes needed to make this migration possible have
already been submitted in prior CLs, so although this is large, it is
almost entirely a mechanical migration of code from one file to another.

Change-Id: I54380b52e38ebcec40ffbca7cb254f9655cb1865
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/313909
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-08-31 18:06:56 +00:00
Michael Ludwig
16d5b0a81a Consolidate image filter evaluation into SkBaseDevice
This CL does several things:
1. SkDevice subclasses that implement drawSpecial() now assert that the
provided SkPaint does not have an SkImageFilter.
2. The SkGpuDevice implementation of drawSpecial() is simplified to go
through the draw_texture_producer code path. This removes duplicate logic
for paint and texture handling, and also allows simple drawSpecials to
actually use the texture op.
3. SkCanvas' drawInternalDevice and onDrawImage now define the
skif::Mappings that define the coord transforms for filter eval and
final draw, before calling the new drawFilteredImage on SkDevice.
  - This is implemented in SkBaseDevice, but subclasses can extend it.
  - I had originally put it as a static function in SkCanvas, but that
    meant I had to forward declare more types in SkCanvas.h than I liked.
  - A lot of the skif::Context properties are dependent on the dst device
    anyways, so having a drawFilteredImage on device seems okay, now that
    filter eval is separated from how to draw a special image.
  - Once drawSpecial can take a matrix transform, and once image filters
know how to handle non-(0,0) source origins, this will simplify further.
4. Swapped the behavior of SkDevice::getRelativeTransform. I originally
wrote it so that it would be the matrix mapping from arg to caller.
After finally using it here (its original purpose), I realized it reads
better to be the matrix from caller to arg.
  - Previously this was never called, so compatibility isn't a problem.

Bug: skia:9558
Change-Id: If855903110947a11ae89b1e50cf5848a3c5dbecd
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/308768
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
2020-08-31 17:43:16 +00:00
John Stiles
241f08018a Add helper function for inlining argument lists.
This doesn't change any behavior, just moves out repeated code to a
common place. (It does add a vector::reserve that wasn't present before,
but that's a pretty minor detail.)

Change-Id: I7b1fe8746af5192e2cddcc80418351395f3c702c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/313838
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-08-31 16:20:46 +00:00
Mike Klein
4c2928bb0d deserialize drawPoints() mode safely
Use checkRange() to prevent an out-of-range enum.

Bug: oss-fuzz:25301
Change-Id: Icd20ebb8a60925d24ca39b9be0e85fafb361539a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/314119
Auto-Submit: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Mike Reed <reed@google.com>
2020-08-31 15:48:48 +00:00