Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 1c514d4

Browse files
committed
Analyze more shaders
1 parent 0513cef commit 1c514d4

File tree

8 files changed

+9160
-2560
lines changed

8 files changed

+9160
-2560
lines changed

ci/licenses_golden/excluded_files

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@
154154
../../../flutter/impeller/tessellator/tessellator_unittests.cc
155155
../../../flutter/impeller/tools/build_metal_library.py
156156
../../../flutter/impeller/tools/check_licenses.py
157+
../../../flutter/impeller/tools/malioc_cores.py
157158
../../../flutter/impeller/tools/malioc_diff.py
158159
../../../flutter/impeller/tools/xxd.py
159160
../../../flutter/impeller/typographer/typographer_unittests.cc

impeller/entity/BUILD.gn

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ import("//flutter/impeller/tools/impeller.gni")
77
impeller_shaders("entity_shaders") {
88
name = "entity"
99

10+
if (impeller_enable_vulkan) {
11+
vulkan_language_version = 130
12+
}
13+
1014
shaders = [
1115
"shaders/blending/advanced_blend.vert",
1216
"shaders/blending/advanced_blend_color.frag",
@@ -69,7 +73,11 @@ impeller_shaders("modern_entity_shaders") {
6973
name = "modern"
7074

7175
if (impeller_enable_opengles) {
72-
gles_language_version = "460"
76+
gles_language_version = 460
77+
}
78+
79+
if (impeller_enable_vulkan) {
80+
vulkan_language_version = 130
7381
}
7482

7583
shaders = [
@@ -91,7 +99,11 @@ impeller_shaders("framebuffer_blend_entity_shaders") {
9199

92100
# This version is to disable malioc checks.
93101
if (impeller_enable_opengles) {
94-
gles_language_version = "460"
102+
gles_language_version = 460
103+
}
104+
105+
if (impeller_enable_vulkan) {
106+
vulkan_language_version = 130
95107
}
96108

97109
shaders = [

impeller/scene/shaders/BUILD.gn

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ import("//flutter/impeller/tools/impeller.gni")
77
impeller_shaders("shaders") {
88
name = "scene"
99

10+
if (impeller_enable_vulkan) {
11+
vulkan_language_version = 130
12+
}
13+
1014
shaders = [
1115
"skinned.vert",
1216
"unskinned.vert",

impeller/tools/impeller.gni

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,7 @@ template("impeller_shaders_gles") {
560560
template("impeller_shaders_vk") {
561561
assert(defined(invoker.shaders), "Impeller shaders must be specified.")
562562
assert(defined(invoker.name), "Name of the shader library must be specified.")
563+
assert(defined(invoker.analyze), "Whether to analyze must be specified.")
563564

564565
shaders_base_name = string_join("",
565566
[
@@ -583,10 +584,23 @@ template("impeller_shaders_vk") {
583584
defines = [ "IMPELLER_TARGET_VULKAN" ]
584585
}
585586

587+
vk_shaders =
588+
filter_include(get_target_outputs(":$impellerc_vk"), [ "*.vkspv" ])
589+
590+
if (invoker.analyze) {
591+
analyze_lib = "analyze_$target_name"
592+
malioc_analyze_shaders(analyze_lib) {
593+
shaders = vk_shaders
594+
if (defined(invoker.vulkan_language_version)) {
595+
vulkan_language_version = invoker.vulkan_language_version
596+
}
597+
deps = [ ":$impellerc_vk" ]
598+
}
599+
}
600+
586601
vk_lib = "genlib_$target_name"
587602
blobcat_library(vk_lib) {
588-
shaders =
589-
filter_include(get_target_outputs(":$impellerc_vk"), [ "*.vkspv" ])
603+
shaders = vk_shaders
590604
deps = [ ":$impellerc_vk" ]
591605
}
592606

@@ -608,6 +622,10 @@ template("impeller_shaders_vk") {
608622
group(target_name) {
609623
public_deps = [ ":$embed_vk_lib" ]
610624

625+
if (invoker.analyze) {
626+
public_deps += [ ":$analyze_lib" ]
627+
}
628+
611629
if (!impeller_enable_metal) {
612630
public_deps += [ ":$reflect_vk" ]
613631
}
@@ -656,11 +674,19 @@ template("impeller_shaders") {
656674
}
657675

658676
if (impeller_enable_vulkan) {
677+
analyze = true
678+
if (defined(invoker.analyze) && !invoker.analyze) {
679+
analyze = false
680+
}
659681
vk_shaders = "vk_$target_name"
660682
impeller_shaders_vk(vk_shaders) {
661683
name = invoker.name
684+
if (defined(invoker.vulkan_language_version)) {
685+
vulkan_language_version = invoker.vulkan_language_version
686+
}
662687
shaders = invoker.shaders
663688
metal_version = metal_version
689+
analyze = analyze
664690
}
665691
}
666692

impeller/tools/malioc.gni

Lines changed: 86 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -10,109 +10,114 @@ declare_args() {
1010
# Path to the Mali offline compiler tool 'malioc'.
1111
impeller_malioc_path = ""
1212

13-
impeller_malioc_cores = []
13+
impeller_malioc_core_filter = [
14+
"Mali-G78",
15+
"Mali-T880",
16+
]
1417
}
1518

16-
if (impeller_malioc_path != "" && impeller_malioc_cores == []) {
17-
core_list_file = "$root_build_dir/mali_core_list.json"
18-
exec_script("//build/gn_run_binary.py",
19+
if (impeller_malioc_path != "") {
20+
_core_list_file = "$root_build_dir/mali_core_list.json"
21+
exec_script("//flutter/impeller/tools/malioc_cores.py",
1922
[
23+
"--malioc",
2024
rebase_path(impeller_malioc_path, root_build_dir),
21-
"--list",
22-
"--format",
23-
"json",
2425
"--output",
25-
rebase_path(core_list_file),
26+
rebase_path(_core_list_file),
2627
])
27-
_mali_cores = read_file(core_list_file, "json")
28-
foreach(mali_core, _mali_cores.cores) {
29-
impeller_malioc_cores += [ mali_core.core ]
30-
}
28+
_impeller_malioc_cores = read_file(_core_list_file, "json")
3129
}
3230

3331
template("malioc_analyze_shaders") {
34-
# TODO(zra): Check that gles_language_version is in the supported set. For now
35-
# assume that if it is set, it is being set to 460, which malioc does not
36-
# support.
37-
if (impeller_malioc_path == "" || defined(invoker.gles_language_version)) {
38-
if (defined(invoker.gles_language_version) &&
39-
invoker.gles_language_version != "460") {
40-
print("Disabling analysis for shaders in $target_name due to gles",
41-
"version explicitly set to ${invoker.gles_language_version}.")
42-
}
32+
if (impeller_malioc_path == "") {
4333
group(target_name) {
4434
not_needed(invoker, "*")
4535
}
4636
} else {
4737
target_deps = []
48-
foreach(core, impeller_malioc_cores) {
49-
foreach(source, invoker.shaders) {
50-
shader_file_name = get_path_info(source, "name")
51-
analysis_target = "${target_name}_${shader_file_name}_${core}_malioc"
52-
target_deps += [ ":$analysis_target" ]
53-
action(analysis_target) {
54-
forward_variables_from(invoker,
55-
"*",
56-
[
57-
"args",
58-
"depfile",
59-
"inputs",
60-
"outputs",
61-
"pool",
62-
"script",
63-
])
38+
foreach(core, _impeller_malioc_cores) {
39+
foreach(filter_core, impeller_malioc_core_filter) {
40+
if (core.core == filter_core) {
41+
foreach(source, invoker.shaders) {
42+
# Should be "gles" or "vkspv"
43+
backend_ext = get_path_info(source, "extension")
44+
assert(
45+
backend_ext == "gles" || backend_ext == "vkspv",
46+
"Shader for unsupported backend passed to malioc: {{source}}")
47+
shader_file_name = get_path_info(source, "name")
48+
analysis_target =
49+
"${target_name}_${shader_file_name}_${core.core}_malioc"
50+
if ((backend_ext == "gles" &&
51+
defined(invoker.gles_language_version) &&
52+
core.opengles_max_version < invoker.gles_language_version) ||
53+
(backend_ext == "vkspv" &&
54+
defined(invoker.vulkan_language_version) &&
55+
core.vulkan_max_version < invoker.vulkan_language_version)) {
56+
group(analysis_target) {
57+
not_needed(invoker, "*")
58+
}
59+
} else {
60+
target_deps += [ ":$analysis_target" ]
61+
action(analysis_target) {
62+
forward_variables_from(invoker,
63+
"*",
64+
[
65+
"args",
66+
"depfile",
67+
"inputs",
68+
"outputs",
69+
"pool",
70+
"script",
71+
])
6472

65-
script = "//build/gn_run_binary.py"
66-
pool = "//flutter/impeller/tools:malioc_pool"
73+
script = "//build/gn_run_binary.py"
74+
pool = "//flutter/impeller/tools:malioc_pool"
6775

68-
# Should be "gles" or "vkspv"
69-
backend_ext = get_path_info(source, "extension")
70-
assert(backend_ext == "gles",
71-
"Shader for unsupported backend passed to malioc: {{source}}")
76+
# Nest all malioc output under its own subdirectory of root_gen_dir
77+
# so that it's easier to diff it against the state before any changes.
78+
subdir = rebase_path(target_gen_dir, root_gen_dir)
79+
output_file = "$root_gen_dir/malioc/$subdir/${shader_file_name}.${backend_ext}.${core.core}.json"
80+
outputs = [ output_file ]
7281

73-
# Nest all malioc output under its own subdirectory of root_gen_dir
74-
# so that it's easier to diff it against the state before any changes.
75-
subdir = rebase_path(target_gen_dir, root_gen_dir)
76-
output_file =
77-
"$root_gen_dir/malioc/$subdir/${shader_file_name}.$core.json"
78-
outputs = [ output_file ]
82+
# Determine the kind of the shader from the file name
83+
name = get_path_info(source, "name")
84+
shader_kind_ext = get_path_info(name, "extension")
7985

80-
# Determine the kind of the shader from the file name
81-
name = get_path_info(source, "name")
82-
shader_kind_ext = get_path_info(name, "extension")
86+
if (shader_kind_ext == "comp") {
87+
shader_kind_flag = "--compute"
88+
} else if (shader_kind_ext == "frag") {
89+
shader_kind_flag = "--fragment"
90+
} else if (shader_kind_ext == "geom") {
91+
shader_kind_flag = "--geometry"
92+
} else if (shader_kind_ext == "tesc") {
93+
shader_kind_flag = "--tessellation_control"
94+
} else if (shader_kind_ext == "tese") {
95+
shader_kind_flag = "--tessellation_evaluation"
96+
} else if (shader_kind_ext == "vert") {
97+
shader_kind_flag = "--vertex"
98+
} else {
99+
assert(false, "Unknown shader kind: {{source}}")
100+
}
83101

84-
if (shader_kind_ext == "comp") {
85-
shader_kind_flag = "--compute"
86-
} else if (shader_kind_ext == "frag") {
87-
shader_kind_flag = "--fragment"
88-
} else if (shader_kind_ext == "geom") {
89-
shader_kind_flag = "--geometry"
90-
} else if (shader_kind_ext == "tesc") {
91-
shader_kind_flag = "--tessellation_control"
92-
} else if (shader_kind_ext == "tese") {
93-
shader_kind_flag = "--tessellation_evaluation"
94-
} else if (shader_kind_ext == "vert") {
95-
shader_kind_flag = "--vertex"
96-
} else {
97-
assert(false, "Unknown shader kind: {{source}}")
98-
}
102+
args = [
103+
rebase_path(impeller_malioc_path, root_build_dir),
104+
"--format",
105+
"json",
106+
shader_kind_flag,
107+
"--core",
108+
core.core,
109+
"--output",
110+
rebase_path(output_file),
111+
]
99112

100-
args = [
101-
rebase_path(impeller_malioc_path, root_build_dir),
102-
"--format",
103-
"json",
104-
shader_kind_flag,
105-
"--core",
106-
core,
107-
"--output",
108-
rebase_path(output_file),
109-
]
113+
if (backend_ext == "vkspv") {
114+
args += [ "--vulkan" ]
115+
}
110116

111-
if (backend_ext == "vkspv") {
112-
args += [ "--vulkan" ]
117+
args += [ rebase_path(source) ]
118+
}
119+
}
113120
}
114-
115-
args += [ rebase_path(source) ]
116121
}
117122
}
118123
}

0 commit comments

Comments
 (0)