diff options
author | Eric Anholt <eric@anholt.net> | 2013-03-22 15:38:20 -0700 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2013-03-22 17:31:00 -0700 |
commit | 7ff642d5a8e91b75c966b50bd6998cfc8028de0c (patch) | |
tree | eeaa17838e8e93495f4558fa3c96f0181b366f07 | |
parent | 00c1a83c284221fd91997840da19abcfdb4022da (diff) |
Make split-to-files generate complete shader_tests.
-rwxr-xr-x | run.py | 12 | ||||
-rwxr-xr-x | split-to-files.pl | 33 | ||||
-rwxr-xr-x | split-to-files.py | 102 |
3 files changed, 111 insertions, 36 deletions
@@ -18,9 +18,15 @@ Options: sys.exit(1) def run_test(filename): - command = ['./bin/glslparsertest', - filename, - 'pass'] + if ".shader_test" in filename: + command = ['./bin/shader_runner', + filename, + '-auto', + '-fbo'] + else: + command = ['./bin/glslparsertest', + filename, + 'pass'] try: p = subprocess.Popen( diff --git a/split-to-files.pl b/split-to-files.pl deleted file mode 100755 index f20dd6c..0000000 --- a/split-to-files.pl +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env perl - -my $appname = $ARGV[0]; -my $log = $ARGV[1]; - -if ($#ARGV != 1) { - printf("usage: split-to-files.pl <appname> <log>\n"); -} - -mkdir("shaders/$appname"); - -open(LOG, $log) or die; - -my $vert_index = 1; -my $frag_index = 1; - -while (<LOG>) { - my $line = $_; - if ($line =~ /GLSL source for vertex shader/) { - open(OUT, ">shaders/$appname/$vert_index.vert"); - $vert_index++; - } elsif ($line =~ /GLSL source for fragment shader/) { - open(OUT, ">shaders/$appname/$frag_index.frag"); - $frag_index++; - } elsif ($line =~ /IR for linked/) { - close(OUT); - } elsif ($line =~ /IR for shader/) { - close(OUT); - } else { - print OUT $line; - } -} -close $fh; diff --git a/split-to-files.py b/split-to-files.py new file mode 100755 index 0000000..f537cc5 --- /dev/null +++ b/split-to-files.py @@ -0,0 +1,102 @@ +#!/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 <appname> <mesadebug.log> + +Options: + -h, --help Show this message +""" + print(USAGE % {'progName': sys.argv[0]}) + sys.exit(1) + +def parse_input(input): + shaders = dict() + shadertuple = ("bad", 0) + prognum = "" + reading = False + + for line in input.splitlines(): + declmatch = re.match("GLSL (.*) shader (.*) source for linked program (.*):", line) + if declmatch: + shadertype = declmatch.group(1) + shadernum = declmatch.group(2) + prognum = declmatch.group(3) + shadertuple = (shadertype, shadernum) + + # don't save driver-internal shaders. + if prognum == "0": + continue + + if not prognum in shaders: + shaders[prognum] = dict() + if shadertuple in shaders[prognum]: + print("dupe!") + exit(1) + shaders[prognum][shadertuple] = '' + reading = True + print("Reading program {0} {1} shader {2}".format(prognum, shadertype, shadernum)) + elif re.match("GLSL IR for ", line): + reading = False + elif re.match("GLSL source for ", line): + reading = False + elif reading: + shaders[prognum][shadertuple] += line + '\n' + + return shaders + +def write_shader_test(filename, shaders): + print("Writing {0}".format(filename)) + out = open(filename, 'w') + + out.write("[require]\n") + out.write("GLSL >= 1.10\n") + out.write("\n") + + for (type, num) in shaders: + if type == "vertex": + out.write("[vertex shader]\n") + out.write(shaders[(type, num)]) + if type == "fragment": + out.write("[fragment shader]\n") + out.write(shaders[(type, num)]) + + out.close() + +def write_files(dir, shaders): + for prog in shaders: + write_shader_test("{0}/{1}.shader_test".format(dir, prog), shaders[prog]) + +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) != 2: + usage() + + dirname = "shaders/{0}".format(args[0]) + if not os.path.isdir(dirname): + os.mkdir(dirname) + + input = open(args[1], 'r') + + write_files(dirname, parse_input(input.read())) + +if __name__ == "__main__": + main() |