Clean up SkSL test compilation in preparation for Metal support.
Now uses a GN template to avoid copy-pasting the same logic for each
type of test we want to perform, and the same file to be compiled in
more than one way at a time via an extra flag to compile_sksl_tests.py.
Change-Id: I8aadedeb140d78d58a345a2bac0da3d9c77e9a19
Bug: skia:10694
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/319347
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
diff --git a/BUILD.gn b/BUILD.gn
index 0876f76..02e3462 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -670,77 +670,74 @@
if (skia_compile_sksl_tests) {
import("gn/sksl_tests.gni")
- sksl_fp_tests_outputs = []
- foreach(src, sksl_fp_tests_sources) {
- dir = get_path_info(src, "dir")
- name = get_path_info(src, "name")
- sksl_fp_tests_outputs += [
- "$target_out_dir/" + rebase_path("$dir/golden/$name.cpp", target_out_dir),
- "$target_out_dir/" + rebase_path("$dir/golden/$name.h", target_out_dir),
- ]
- }
- sksl_glsl_tests_outputs = []
- foreach(src, sksl_glsl_tests_sources) {
- dir = get_path_info(src, "dir")
- name = get_path_info(src, "name")
- sksl_glsl_tests_outputs +=
- [ "$target_out_dir/" +
- rebase_path("$dir/golden/$name.glsl", target_out_dir) ]
+ template("compile_sksl") {
+ # Compile the passed-in `sources` into `outputs` using skslc, with the given language/settings.
+ action("compile_sksl_${target_name}") {
+ script = "gn/compile_sksl_tests.py"
+ deps = [
+ ":create_sksl_fp",
+ ":sksl_pre_includes",
+ ":skslc(//gn/toolchain:$host_toolchain)",
+ ]
+ sources = invoker.sources
+ outputs = []
+ foreach(src, sources) {
+ dir = get_path_info(src, "dir")
+ name = get_path_info(src, "name")
+ foreach(outputPattern, invoker.outputPatterns) {
+ outputs += [ target_out_dir + "/" + rebase_path(
+ dir + outputPattern[0] + name + outputPattern[1],
+ target_out_dir) ]
+ }
+ }
+ args = [
+ rebase_path(skslc_path),
+ invoker.lang,
+ invoker.settings,
+ ]
+ args += rebase_path(sources)
+ }
}
-
- sksl_glsl_settings_tests_outputs = []
- foreach(src, sksl_glsl_settings_tests_sources) {
- dir = get_path_info(src, "dir")
- name = get_path_info(src, "name")
- sksl_glsl_tests_outputs +=
- [ "$target_out_dir/" +
- rebase_path("$dir/golden/$name.glsl", target_out_dir) ]
- sksl_glsl_settings_tests_outputs +=
- [ "$target_out_dir/" +
- rebase_path("$dir/golden/${name}StandaloneSettings.glsl",
- target_out_dir) ]
+ compile_sksl("fp_tests") {
+ sources = sksl_fp_tests_sources
+ outputPatterns = [
+ [
+ "/golden/",
+ ".cpp",
+ ],
+ [
+ "/golden/",
+ ".h",
+ ],
+ ]
+ lang = "--fp"
+ settings = "--settings"
}
-
- action("compile_sksl_tests") {
- # This action compiles SkSL tests with their settings enabled, i.e. in --settings mode.
- script = "gn/compile_sksl_tests.py"
- deps = [
- ":create_sksl_fp",
- ":sksl_pre_includes",
- ":skslc(//gn/toolchain:$host_toolchain)",
- ]
- sources = sksl_fp_tests_sources + sksl_glsl_tests_sources +
- sksl_glsl_settings_tests_sources
- outputs = sksl_fp_tests_outputs + sksl_glsl_tests_outputs
- args = [
- rebase_path(skslc_path),
- "--settings",
- ]
- args += rebase_path(sksl_fp_tests_sources)
- args += rebase_path(sksl_glsl_tests_sources)
- args += rebase_path(sksl_glsl_settings_tests_sources)
+ compile_sksl("glsl_tests") {
+ sources = sksl_glsl_tests_sources + sksl_glsl_settings_tests_sources
+ outputPatterns = [ [
+ "/golden/",
+ ".glsl",
+ ] ]
+ lang = "--glsl"
+ settings = "--settings"
}
- action("compile_sksl_tests_nosettings") {
- # This action compiles SkSL tests with their settings disabled, i.e. in --nosettings mode.
- script = "gn/compile_sksl_tests.py"
- deps = [
- ":create_sksl_fp",
- ":sksl_pre_includes",
- ":skslc(//gn/toolchain:$host_toolchain)",
- ]
+ compile_sksl("glsl_nosettings_tests") {
sources = sksl_glsl_settings_tests_sources
- outputs = sksl_glsl_settings_tests_outputs
- args = [
- rebase_path(skslc_path),
- "--nosettings",
- ]
- args += rebase_path(sksl_glsl_settings_tests_sources)
+ outputPatterns = [ [
+ "/golden/",
+ "StandaloneSettings.glsl",
+ ] ]
+ lang = "--glsl"
+ settings = "--nosettings"
}
} else {
- group("compile_sksl_tests") {
+ group("compile_sksl_fp_tests") {
}
- group("compile_sksl_tests_nosettings") {
+ group("compile_sksl_glsl_tests") {
+ }
+ group("compile_sksl_glsl_nosettings_tests") {
}
}
@@ -748,8 +745,9 @@
enabled = skia_enable_gpu
deps = [
":compile_processors",
- ":compile_sksl_tests",
- ":compile_sksl_tests_nosettings",
+ ":compile_sksl_fp_tests",
+ ":compile_sksl_glsl_nosettings_tests",
+ ":compile_sksl_glsl_tests",
":dehydrate_sksl",
":run_sksllex",
]