mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 21:50:12 +01:00
glapi: Add OpenGL ES compatibility mode to scripts.
When the mode is on, the scripts would generate headers that are suitable for OpenGL ES. There are two differences. One is that they will generate function prototypes for OpenGL ES specific functions. The other is that, when a function has multiple names, SET/GET/CALL macros would be generated for each of names. Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
This commit is contained in:
parent
5b85cada60
commit
1af44e9e5a
4 changed files with 108 additions and 19 deletions
|
|
@ -30,7 +30,7 @@ import license
|
|||
import sys, getopt
|
||||
|
||||
class PrintGlOffsets(gl_XML.gl_print_base):
|
||||
def __init__(self):
|
||||
def __init__(self, es=False):
|
||||
gl_XML.gl_print_base.__init__(self)
|
||||
|
||||
self.name = "gl_apitemp.py (from Mesa)"
|
||||
|
|
@ -38,6 +38,8 @@ class PrintGlOffsets(gl_XML.gl_print_base):
|
|||
"""Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
|
||||
(C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM")
|
||||
|
||||
self.es = es
|
||||
|
||||
self.undef_list.append( "KEYWORD1" )
|
||||
self.undef_list.append( "KEYWORD1_ALT" )
|
||||
self.undef_list.append( "KEYWORD2" )
|
||||
|
|
@ -82,7 +84,14 @@ class PrintGlOffsets(gl_XML.gl_print_base):
|
|||
else:
|
||||
dispatch = "DISPATCH"
|
||||
|
||||
need_proto = False
|
||||
if not f.is_static_entry_point(name):
|
||||
need_proto = True
|
||||
elif self.es:
|
||||
cat, num = api.get_category_for_name(name)
|
||||
if (cat.startswith("es") or cat.startswith("GL_OES")):
|
||||
need_proto = True
|
||||
if need_proto:
|
||||
print '%s %s KEYWORD2 NAME(%s)(%s);' % (keyword, f.return_type, n, f.get_parameter_string(name))
|
||||
print ''
|
||||
|
||||
|
|
@ -286,22 +295,26 @@ static _glapi_proc UNUSED_TABLE_NAME[] = {"""
|
|||
|
||||
|
||||
def show_usage():
|
||||
print "Usage: %s [-f input_file_name]" % sys.argv[0]
|
||||
print "Usage: %s [-f input_file_name] [-c]" % sys.argv[0]
|
||||
print "-c Enable compatibility with OpenGL ES."
|
||||
sys.exit(1)
|
||||
|
||||
if __name__ == '__main__':
|
||||
file_name = "gl_API.xml"
|
||||
|
||||
try:
|
||||
(args, trail) = getopt.getopt(sys.argv[1:], "f:")
|
||||
(args, trail) = getopt.getopt(sys.argv[1:], "f:c")
|
||||
except Exception,e:
|
||||
show_usage()
|
||||
|
||||
es = False
|
||||
for (arg,val) in args:
|
||||
if arg == "-f":
|
||||
file_name = val
|
||||
elif arg == "-c":
|
||||
es = True
|
||||
|
||||
api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory())
|
||||
|
||||
printer = PrintGlOffsets()
|
||||
printer = PrintGlOffsets(es)
|
||||
printer.Print(api)
|
||||
|
|
|
|||
|
|
@ -30,9 +30,10 @@ import license
|
|||
import sys, getopt
|
||||
|
||||
class PrintGlOffsets(gl_XML.gl_print_base):
|
||||
def __init__(self):
|
||||
def __init__(self, es=False):
|
||||
gl_XML.gl_print_base.__init__(self)
|
||||
|
||||
self.es = es
|
||||
self.name = "gl_offsets.py (from Mesa)"
|
||||
self.header_tag = '_GLAPI_OFFSETS_H_'
|
||||
self.license = license.bsd_license_template % ( \
|
||||
|
|
@ -46,6 +47,7 @@ class PrintGlOffsets(gl_XML.gl_print_base):
|
|||
|
||||
functions = []
|
||||
abi_functions = []
|
||||
alias_functions = []
|
||||
count = 0
|
||||
for f in api.functionIterateByOffset():
|
||||
if not f.is_abi():
|
||||
|
|
@ -54,6 +56,10 @@ class PrintGlOffsets(gl_XML.gl_print_base):
|
|||
else:
|
||||
abi_functions.append( f )
|
||||
|
||||
if self.es:
|
||||
# remember functions with aliases
|
||||
if len(f.entry_points) > 1:
|
||||
alias_functions.append(f)
|
||||
|
||||
for f in abi_functions:
|
||||
print '#define _gloffset_%s %d' % (f.name, f.offset)
|
||||
|
|
@ -78,26 +84,37 @@ class PrintGlOffsets(gl_XML.gl_print_base):
|
|||
print ''
|
||||
print '#endif /* !defined(_GLAPI_USE_REMAP_TABLE) */'
|
||||
|
||||
if alias_functions:
|
||||
print ''
|
||||
print '/* define aliases for compatibility */'
|
||||
for f in alias_functions:
|
||||
for name in f.entry_points:
|
||||
if name != f.name:
|
||||
print '#define _gloffset_%s _gloffset_%s' % (name, f.name)
|
||||
return
|
||||
|
||||
|
||||
def show_usage():
|
||||
print "Usage: %s [-f input_file_name]" % sys.argv[0]
|
||||
print "Usage: %s [-f input_file_name] [-c]" % sys.argv[0]
|
||||
print " -c Enable compatibility with OpenGL ES."
|
||||
sys.exit(1)
|
||||
|
||||
if __name__ == '__main__':
|
||||
file_name = "gl_API.xml"
|
||||
|
||||
try:
|
||||
(args, trail) = getopt.getopt(sys.argv[1:], "f:")
|
||||
(args, trail) = getopt.getopt(sys.argv[1:], "f:c")
|
||||
except Exception,e:
|
||||
show_usage()
|
||||
|
||||
es = False
|
||||
for (arg,val) in args:
|
||||
if arg == "-f":
|
||||
file_name = val
|
||||
elif arg == "-c":
|
||||
es = True
|
||||
|
||||
api = gl_XML.parse_GL_API( file_name )
|
||||
|
||||
printer = PrintGlOffsets()
|
||||
printer = PrintGlOffsets(es)
|
||||
printer.Print( api )
|
||||
|
|
|
|||
|
|
@ -30,9 +30,10 @@ import gl_XML, glX_XML
|
|||
import sys, getopt
|
||||
|
||||
class PrintGlProcs(gl_XML.gl_print_base):
|
||||
def __init__(self, long_strings):
|
||||
def __init__(self, long_strings, es=False):
|
||||
gl_XML.gl_print_base.__init__(self)
|
||||
|
||||
self.es = es
|
||||
self.long_strings = long_strings
|
||||
self.name = "gl_procs.py (from Mesa)"
|
||||
self.license = license.bsd_license_template % ( \
|
||||
|
|
@ -141,6 +142,28 @@ typedef struct {
|
|||
print '%s GLAPIENTRY gl_dispatch_stub_%u(%s);' % (func.return_type, func.offset, func.get_parameter_string())
|
||||
break
|
||||
|
||||
if self.es:
|
||||
categories = {}
|
||||
for func in api.functionIterateByOffset():
|
||||
for n in func.entry_points:
|
||||
cat, num = api.get_category_for_name(n)
|
||||
if (cat.startswith("es") or cat.startswith("GL_OES")):
|
||||
if not categories.has_key(cat):
|
||||
categories[cat] = []
|
||||
proto = 'GLAPI %s GLAPIENTRY %s(%s);' \
|
||||
% (func.return_type, "gl" + n, func.get_parameter_string(n))
|
||||
categories[cat].append(proto)
|
||||
if categories:
|
||||
print ''
|
||||
print '/* OpenGL ES specific prototypes */'
|
||||
print ''
|
||||
keys = categories.keys()
|
||||
keys.sort()
|
||||
for key in keys:
|
||||
print '/* category %s */' % key
|
||||
print "\n".join(categories[key])
|
||||
print ''
|
||||
|
||||
print '#endif /* defined(NEED_FUNCTION_POINTER) || defined(GLX_INDIRECT_RENDERING) */'
|
||||
|
||||
print ''
|
||||
|
|
@ -155,8 +178,9 @@ typedef struct {
|
|||
|
||||
|
||||
def show_usage():
|
||||
print "Usage: %s [-f input_file_name] [-m mode]" % sys.argv[0]
|
||||
print "mode can be one of:"
|
||||
print "Usage: %s [-f input_file_name] [-m mode] [-c]" % sys.argv[0]
|
||||
print "-c Enable compatibility with OpenGL ES."
|
||||
print "-m mode mode can be one of:"
|
||||
print " long - Create code for compilers that can handle very"
|
||||
print " long string constants. (default)"
|
||||
print " short - Create code for compilers that can only handle"
|
||||
|
|
@ -167,11 +191,12 @@ if __name__ == '__main__':
|
|||
file_name = "gl_API.xml"
|
||||
|
||||
try:
|
||||
(args, trail) = getopt.getopt(sys.argv[1:], "f:m:")
|
||||
(args, trail) = getopt.getopt(sys.argv[1:], "f:m:c")
|
||||
except Exception,e:
|
||||
show_usage()
|
||||
|
||||
long_string = 1
|
||||
es = False
|
||||
for (arg,val) in args:
|
||||
if arg == "-f":
|
||||
file_name = val
|
||||
|
|
@ -182,7 +207,9 @@ if __name__ == '__main__':
|
|||
long_string = 1
|
||||
else:
|
||||
show_usage()
|
||||
elif arg == "-c":
|
||||
es = True
|
||||
|
||||
api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory())
|
||||
printer = PrintGlProcs(long_string)
|
||||
printer = PrintGlProcs(long_string, es)
|
||||
printer.Print(api)
|
||||
|
|
|
|||
|
|
@ -30,9 +30,10 @@ import license
|
|||
import sys, getopt
|
||||
|
||||
class PrintGlTable(gl_XML.gl_print_base):
|
||||
def __init__(self):
|
||||
def __init__(self, es=False):
|
||||
gl_XML.gl_print_base.__init__(self)
|
||||
|
||||
self.es = es
|
||||
self.header_tag = '_GLAPI_TABLE_H_'
|
||||
self.name = "gl_table.py (from Mesa)"
|
||||
self.license = license.bsd_license_template % ( \
|
||||
|
|
@ -68,9 +69,10 @@ class PrintGlTable(gl_XML.gl_print_base):
|
|||
|
||||
|
||||
class PrintRemapTable(gl_XML.gl_print_base):
|
||||
def __init__(self):
|
||||
def __init__(self, es=False):
|
||||
gl_XML.gl_print_base.__init__(self)
|
||||
|
||||
self.es = es
|
||||
self.header_tag = '_GLAPI_DISPATCH_H_'
|
||||
self.name = "gl_table.py (from Mesa)"
|
||||
self.license = license.bsd_license_template % ("(C) Copyright IBM Corporation 2005", "IBM")
|
||||
|
|
@ -115,6 +117,7 @@ class PrintRemapTable(gl_XML.gl_print_base):
|
|||
|
||||
functions = []
|
||||
abi_functions = []
|
||||
alias_functions = []
|
||||
count = 0
|
||||
for f in api.functionIterateByOffset():
|
||||
if not f.is_abi():
|
||||
|
|
@ -123,6 +126,11 @@ class PrintRemapTable(gl_XML.gl_print_base):
|
|||
else:
|
||||
abi_functions.append( f )
|
||||
|
||||
if self.es:
|
||||
# remember functions with aliases
|
||||
if len(f.entry_points) > 1:
|
||||
alias_functions.append(f)
|
||||
|
||||
|
||||
for f in abi_functions:
|
||||
print '#define CALL_%s(disp, parameters) (*((disp)->%s)) parameters' % (f.name, f.name)
|
||||
|
|
@ -162,33 +170,57 @@ class PrintRemapTable(gl_XML.gl_print_base):
|
|||
|
||||
print ''
|
||||
print '#endif /* !defined(_GLAPI_USE_REMAP_TABLE) */'
|
||||
|
||||
if alias_functions:
|
||||
print ''
|
||||
print '/* define aliases for compatibility */'
|
||||
for f in alias_functions:
|
||||
for name in f.entry_points:
|
||||
if name != f.name:
|
||||
print '#define CALL_%s(disp, parameters) CALL_%s(disp, parameters)' % (name, f.name)
|
||||
print '#define GET_%s(disp) GET_%s(disp)' % (name, f.name)
|
||||
print '#define SET_%s(disp, fn) SET_%s(disp, fn)' % (name, f.name)
|
||||
print ''
|
||||
|
||||
print '#if defined(_GLAPI_USE_REMAP_TABLE)'
|
||||
for f in alias_functions:
|
||||
for name in f.entry_points:
|
||||
if name != f.name:
|
||||
print '#define %s_remap_index %s_remap_index' % (name, f.name)
|
||||
print '#endif /* defined(_GLAPI_USE_REMAP_TABLE) */'
|
||||
print ''
|
||||
|
||||
return
|
||||
|
||||
|
||||
def show_usage():
|
||||
print "Usage: %s [-f input_file_name] [-m mode]" % sys.argv[0]
|
||||
print "Usage: %s [-f input_file_name] [-m mode] [-c]" % sys.argv[0]
|
||||
print " -m mode Mode can be 'table' or 'remap_table'."
|
||||
print " -c Enable compatibility with OpenGL ES."
|
||||
sys.exit(1)
|
||||
|
||||
if __name__ == '__main__':
|
||||
file_name = "gl_API.xml"
|
||||
|
||||
try:
|
||||
(args, trail) = getopt.getopt(sys.argv[1:], "f:m:")
|
||||
(args, trail) = getopt.getopt(sys.argv[1:], "f:m:c")
|
||||
except Exception,e:
|
||||
show_usage()
|
||||
|
||||
mode = "table"
|
||||
es = False
|
||||
for (arg,val) in args:
|
||||
if arg == "-f":
|
||||
file_name = val
|
||||
elif arg == "-m":
|
||||
mode = val
|
||||
elif arg == "-c":
|
||||
es = True
|
||||
|
||||
if mode == "table":
|
||||
printer = PrintGlTable()
|
||||
printer = PrintGlTable(es)
|
||||
elif mode == "remap_table":
|
||||
printer = PrintRemapTable()
|
||||
printer = PrintRemapTable(es)
|
||||
else:
|
||||
show_usage()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue