mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 00:58:05 +02:00
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:
parent
91b5a741f6
commit
679df028e7
1 changed files with 63 additions and 2 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue