prime_step = 281
hash_table_size = 1024
-gl_apis=set(["GL", "GL_CORE", "GLES", "GLES2"])
+gl_apis=set(["GL", "GL_CORE", "GLES", "GLES2", "GLES3"])
def print_header():
print "typedef const unsigned short table_t[%d];\n" % (hash_table_size)
def api_name(api):
return "API_OPEN%s" % api
+# This must match gl_api enum in src/mesa/main/mtypes.h
+api_enum = [
+ 'GL',
+ 'GLES',
+ 'GLES2',
+ 'GL_CORE',
+ 'GLES3', # Not in gl_api enum in mtypes.h
+]
+
+def api_index(api):
+ return api_enum.index(api)
+
def table_name(api):
return "table_" + api_name(api)
def print_table(api, table):
print "static table_t %s = {" % (table_name(api))
+ # convert sparse (index, value) table into a dense table
+ dense_table = [0] * hash_table_size
+ for i, v in table:
+ dense_table[i] = v
+
row_size = 4
- for i in range(0, len(table), row_size):
- row = table[i : i + row_size]
- idx_val = ["[%4d] = %4d" % iv for iv in row]
+ for i in range(0, hash_table_size, row_size):
+ row = dense_table[i : i + row_size]
+ idx_val = ["%4d" % v for v in row]
print " " * 4 + ", ".join(idx_val) + ","
print "};\n"
for table in tables:
print_table(table["apis"][0], table["indices"])
- print "static table_t *table_set[] = {"
+ dense_tables = ['NULL'] * len(api_enum)
for table in tables:
tname = table_name(table["apis"][0])
for api in table["apis"]:
- print " [%s] = &%s," % (api_name(api), tname)
+ i = api_index(api)
+ dense_tables[i] = "&%s" % (tname)
+
+ print "static table_t *table_set[] = {"
+ for expr in dense_tables:
+ print " %s," % expr
print "};\n"
print "#define table(api) (*table_set[api])"
for api in valid_apis:
add_to_hash_table(tables[api], hash_val, len(params))
+ # Also add GLES2 items to the GLES3 hash table
+ if api == "GLES2":
+ add_to_hash_table(tables["GLES3"], hash_val, len(params))
params.append(["GL_" + enum_name, param[1]])
return params, merge_tables(sorted_tables)
-def opt_to_apis(feature):
- _map = {"ES1": "GLES", "ES2": "GLES2", "GL": "GL"}
- if feature not in _map:
- return None
-
- apis = set([_map[feature]])
- if "GL" in apis:
- apis.add("GL_CORE")
-
- return apis
def show_usage():
sys.stderr.write(
"""Usage: %s [OPTIONS]
-f <file> specify GL API XML file
- -a [GL|ES1|ES2] specify APIs to generate hash tables for
""" % (program))
exit(1)
if __name__ == '__main__':
try:
- (opts, args) = getopt.getopt(sys.argv[1:], "f:a:")
+ (opts, args) = getopt.getopt(sys.argv[1:], "f:")
except Exception,e:
show_usage()
if len(args) != 0:
show_usage()
- enabled_apis = set([])
api_desc_file = ""
for opt_name, opt_val in opts:
if opt_name == "-f":
api_desc_file = opt_val
- if opt_name == "-a":
- apis = opt_to_apis(opt_val.upper())
- if not apis:
- die("invalid API %s\n" % opt_val)
-
- enabled_apis |= apis
if not api_desc_file:
die("missing descriptor file (-f)\n")
- if len(enabled_apis) == 0:
- die("need at least a single enabled API\n")
+ # generate the code for all APIs
+ enabled_apis = set(["GLES", "GLES2", "GLES3", "GL", "GL_CORE"])
try:
api_desc = gl_XML.parse_GL_API(api_desc_file)