diff options
author | Kenneth Graunke <kenneth@whitecape.org> | 2014-07-13 23:36:26 -0700 |
---|---|---|
committer | Kenneth Graunke <kenneth@whitecape.org> | 2014-07-13 23:42:38 -0700 |
commit | 984bfca291aba8b57be0a3ed10ce3060c2c21a6e (patch) | |
tree | fdbe546043348f19c9df621059b2d26f15199b93 | |
parent | 4d54dfaca1b44ebf8b6bff7410f87822c2fd2342 (diff) |
split-to-files.py: Also parse ARB program output
v2: Rebase on Dylan's cleanups.
-rwxr-xr-x | split-to-files.py | 51 |
1 files changed, 43 insertions, 8 deletions
diff --git a/split-to-files.py b/split-to-files.py index 2877307..879fcf2 100755 --- a/split-to-files.py +++ b/split-to-files.py @@ -7,13 +7,17 @@ import argparse def parse_input(infile): shaders = dict() + programs = dict() shadertuple = ("bad", 0) prognum = "" reading = False + is_glsl = True for line in infile.splitlines(): declmatch = re.match( r"GLSL (.*) shader (.*) source for linked program (.*):", line) + arbmatch = re.match( + r"ARB_([^_]*)_program source for program (.*):", line) if declmatch: shadertype = declmatch.group(1) shadernum = declmatch.group(2) @@ -31,16 +35,33 @@ def parse_input(infile): "in program", prognum, "...tossing old shader.") shaders[prognum][shadertuple] = '' reading = True + is_glsl = True print("Reading program {0} {1} shader {2}".format( prognum, shadertype, shadernum)) - elif re.match(r"GLSL IR for ", line): + elif arbmatch: + shadertype = arbmatch.group(1) + prognum = arbmatch.group(2) + if prognum in programs: + print("dupe!") + exit(1) + programs[prognum] = (shadertype, '') + reading = True + is_glsl = False + print("Reading program {0} {1} shader".format(prognum, shadertype)) + elif re.match("GLSL IR for ", line): + reading = False + elif re.match("Mesa IR for ", line): reading = False - elif re.match(r"GLSL source for ", line): + elif re.match("GLSL source for ", line): reading = False elif reading: - shaders[prognum][shadertuple] += line + '\n' + if is_glsl: + shaders[prognum][shadertuple] += line + '\n' + else: + type, source = programs[prognum] + programs[prognum] = (type, ''.join([source, line, '\n'])) - return shaders + return (shaders, programs) def write_shader_test(filename, shaders): @@ -61,12 +82,26 @@ def write_shader_test(filename, shaders): out.close() +def write_arb_shader_test(filename, type, source): + print("Writing {0}".format(filename)) + out = open(filename, 'w') + out.write("[require]\n") + out.write("GL_ARB_{0}_program\n".format(type)) + out.write("\n") + out.write("[{0} program]\n".format(type)) + out.write(source) + # INTEL_DEBUG won't output anything for ARB programs unless you draw + out.write("\n[test]\ndraw rect -1 -1 1 2\n"); + out.close() -def write_files(directory, shaders): +def write_files(directory, shaders, programs): for prog in shaders: write_shader_test("{0}/{1}.shader_test".format(directory, prog), shaders[prog]) - + for prognum in programs: + prog = programs[prognum] + write_arb_shader_test("{0}/{1}p-{2}.shader_test".format(directory, + prog[0][0], prognum), prog[0], prog[1]) def main(): parser = argparse.ArgumentParser() @@ -80,8 +115,8 @@ def main(): infile = open(args.mesadebug, 'r') - write_files(dirname, parse_input(infile.read())) - + shaders, programs = parse_input(input.read()) + write_files(dirname, shaders, programs) if __name__ == "__main__": main() |