1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
#!/usr/bin/env python3
from getopt import getopt, GetoptError
import re
import sys, os
import subprocess
from concurrent.futures import ThreadPoolExecutor
from multiprocessing import cpu_count
def usage():
USAGE = """\
Usage: %(progName)s [shader.frag] [shader.vert]
Options:
-h, --help Show this message
"""
print(USAGE % {'progName': sys.argv[0]})
sys.exit(1)
def run_test(filename):
command = ['./bin/glslparsertest',
filename,
'pass']
env_add = {}
env_add["shader_precompile"] = "true"
env_add["INTEL_DEBUG"] = "vs,wm"
env = os.environ.copy()
env.update(env_add)
try:
p = subprocess.Popen(
command,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
env=env)
except:
return filename + " FAIL"
try:
(stdout, stderr) = p.communicate()
results = (stdout + stderr).decode("utf-8")
except KeyboardInterrupt:
exit(1)
except:
return filename + " FAIL"
with open(filename + '.out', 'w') as file:
file.write(results)
current_type = 'UNKNOWN'
counts = {}
lines = list(results.split('\n'))
re_fs_8 = re.compile("^Native code for fragment.*8-wide")
re_fs_16 = re.compile("^Native code for fragment.*16-wide")
re_vs = re.compile("^Native code for vertex")
re_align = re.compile("{ align")
counts["vs "] = 0
counts["fs8 "] = 0
counts["fs16"] = 0
for line in lines:
if (re.search(re_vs, line)):
current_type = "vs "
elif (re.search(re_fs_8, line)):
current_type = "fs8 "
elif (re.search(re_fs_16, line)):
current_type = "fs16"
elif (re.search(re_align, line)):
counts[current_type] = counts[current_type] + 1
out = ''
for t in counts:
if counts[t] != 0:
out += "".join([filename, " ", t, ": ", str(counts[t]), "\n"])
return out
def main():
try:
option_list = [
"help",
]
options, args = getopt(sys.argv[1:], "h", option_list)
except GetoptError:
usage()
for name, value in options:
if name in ('-h', '--help'):
usage()
if len(args) < 1:
usage()
try:
os.stat("bin/glslparsertest")
except:
print("./bin must be a symlink to a built piglit bin directory")
sys.exit(1)
executor = ThreadPoolExecutor(cpu_count())
for t in executor.map(run_test, args):
sys.stdout.write(t)
if __name__ == "__main__":
main()
|