This implementation leans heavily into DSL. I also reworked the
`normalize` intrinsic to use more DSL to shrink the implementation.
$genType faceforward($genType N, $genType I, $genType Nref);
$genHType faceforward($genHType N, $genHType I, $genHType Nref);
Change-Id: I73ab11d3fe449d2f2c0ae0d745fc39824fc64771
Bug: skia:12034
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/412637
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>
This one is structured a bit differently; it gets to length() value,
then divides the input by its length using a bit of DSL. Since all the
inputs are constant, the constant-folder will do the right thing.
$genType normalize($genType x);
$genHType normalize($genHType x);
Change-Id: I51e5c65fa9e33738cbe253fcc97ee2160c48cfdd
Bug: skia:12034
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/412340
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Every stroke shader just has conic branches now. The conic/cubic math
is mostly unified anyway, so a couple small branches shouldn't affect
perf.
Bug: skia:10419
Change-Id: I7690e54e61413902dd9836da532faf6383fb73b0
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/412456
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Every shader always has a matrix now. The 4 FMAs (literally) that this
saved by specializing the shader weren't worth it.
Bug: skia:10419
Change-Id: I506dbd6d723f6dd022345956fdb5b60b0dd94932
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/412416
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Not a big deal, but reduces redundant LOC in here a bit.
Change-Id: If917c09b0ea5dee17978e12795fd3e3d8974d37d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/412378
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
float length($genType x);
half length($genHType x);
Change-Id: I65b64fdba5f7bd53afba1d6f930217e3f1bd6f6e
Bug: skia:12034
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/412377
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Enable hardware tessellation as much as possible with --alwaysHwTess.
Use --maxTessellationSegments 16 to verify the chopping logic.
Bug: skia:10419
Change-Id: I1a37a6a8700ad16197251a753d40b0d3aaeecb8e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/412296
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Test is failing on Adreno 6xx + Vulkan.
Change-Id: I8e5e97c82622c77385baef2c71d9381203221139
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/412238
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>
Change-Id: Ia5d849a2ab3fc233c4feacb5198a0684978ca3a9
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/410794
Reviewed-by: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Now that hardware tessellators chop, support raw triangles, and can
handle any path, we don't need complicated logic anymore to determine
when we can't use them. This CL simplifies the criteria for selecting
a tessellation algorithm and adds a fAlwaysPreferHardwareTessellation
context option to override it.
Bug: skia:10419
Change-Id: I8492e8f285ff27eb9d0dd6b1e9817dbeeb386c63
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/411496
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
If every use of the coords passed to main was for a call to sample that
was converted to pass-through sampling... We don't actually reference
the sample coords, so we can un-set the flag. This prevents the FP from
requesting an extra set of (unused) coords, which saves a varying
between the vertex and fragment shaders.
Bug: skia:11869
Change-Id: I4e15876031717b8bcf642e742bad8ae26d6bd020
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/411871
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Change-Id: Icb400a8826a42cabe8e12ef6648435ab63e15d88
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/411899
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
As explained in the bug and comment - if the only reference to sample
coords is from a sample call that gets converted to pass-through, we
don't *actually* need the coords. We don't realize that with today's
analysis, so we end up generating a set of coords for the FP, which is
wasteful (adds an extra varying).
Bug: skia:11869
Change-Id: Iff818bb2c3deb96162a8cf107ccf4ecb35344bb1
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/411244
Reviewed-by: John Stiles <johnstiles@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Change-Id: Ib678324849a15204c910df3361d7fd061cae1bb8
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/411900
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
Previously, `evaluate_intrinsic_1_of_type` and related functions were
all templated on the lambda expression of each evaluation function, so
every intrinsic generated a copy of each function. In most cases this
could be replaced by a std::function which takes and returns a float,
bool or SKSL_INT. (This level of flexibility was only truly necessary
for `evaluate_intrinsic_numeric1`.)
Change-Id: I2a4bd5984d74bb97bffd31018c9cf3dba17e8450
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/412056
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>
These paths trigger cases where we know we must add the inner join
geometry.
Bug: skia:11964
Change-Id: I9c66baf6a9f9fda55911651adae01ba1a22b3aa2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/408156
Commit-Queue: Tyler Denniston <tdenniston@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Uses an instanced attrib instead of a uniform to access the bounding
box. This will allow for batching and fewer uniform updates.
Bug: skia:10419
Change-Id: I522b4a29835564f89294a02ee4edc7a866812164
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/411976
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
This is needed by the upcoming DSLParser.
Change-Id: I54a0714e55feeb78894df766b14c795970f2c2d4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/411308
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
Change-Id: I3427fbaf57787c3051db95ec5882c9292d7985cf
Bug: skia:12034
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/411312
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
This is a reland of 5e1f135376
Original change's description:
> Re-enable tessellation for cacheable strokes
>
> Now that the fixed count stroke tessellator has landed, these should
> hopefully not regress performance.
>
> Bug: skia:11138
> Bug: skia:11139
> Change-Id: I1a7d756e2a8a55f9ad4aaed716e4816b342b3b4f
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/404398
> Reviewed-by: Greg Daniel <egdaniel@google.com>
> Commit-Queue: Chris Dalton <csmartdalton@google.com>
Bug: skia:11138
Bug: skia:11139
Change-Id: Iae649858844eb9fc304a84e902247edd128f2201
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/404857
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
changed from left,right,width,height params to rect.
Change-Id: Idc7e337a1c37d8cc297a1e3cf4ff7c4b6e288c43
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/411875
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Stan Iliev <stani@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
Change-Id: Ic972dfcf13b9807669d0fb29c73dca8d6a9cd939
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/410816
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
This CL:
Clumps the proxy creation & device creation parameters together in the factories
Makes the raw SkGpuDevice factory take a "const SkSurfaceProps&"
Makes both the proxy-wrapping & raw factories call the SDC-based factory
Change-Id: I73fe88b639c015691fbbccdd9ff0acf2f0dad34c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/410956
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
Change-Id: Ib73dd51f3f558aa6c6b98aa611da116d8906bf7f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/397284
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
Downloads the version of 'sk' indicated in DEPS. Tracks the version ID
and sha256 sum of the downloaded executable to ensure that the correct
version is obtained.
Change-Id: I8d54f9e0159141b3582f2d08b9f1e397bfc60e7c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/411776
Reviewed-by: Ravi Mistry <rmistry@google.com>
Commit-Queue: Eric Boren <borenet@google.com>
Change-Id: I46e5bc6d39aa185b26436e1795f50a0c7bb9905b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/411307
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
In the majority of cases, a uniform is an equally good substitute, and
replacing `sqrt(N)` with `unknownInput` actually makes the test clearer.
Change-Id: I7bcb477571972d7aa2ce8c49b3674471f7310748
Bug: skia:12034
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/411306
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Our matrix-comparison workaround should allow these tests to pass now.
Change-Id: I6e78be361f06ec5741c5d38444ace6f82fc497e2
Bug: skia:11308
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/411303
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Don't run the cull test until after we've chopped for the first time.
Inline quadTo/conicTo/cubicTo and lift the recursion into separate
methods.
tessellate_GrStrokeFixedCountTessellator bench: 2.37 -> 1.63ms
Bug: skia:10419
Change-Id: Ie7ac32985a8c3e75d554e193543e756dd73e112f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/411196
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Bug: chromium:1210557
Change-Id: Ib41cbf3236abdbb105ce818756505ff40c868cf1
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/411301
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>