[Mesa-dev] [PATCH V3] glapi: add KHR_no_error support to dispatch table generation
Nicolai Hähnle
nhaehnle at gmail.com
Wed May 3 12:46:13 UTC 2017
On 03.05.2017 06:25, Timothy Arceri wrote:
> This will allows us to create no error versions of functions
> noted by a _no_error suffix. We also need to set a no_error
> attribute equal to "true" in the xml.
>
> V3: stop the no_error attribute being overwritten when functions
> alias another.
> V2: tidy up suggested by Nicolai.
Thanks, I do like it better this way.
Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
> ---
> src/mapi/glapi/gen/gl_XML.py | 6 ++++++
> src/mapi/glapi/gen/gl_genexec.py | 12 ++++++++++--
> 2 files changed, 16 insertions(+), 2 deletions(-)
>
> diff --git a/src/mapi/glapi/gen/gl_XML.py b/src/mapi/glapi/gen/gl_XML.py
> index c688906..a5320e9 100644
> --- a/src/mapi/glapi/gen/gl_XML.py
> +++ b/src/mapi/glapi/gen/gl_XML.py
> @@ -599,20 +599,21 @@ class gl_function( gl_item ):
>
> self.entry_points = []
> self.return_type = "void"
> self.parameters = []
> self.offset = -1
> self.initialized = 0
> self.images = []
> self.exec_flavor = 'mesa'
> self.desktop = True
> self.deprecated = None
> + self.has_no_error_variant = False
>
> # self.entry_point_api_map[name][api] is a decimal value
> # indicating the earliest version of the given API in which
> # each entry point exists. Every entry point is included in
> # the first level of the map; the second level of the map only
> # lists APIs which contain the entry point in at least one
> # version. For example,
> # self.entry_point_api_map['ClipPlanex'] == { 'es1':
> # Decimal('1.1') }.
> self.entry_point_api_map = {}
> @@ -669,20 +670,25 @@ class gl_function( gl_item ):
> if exec_flavor:
> self.exec_flavor = exec_flavor
>
> deprecated = element.get('deprecated', 'none')
> if deprecated != 'none':
> self.deprecated = Decimal(deprecated)
>
> if not is_attr_true(element, 'desktop', 'true'):
> self.desktop = False
>
> + if self.has_no_error_variant or is_attr_true(element, 'no_error'):
> + self.has_no_error_variant = True
> + else:
> + self.has_no_error_variant = False
> +
> if alias:
> true_name = alias
> else:
> true_name = name
>
> # Only try to set the offset when a non-alias entry-point
> # is being processed.
>
> if name in static_data.offsets:
> self.offset = static_data.offsets[name]
> diff --git a/src/mapi/glapi/gen/gl_genexec.py b/src/mapi/glapi/gen/gl_genexec.py
> index 3a75419..37b1cc6 100644
> --- a/src/mapi/glapi/gen/gl_genexec.py
> +++ b/src/mapi/glapi/gen/gl_genexec.py
> @@ -225,22 +225,30 @@ class PrintCode(gl_XML.gl_print_base):
>
> if not condition_parts:
> # This function does not exist in any API.
> continue
> condition = ' || '.join(condition_parts)
> prefix = exec_flavor_map[f.exec_flavor]
> if prefix is None:
> # This function is not implemented, or is dispatched
> # dynamically.
> continue
> - settings_by_condition[condition].append(
> - 'SET_{0}(exec, {1}{0});'.format(f.name, prefix, f.name))
> + if f.has_no_error_variant:
> + no_error_condition = '_mesa_is_no_error_enabled(ctx) && ({0})'.format(condition)
> + error_condition = '!_mesa_is_no_error_enabled(ctx) && ({0})'.format(condition)
> + settings_by_condition[no_error_condition].append(
> + 'SET_{0}(exec, {1}{0}_no_error);'.format(f.name, prefix, f.name))
> + settings_by_condition[error_condition].append(
> + 'SET_{0}(exec, {1}{0});'.format(f.name, prefix, f.name))
> + else:
> + settings_by_condition[condition].append(
> + 'SET_{0}(exec, {1}{0});'.format(f.name, prefix, f.name))
> # Print out an if statement for each unique condition, with
> # the SET_* calls nested inside it.
> for condition in sorted(settings_by_condition.keys()):
> print ' if ({0}) {{'.format(condition)
> for setting in sorted(settings_by_condition[condition]):
> print ' {0}'.format(setting)
> print ' }'
>
>
> def _parser():
>
--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
More information about the mesa-dev
mailing list