summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Graunke <kenneth@whitecape.org>2014-07-13 23:36:26 -0700
committerKenneth Graunke <kenneth@whitecape.org>2014-07-13 23:42:38 -0700
commit984bfca291aba8b57be0a3ed10ce3060c2c21a6e (patch)
treefdbe546043348f19c9df621059b2d26f15199b93
parent4d54dfaca1b44ebf8b6bff7410f87822c2fd2342 (diff)
split-to-files.py: Also parse ARB program output
v2: Rebase on Dylan's cleanups.
-rwxr-xr-xsplit-to-files.py51
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()