spirv: Unify boolean constants and add better validation
[mesa.git] / src / compiler / spirv / spirv_info_c.py
index c5e11dfc837c12ac897a338762a64ccc18173243..ff7942bcd3a8cf68799d189099e370d9ac4c5a69 100644 (file)
@@ -45,13 +45,25 @@ def collect_data(spirv, kind):
 
     return (kind, values)
 
+def collect_opcodes(spirv):
+    values = []
+    for x in spirv["instructions"]:
+        name = x["opname"]
+        assert name.startswith("Op")
+        values.append(name[2:])
+
+    return ("Op", values)
+
 def parse_args():
     p = argparse.ArgumentParser()
     p.add_argument("json")
     p.add_argument("out")
     return p.parse_args()
 
-TEMPLATE  = Template(COPYRIGHT + """\
+TEMPLATE  = Template("""\
+/* DO NOT EDIT - This file is generated automatically by spirv_info_c.py script */
+
+""" + COPYRIGHT + """\
 #include "spirv_info.h"
 % for kind,values in info:
 
@@ -75,8 +87,11 @@ if __name__ == "__main__":
 
     spirv_info = json.JSONDecoder().decode(open(pargs.json, "r").read())
 
-    capabilities = collect_data(spirv_info, "Capability")
-    decorations = collect_data(spirv_info, "Decoration")
+    info = [
+        collect_data(spirv_info, "Capability"),
+        collect_data(spirv_info, "Decoration"),
+        collect_opcodes(spirv_info),
+    ]
 
     with open(pargs.out, 'w') as f:
-        f.write(TEMPLATE.render(info=[capabilities, decorations]))
+        f.write(TEMPLATE.render(info=info))