Commit 149eb33b by Shahbaz Youssefi Committed by Commit Bot

Vulkan: add possibility to build subset of shaders

As the number of internal shaders grow, it's helpful in development time to be able to build variations of a specific shader, instead of building everything every time. With this commit, one can do: $ python gen_vk_internal_shaders.py SubString which will result in compilation of shaders whose name matches the glob *SubString*. Bug: angleproject:2958 Change-Id: I3b18d7e32e2ec4317531a7655eb2c6148cea177b Reviewed-on: https://chromium-review.googlesource.com/c/1369285 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: 's avatarYuly Novikov <ynovikov@chromium.org>
parent 153e0224
...@@ -76,7 +76,7 @@ ...@@ -76,7 +76,7 @@
"Vulkan format:src/libANGLE/renderer/vulkan/vk_format_map.json": "Vulkan format:src/libANGLE/renderer/vulkan/vk_format_map.json":
"84f988ff75f4d5b8f2a5d572ee8c51cc", "84f988ff75f4d5b8f2a5d572ee8c51cc",
"Vulkan internal shader programs:src/libANGLE/renderer/vulkan/gen_vk_internal_shaders.py": "Vulkan internal shader programs:src/libANGLE/renderer/vulkan/gen_vk_internal_shaders.py":
"67754dea576e315267a61eccd819a32f", "3faf63ba4dac90b949c96a3e382ba81b",
"Vulkan internal shader programs:src/libANGLE/renderer/vulkan/shaders/src/BufferUtils.comp": "Vulkan internal shader programs:src/libANGLE/renderer/vulkan/shaders/src/BufferUtils.comp":
"0c8c050841543da0d7faca2559212aa8", "0c8c050841543da0d7faca2559212aa8",
"Vulkan internal shader programs:src/libANGLE/renderer/vulkan/shaders/src/FullScreenQuad.vert": "Vulkan internal shader programs:src/libANGLE/renderer/vulkan/shaders/src/FullScreenQuad.vert":
......
...@@ -253,11 +253,19 @@ shaders_dir = os.path.join('shaders', 'src') ...@@ -253,11 +253,19 @@ shaders_dir = os.path.join('shaders', 'src')
if not os.path.isdir(shaders_dir): if not os.path.isdir(shaders_dir):
raise Exception("Could not find shaders directory") raise Exception("Could not find shaders directory")
print_inputs = len(sys.argv) == 2 and sys.argv[1] == 'inputs'
print_outputs = len(sys.argv) == 2 and sys.argv[1] == 'outputs'
# If an argument X is given that's not inputs or outputs, compile shaders that match *X*.
# This is useful in development to build only the shader of interest.
shader_files_to_compile = os.listdir(shaders_dir)
if not (print_inputs or print_outputs or len(sys.argv) < 2):
shader_files_to_compile = [f for f in shader_files_to_compile if f.find(sys.argv[1]) != -1]
valid_extensions = ['.vert', '.frag', '.comp'] valid_extensions = ['.vert', '.frag', '.comp']
input_shaders = sorted([os.path.join(shaders_dir, shader) input_shaders = sorted([os.path.join(shaders_dir, shader)
for shader in os.listdir(shaders_dir) for shader in os.listdir(shaders_dir)
if any([os.path.splitext(shader)[1] == ext for ext in valid_extensions])]) if any([os.path.splitext(shader)[1] == ext for ext in valid_extensions])])
if len(sys.argv) == 2 and sys.argv[1] == 'inputs': if print_inputs:
print(",".join(input_shaders)) print(",".join(input_shaders))
sys.exit(0) sys.exit(0)
...@@ -344,8 +352,6 @@ class ShaderAndVariations: ...@@ -344,8 +352,6 @@ class ShaderAndVariations:
input_shaders_and_variations = [ShaderAndVariations(shader_file) for shader_file in input_shaders] input_shaders_and_variations = [ShaderAndVariations(shader_file) for shader_file in input_shaders]
print_outputs = len(sys.argv) == 2 and sys.argv[1] == 'outputs'
for shader_and_variation in input_shaders_and_variations: for shader_and_variation in input_shaders_and_variations:
shader_file = shader_and_variation.shader_file shader_file = shader_and_variation.shader_file
flags = shader_and_variation.flags flags = shader_and_variation.flags
...@@ -360,11 +366,12 @@ for shader_and_variation in input_shaders_and_variations: ...@@ -360,11 +366,12 @@ for shader_and_variation in input_shaders_and_variations:
output_name = os.path.basename(shader_file) output_name = os.path.basename(shader_file)
while True: while True:
do_compile = not print_outputs and output_name in shader_files_to_compile
# a number where each bit says whether a flag is active or not, # a number where each bit says whether a flag is active or not,
# with values in [0, 2^len(flags)) # with values in [0, 2^len(flags))
for flags_active in range(1 << len(flags)): for flags_active in range(1 << len(flags)):
compile_variation(shader_file, output_name, flags, enums, compile_variation(shader_file, output_name, flags, enums,
flags_active, enum_indices, flags_bits, enum_bits, not print_outputs) flags_active, enum_indices, flags_bits, enum_bits, do_compile)
if not next_enum_variation(enums, enum_indices): if not next_enum_variation(enums, enum_indices):
break break
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment