glapi/gen: handle new XML attributes.

This patch updates gl_XML.py to parse the new XML attributes "exec",
"desktop", "deprecated", and "mesa_name", which will be needed to code
generate _mesa_create_exec_table().

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
Paul Berry 2012-10-30 16:21:18 -07:00
parent 91b5a741f6
commit 679df028e7

View file

@ -594,6 +594,46 @@ class gl_parameter(object):
return self.type_expr.format_string()
# Regular expression used to parse "mesa_name" attributes. A
# mesa_name attribute describes how to adjust a GL function name
# suffix to obtain the name of the function in Mesa that implements
# the functionality. The attribute string consists of a part preceded
# by a "-", indicating the suffix to remove, and a part preceded by a
# "+" indicating the suffix to add. Either part is optional.
#
# For example:
#
# <function name="EnableIndexedEXT" mesa_name="-EXT">...</function>
# <function name="IsProgramNV" mesa_name="-NV+ARB">...</function>
#
# means that EnableIndexedEXT is implemented by a Mesa function called
# _mesa_EnableIndexed, and IsProgramNV is implemented by a Mesa function
# called _mesa_IsProgramARB.
#
# Note: the prefix "_mesa_" is handled separately, by the "exec"
# attribute.
name_modification_regexp = re.compile(
r'^(-(?P<minus>[a-zA-Z0-9_]+))?(\+(?P<plus>[a-zA-Z0-9_]+))?$')
# Interpret a "mesa_name" attribute (see above) to determine the
# appropriate suffix for the Mesa function implementing a piece of GL
# functionality, and return the properly suffixed name.
def interpret_name_modification(name, mod):
m = name_modification_regexp.match(mod)
if m is None:
raise Exception('Unintelligible mesa_name property: {0!r}'.format(mod))
new_name = name
if m.group('minus'):
if not new_name.endswith(m.group('minus')):
raise Exception(
'Cannot subtract suffix {0!r} from function {1}'.format(
m.group('minus'), name))
new_name = new_name[:-len(m.group('minus'))]
if m.group('plus'):
new_name += m.group('plus')
return new_name
class gl_function( gl_item ):
def __init__(self, element, context):
@ -606,6 +646,10 @@ class gl_function( gl_item ):
self.offset = -1
self.initialized = 0
self.images = []
self.exec_flavor = 'mesa'
self.desktop = True
self.deprecated = None
self.mesa_name = None
# self.entry_point_api_map[name][api] is a decimal value
# indicating the earliest version of the given API in which
@ -665,13 +709,24 @@ class gl_function( gl_item ):
version_decimal < self.api_map[api]:
self.api_map[api] = version_decimal
exec_flavor = element.nsProp('exec', None)
if exec_flavor:
self.exec_flavor = exec_flavor
deprecated = element.nsProp('deprecated', None)
if deprecated != 'none':
self.deprecated = Decimal(deprecated)
if not is_attr_true(element, 'desktop'):
self.desktop = False
if alias:
true_name = alias
else:
true_name = name
# Only try to set the offset when a non-alias
# entry-point is being processes.
# Only try to set the offset and mesa_name when a
# non-alias entry-point is being processed.
offset = element.nsProp( "offset", None )
if offset:
@ -683,6 +738,12 @@ class gl_function( gl_item ):
if offset == "assign":
self.assign_offset = 1
mesa_name = element.nsProp('mesa_name', None)
if mesa_name is None:
self.mesa_name = name
else:
self.mesa_name = interpret_name_modification(name, mesa_name)
if not self.name:
self.name = true_name