diff options
-rwxr-xr-x | run.py | 48 |
1 files changed, 18 insertions, 30 deletions
@@ -55,38 +55,26 @@ def run_test(filename): with open(filename + '.out', 'w') as file: file.write(results) - current_type = 'UNKNOWN' counts = {} - lines = list(results.split('\n')) - - re_builtin_shader = re.compile(r"shader 0") - re_fs_8 = re.compile(r"^Native code for .*fragment.*(8-wide|SIMD8)") - re_fs_16 = re.compile(r"^Native code for .*fragment.*(16-wide|SIMD16)") - re_gs = re.compile(r"^Native code for .*geometry") - re_vs = re.compile(r"^Native code for .*vertex") - re_align = re.compile(r"{ align") - re_2q = re.compile(r"\(8\).* 2Q };") - counts["vs "] = 0 - counts["gs "] = 0 - counts["fs8 "] = 0 - counts["fs16"] = 0 + + lines = (line for line in results.splitlines()) + re_number = re.compile( + r'Native code for unnamed (fragment|vertex|geometry) shader (?P<number>\d+)') for line in lines: - if (re_builtin_shader.search(line)): - continue - elif (re_vs.search(line)): - current_type = "vs " - elif (re_gs.search(line)): - current_type = "gs " - elif (re_fs_8.search(line)): - current_type = "fs8 " - elif (re_fs_16.search(line)): - current_type = "fs16" - elif (re_align.search(line)): - # Skip the 2Q (second half) SIMD8 instructions, since the - # 1Q+2Q pair should be the same cost as a single 1H - # (SIMD16) instruction, other than icache pressure. - if current_type != "fs16" or not re_2q.search(line): - counts[current_type] = counts[current_type] + 1 + shader = re_number.match(line) + if shader and int(shader.group('number')) > 0: + break + else: + raise Exception('Only shader 0 found. {}'.format(filename)) + + re_search = re.compile( + r'(?P<stage>[A-Za-z0-9]+) shader\: (?P<count>\d+) instructions.') + for line in lines: + match = re_search.match(line) + if match is not None: + counts[match.group('stage')] = int(match.group('count')) + + assert counts, 'File: {} does not have any shaders'.format(filename) timestr = " {:.3f} secs".format(timeafter - timebefore) out = '' |