diff options
Diffstat (limited to 'src/mapi/glapi/gen')
-rw-r--r-- | src/mapi/glapi/gen/gl_XML.py | 65 |
1 files changed, 63 insertions, 2 deletions
diff --git a/src/mapi/glapi/gen/gl_XML.py b/src/mapi/glapi/gen/gl_XML.py index 92bbb86ee79..47f8dd5b962 100644 --- a/src/mapi/glapi/gen/gl_XML.py +++ b/src/mapi/glapi/gen/gl_XML.py @@ -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 |