• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/python
2# Copyright 2019 The ANGLE Project Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5#
6# gen_mtl_internal_shaders.py:
7#   Code generation for Metal backend's default shaders.
8#   NOTE: don't run this script directly. Run scripts/run_code_generation.py.
9
10import os
11import sys
12import json
13from datetime import datetime
14
15template_header_boilerplate = """// GENERATED FILE - DO NOT EDIT.
16// Generated by {script_name}
17//
18// Copyright {copyright_year} The ANGLE Project Authors. All rights reserved.
19// Use of this source code is governed by a BSD-style license that can be
20// found in the LICENSE file.
21//
22"""
23
24
25def main():
26    # auto_script parameters.
27    if len(sys.argv) > 1:
28        inputs = [
29            'master_source.metal', 'blit.metal', 'clear.metal', 'gen_indices.metal', 'common.h'
30        ]
31        outputs = ['compiled/mtl_default_shaders.inc', 'mtl_default_shaders_src_autogen.inc']
32
33        if sys.argv[1] == 'inputs':
34            print ','.join(inputs)
35        elif sys.argv[1] == 'outputs':
36            print ','.join(outputs)
37        else:
38            print('Invalid script parameters')
39            return 1
40        return 0
41
42    os.chdir(sys.path[0])
43
44    print('Compiling macos version of default shaders ...')
45    os.system(
46        'xcrun -sdk macosx metal master_source.metal -mmacosx-version-min=10.13 -c -o compiled/default.air'
47    )
48    os.system('xcrun -sdk macosx metallib compiled/default.air -o compiled/default.metallib')
49
50    print('Compiling ios version of default shaders ...')
51    os.system(
52        'xcrun -sdk iphoneos metal master_source.metal -mios-version-min=11.0 -c -o compiled/default.ios.air'
53    )
54    os.system(
55        'xcrun -sdk iphoneos metallib compiled/default.ios.air -o compiled/default.ios.metallib')
56
57    print('Compiling ios simulator version of default shaders ...')
58    os.system(
59        'xcrun -sdk iphonesimulator metal master_source.metal -c -o compiled/default.ios_sim.air')
60    os.system(
61        'xcrun -sdk iphonesimulator metallib compiled/default.ios_sim.air -o compiled/default.ios_sim.metallib'
62    )
63
64    boilerplate_code = template_header_boilerplate.format(
65        script_name=sys.argv[0], copyright_year=datetime.today().year)
66
67    os.system("echo \"{0}\" > compiled/mtl_default_shaders.inc".format(boilerplate_code))
68    os.system(
69        'echo "// Compiled binary for Metal default shaders.\n\n" >> compiled/mtl_default_shaders.inc'
70    )
71    os.system('echo "#include <TargetConditionals.h>\n\n" >> compiled/mtl_default_shaders.inc')
72
73    # Mac version
74    os.system(
75        'echo "#if TARGET_OS_OSX || TARGET_OS_MACCATALYST\n" >> compiled/mtl_default_shaders.inc')
76
77    os.system('echo "constexpr" >> compiled/mtl_default_shaders.inc')
78    os.system('xxd -i compiled/default.metallib >> compiled/mtl_default_shaders.inc')
79
80    # iOS simulator version
81    os.system(
82        'echo "\n#elif TARGET_OS_SIMULATOR  // TARGET_OS_OSX || TARGET_OS_MACCATALYST\n" >> compiled/mtl_default_shaders.inc'
83    )
84
85    os.system(
86        'echo "#define compiled_default_metallib     compiled_default_ios_sim_metallib" >> compiled/mtl_default_shaders.inc'
87    )
88    os.system(
89        'echo "#define compiled_default_metallib_len compiled_default_ios_sim_metallib_len\n" >> compiled/mtl_default_shaders.inc'
90    )
91    os.system('echo "constexpr" >> compiled/mtl_default_shaders.inc')
92    os.system('xxd -i compiled/default.ios_sim.metallib >> compiled/mtl_default_shaders.inc')
93
94    # iOS version
95    os.system(
96        'echo "\n#elif TARGET_OS_IOS  // TARGET_OS_OSX || TARGET_OS_MACCATALYST\n" >> compiled/mtl_default_shaders.inc'
97    )
98
99    os.system(
100        'echo "#define compiled_default_metallib     compiled_default_ios_metallib" >> compiled/mtl_default_shaders.inc'
101    )
102    os.system(
103        'echo "#define compiled_default_metallib_len compiled_default_ios_metallib_len\n" >> compiled/mtl_default_shaders.inc'
104    )
105    os.system('echo "constexpr" >> compiled/mtl_default_shaders.inc')
106    os.system('xxd -i compiled/default.ios.metallib >> compiled/mtl_default_shaders.inc')
107
108    os.system(
109        'echo "#endif  // TARGET_OS_OSX || TARGET_OS_MACCATALYST\n" >> compiled/mtl_default_shaders.inc'
110    )
111
112    # Write full source string for debug purpose
113    os.system("echo \"{0}\" > mtl_default_shaders_src_autogen.inc".format(boilerplate_code))
114    os.system(
115        'echo "// C++ string version of Metal default shaders for debug purpose.\n\n" >> mtl_default_shaders_src_autogen.inc'
116    )
117    os.system(
118        'echo "\n\nconstexpr char default_metallib_src[] = R\\"(" >> mtl_default_shaders_src_autogen.inc'
119    )
120    os.system('echo "#include <metal_stdlib>" >> mtl_default_shaders_src_autogen.inc')
121    os.system('echo "#include <simd/simd.h>" >> mtl_default_shaders_src_autogen.inc')
122    os.system(
123        'clang -xc++ -E -DSKIP_STD_HEADERS master_source.metal >> mtl_default_shaders_src_autogen.inc'
124    )
125    os.system('echo ")\\";" >> mtl_default_shaders_src_autogen.inc')
126
127
128if __name__ == '__main__':
129    sys.exit(main())
130