This will allow perf to give us insights on SkVM code generation
performance, so that any regressions are automatically noticed and
trends over time can be observed.
This CL includes three separate benchmarks:
- skvm: Compile SkSL to SkVM with no optimization pass
- skvm_opt: Compile to SkVM and perform optimization/DCE
- skvm_jit: Compile, optimize/DCE, and generate native assembly via JIT
Change-Id: I54ad20d7adb9c5e66d33a2fb761303a269341ff2
Bug: skia:13259
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/533957
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
getType() is super high-traffic, so we need to make sure that we're
avoiding heap allocations by using Words{...} around our op words. This
constructs an SkSTArray<8, Word> instead of just an SkTArray<Word>.
This makes a noticeable difference in optimized performance:
http://screen/zbwLy8xFqfF4CoU
Change-Id: Ic747ae95e02593666c47ba9b80d7c679d51ffa50
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/533958
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
SkVM does not support nonconstant array indexing because this is an ES3
feature, but sksl_large was using the ES3-specific looping binary
colorizer for gradients. This prevented SkVM from compiling the
benchmark. sksl_large has been regenerated with
`nonconstantArrayIndexSupport` set to false in the GrShaderCaps.
Change-Id: If706d9544d1bc0d9c49c59c925a517f677262c85
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/533956
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Trying to track down an intermittent failure.
Rerun-Tryjobs: true
Change-Id: Iaa61db90eae72403972fb8262d271c9f6447786f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/533880
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Previously, we used the Imgui paint shader. However, it uses a custom
mesh now. This increases its starting size substantially. The bitmap
text shader is a better example of a compact but still functionally-
useful shader.
(I also checked the medium and large shaders; these have not changed at
all since our last update, since Ganesh rarely changes now.)
Change-Id: I8e41aeaf4241d64910bd8188155ba428a6b0dbaa
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/533879
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>
As a virtual method, there isn't a specific reason for deleteFence
to prescribe const-ness onto GrGpu implementations. This function is no
longer declared as const.
Change-Id: I3016769fd7a114e14f7f5b03ba1931e5130e8060
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/533757
Reviewed-by: Greg Daniel <egdaniel@google.com>
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Commit-Queue: Arman Uguray <armansito@google.com>
https://bazel.build/reference/command-line-reference#flag--remote_download_minimal
This will hopefully speed up CI builds by a few seconds
because we don't have to copy the builds from the
RBE instances to our machines running the bazel task.
Testing locally, a build with an empty local bazel cache
but warm remote cache took 35 seconds with the status
quo and 13 seconds with the new flag.
Change-Id: I04ba4b0d7ba7864746c52d103be14f4f7b238d39
Bug: skia:12541
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/533756
Reviewed-by: Erik Rose <erikrose@google.com>
Reviewed-by: Leandro Lovisolo <lovisolo@google.com>
This was breaking:
bazel build //tools/skdiff --config=clang
which does not compile with any GPU backend.
Change-Id: I0f95ebbab6542f7ae5ea8f8a87ea2a5a5d01d993
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/532760
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Kevin Lubick <kjlubick@google.com>
This is a reland of commit 866bd64c1b
Original change's description:
> Check that the GrBackendFormat of a promise image is textureable.
>
> Bug: chromium:1311844
> Change-Id: I13bae71305ae9520851cd1ea38a1da737b934dd1
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/532196
> Reviewed-by: Brian Salomon <bsalomon@google.com>
> Commit-Queue: Greg Daniel <egdaniel@google.com>
Bug: chromium:1311844
Change-Id: I01e2d0e4eb01ee7d97798db6eeff73fec76bf521
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/532408
Auto-Submit: Greg Daniel <egdaniel@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
This is only referenced by tessellation code now, so it's been moved to
GrTessellationShader.cpp. (In the near future, we may remove this code
entirely, since it is not very impactful for performance.)
Change-Id: Id0f176220efb3eeed63e08c2c1faa48df07cd124
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/533676
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
This will allow the SkSL compiler to avoid reprocessing it each time
it is used. This reduces the input SkSL for most Graphite vertex
programs to just a few lines of code.
This also deduplicates a lot of identical SkSL between the
TesselateWedges and TesselateCurves render steps.
Change-Id: I697b3284eba1ede8a2643ba9f4d76b699d3fd756
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/533576
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
This will allow the SkSL compiler to avoid reprocessing it each time
it is used.
Unfortunately, Ganesh also uses this code and appears to inject it
directly into GLSL programs (not SkSL), so we can't remove
`wangs_formula::to_sksl` entirely without making significant Ganesh
changes. (We could probably move it into ganesh, though.)
Change-Id: I4468b22f5ef4d19f2afeaff2d6b4fda5cbcfed9b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/533399
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
At http://review.skia.org/469525, I updated ExpressionStatement::Make so
that it would report errors in the case of an incomplete expression, but
neglected to split it into a Convert/Make pair. Now, like other
statements, it has a Convert path (for clean error reporting) and a Make
path (for already-error-checked IR construction).
Change-Id: Id89b6220beb5d815b5ae5a663b7fc4c0509d0c40
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/532786
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
This reverts commit 8a54d86c78.
Reason for revert: Causing issues with Android CTS
Original change's description:
> Move SkCamera.h to client_utils/android
>
> Android still uses this
> https://developer.android.com/reference/android/graphics/Camera
> but no other client does.
>
> This adds a little adaption layer until Android is updated
> to use the View3D version.
>
> Move SkCamera.h to View3D.h. Change names to android::skia::CLASS
> instead of SkCLASS. (3DView is not a valid class name, so rename it to
> View3D.)
>
> Forward-declare SkMatrix. Do not override SkNoncopyable - just delete
> the copy constructor/operator=. Make fU and fV private in Patch3D.
>
> Make Sk3DView override View3D temporarily until Android can be switched
> over to the new class.
>
> (View3D from http://review.skia.org/291371)
>
> I made Patch3D and Camera3D be private classes as they are
> currently not used by Android and wanted to constrain the
> exposed API as much as possible.
>
> Change-Id: Ibde45478421feeb610e045205c3f20c0e5b1567e
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/532456
> Reviewed-by: Brian Osman <brianosman@google.com>
> Reviewed-by: Leon Scroggins <scroggo@google.com>
> Commit-Queue: Kevin Lubick <kjlubick@google.com>
Change-Id: If6e768524a0e13e14ef886a6f081a09ddc0dc2fd
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/533396
Owners-Override: Kevin Lubick <kjlubick@google.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: Kevin Lubick <kjlubick@google.com>
Change-Id: I225de583d408f1ca29e7e74d591e9be1ab2cbc20
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/532785
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>
We now have a new type of ProgramKind, private runtime shaders.
`sksl_rt_effect.sksl` is now only loaded for these kinds of program.
Rather than having a special-case check for sk_FragCoord in
SkRuntimeEffect, the symbol will no longer exist at all unless a private
options flag is set.
Change-Id: I9223baaf59d74c44d64f322cd57fc841625342b7
Bug: skia:12202
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/532784
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Right now nothing prevents it from working. (skslc doesn't use
SkRuntimeEffect::MakeInternal.) This will be fixed in a followup.
Change-Id: Ib8479220e1f194b035516d976a7369d926a07f5d
Bug: skia:12202
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/532783
Reviewed-by: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Callers have already stripped off any array, so assert that's true. I
also double-checked the various tests in that function -- I think
they're all valid whether or not the baseType started out as an array.
Change-Id: Ia7c75e5e4d4b0e5946dbc6989ae05418f90d642a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/532782
Reviewed-by: John Stiles <johnstiles@google.com>
Reviewed-by: Arman Uguray <armansito@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
This has two benefits:
1) We get detailed error messages with accurate positions
2) We can actually test these in our golden .rts files.
Thanks to #2, add a new unit test file, and adjust some existing files
that were breaking these rules.
Change-Id: I0b65e2f06f79ce8cbea9bad4c3d27062ec9b6e6c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/532769
Reviewed-by: Arman Uguray <armansito@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Bug: skia:13169
Change-Id: Icf0b720d3e3a13d490aba8495cf9db83d1d62318
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/532762
Reviewed-by: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Bug: skia:12967
Change-Id: I79614b1f65638cc05e40bbe51605882ea41acc2e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/532767
Reviewed-by: Eric Boren <borenet@google.com>
Commit-Queue: Ravi Mistry <rmistry@google.com>
This will allow us to reuse this logic in Graphite.
Change-Id: I649dcd3893a1355af457a2583a6db3066fb87c9a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/532758
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>
This will allow Graphite to use it.
Change-Id: I99cf9c18842031619aa1a008c9f35adbaaa5156b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/532776
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Bug: skia:13170
Change-Id: I11ef0ea5ac3ae61b24a47805bb3290a37880cfee
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/532536
Reviewed-by: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
There is enough Slug infrastructure in place that this can be
turned on without the need for -D flags. This allows Slugs
to be tested in the CQ.
Change-Id: I1ff5cecb5acc061ff6e59702fff5af8aba92523a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/532757
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Herb Derby <herb@google.com>
Android still uses this
https://developer.android.com/reference/android/graphics/Camera
but no other client does.
This adds a little adaption layer until Android is updated
to use the View3D version.
Move SkCamera.h to View3D.h. Change names to android::skia::CLASS
instead of SkCLASS. (3DView is not a valid class name, so rename it to
View3D.)
Forward-declare SkMatrix. Do not override SkNoncopyable - just delete
the copy constructor/operator=. Make fU and fV private in Patch3D.
Make Sk3DView override View3D temporarily until Android can be switched
over to the new class.
(View3D from http://review.skia.org/291371)
I made Patch3D and Camera3D be private classes as they are
currently not used by Android and wanted to constrain the
exposed API as much as possible.
Change-Id: Ibde45478421feeb610e045205c3f20c0e5b1567e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/532456
Reviewed-by: Brian Osman <brianosman@google.com>
Reviewed-by: Leon Scroggins <scroggo@google.com>
Commit-Queue: Kevin Lubick <kjlubick@google.com>
This is a reland of commit a370ecf9fc
Original change's description:
> [infra] Update iOS device provisioning profile.
>
> We're moving from Apple's Enterprise program to their Developer program,
> which requires a new profile. Versions 7 and 8 were mistaken uploads of
> who-knows-what by yours truly, so we skip them.
>
> Change-Id: I1b7913781eae5c643e60b47ad374a4365cef7bce
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/531553
> Reviewed-by: Ravi Mistry <rmistry@google.com>
> Commit-Queue: Erik Rose <erikrose@google.com>
Change-Id: Idd8781b35632455332f735a665fe6956c3aedd71
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/532778
Reviewed-by: Joe Gregorio <jcgregorio@google.com>
Commit-Queue: Joe Gregorio <jcgregorio@google.com>
Static SkSL lives in `sksl_graphite_frag.sksl` now. In order to make
changes to the static code, please set `skia_compile_modules = true` in
your GN args.
Change-Id: I5c04f5fc7fdb835d0c3ff6cf6c1b054722ea35d1
Bug: skia:13110
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/532407
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
This allows us to pre-parse and analyze the code once at startup,
instead of every time a shader is assembled.
In order to make changes to `sksl_graphite_frag.sksl`, please set
`skia_compile_modules = true` in your GN args. This will cause the
dehydrated code to be regenerated at build time. This should not slow
down normal builds; it only rebuilds when dirty.
Change-Id: I08f2005399ea3a12726946db1e3f2c39f9c24df8
Bug: skia:13110
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/532398
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Graphite code snippets can be moved into these files; they will be
compiled once at build time and dehydrated for later use. This allows us
to avoid synthesizing and compiling them in each shader where they are
referenced. (Unfortunately, the GPU driver will still need to compile
them each time.)
Change-Id: I5cdc5881d71d7b81a02c91a84d52804f2909b483
Bug: skia:13110
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/532259
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Previously, we would not scan our base module for variable usage when
preparing to optimize a loaded module. This worked in practice, because
modules were previously unable to call code inside other modules at all.
Change-Id: I1936485ed9f4160cad785d6227102dd1d9ffb34e
Bug: skia:13164
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/532397
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Bug: skia:12701
Change-Id: Icb2da9fb12f1bf815cda7d337dba6092aaba0612
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/531317
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
Devs who cannot run IWYU locally (yet) should get more detailed
errors from this and require fewer CQ jobs to fix any errors.
Change-Id: Icdbfba3feaeadb6c180fb1d3ea4a754b8d3ce51d
Bug: skia:12541
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/532402
Reviewed-by: John Stiles <johnstiles@google.com>
We need to use `possiblyBuiltinSymbolRef` when rehydrating variable
references to account for dehydrated code which accesses variables like
sk_FragCoord.
Change-Id: I2ae596eb0c78b289b69fa1dd10bf01b83981a0f6
Bug: skia:13164
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/532237
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>