diff options
author | Chad Versace <chad.versace@linux.intel.com> | 2014-06-10 17:21:59 -0700 |
---|---|---|
committer | Chad Versace <chad.versace@linux.intel.com> | 2014-06-23 02:37:36 -0700 |
commit | ac1f382db9d3ea5c69870a2bcd62a24bdb81ec5b (patch) | |
tree | 0daee8d6b4b854e3f776a812045e0f06f6036780 /tests/util/piglit-dispatch-gen.h.mako | |
parent | def993a75d909baa56142d51ee0f503f1d52f51a (diff) |
dispatch: Generate piglit-dispatch from Khronos XML
Khronos now generates its headers from XML and no longer maintains the
old, crufty *.spec files. Piglit should do the same. Otherwise,
piglit-dispatch won't be able to pick up new extension functions.
As a really really big bonus, after Piglit starts generating its GL
dispatch code from gl.xml, it will be a small step to start generating
EGL and GLX dispatch from egl.xml and glx.xml.
This patch imports 'gl.xml' into a new toplevel "registry" directory, to
follow the precedent of libepoxy.
This patch follows the precedent of libepoxy by importing "gl.xml" into
a new toplevel "registry" directory.
I did *not* try to redesign piglit-dispatch in this patch. To the
contrary, I attempted to keep the newly generated dispatch code to be as
similar as possible as the old generated code. Despite wanting to clean
up piglit-dispatch's design, I refrained because "a patch should do one
thing, and do it well".
I strove to keep separate concerns in separate files. File
"registry/gl.py" parses "registry/gl.xml". File
"tests/util/gen_dispatch.py" generates code from the that parsed result.
This decision kept gen_dispatch.py small and focused.
I hope everyone finds the rewritten gen_dispatch.py more maintainable
and easy to read.
The generated code has changed as following:
- It now contains the GLES1 API, because gl.xml contains information
on all OpenGL APIs.
- The comment block for each function alias set now contains more
information. For each function in the set, it now lists the
complete set of providers.
For example:
/* glActiveTexture (GL_VERSION_1_3) (GL_VERSION_ES_CM_1_0) (GL_ES_VERSION_2_0) */
/* glActiveTextureARB (GL_ARB_multitexture) */
extern PFNGLACTIVETEXTUREPROC piglit_dispatch_glActiveTexture;
#define glActiveTexture piglit_dispatch_glActiveTexture
#define glActiveTextureARB piglit_dispatch_glActiveTexture
- Enums are sorted by group then by value. Old dispatch sorted only by
value.
For example:
/* Enum Group MapBufferUsageMask */
#define GL_MAP_READ_BIT 0x0001
#define GL_MAP_READ_BIT_EXT 0x0001
#define GL_MAP_WRITE_BIT 0x0002
#define GL_MAP_WRITE_BIT_EXT 0x0002
...
Tested for regressions with:
piglit run -p x11_egl -x glx -x glean
Mesa 10.2.1
Intel Ivybridge
Fedora 20
v3, for Dylan:
- Replace ElementTree with cElementTree, for speed.
- Each method $foo in KeyedOrderedSet that returns
a generator, rename it to iter${foo} to follow Python2 (not 3)
naming conventions.
- Python 2.6 lacks OrderedDict, so don't use it.
- Remove unused import 'dedent'.
- Python 2.6 does not recognize the syntax for set literals, so
replace each set literal with a list literal or generator literal.
- Replace sys.stderr.write with print(file=sys.stderr).
- Remove hand-coded OrderedKeyedSet.copy and instead use copy module.
- Prefer the 'lxml' module (it uses libxml2) over Python's builtin 'xml' module.
- Replace methods ``def foo(x, y):`` with ``def foo(self, other):``.
- Replace lists with generators in methods Command.c_*_param_list.
- PEP8: Separate all toplevel items with 2 newlines.
- PEP8: Fix minor whitespace issues.
- PEP8: Replace some ``== None`` with ``is None``.
- Replace None-check for --out-dir with add_argument(..., required=True)
- Remove 'prog' assignment when calling ArgumentParser(prog=PROG_NAME).
Instead, use default value
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
Diffstat (limited to 'tests/util/piglit-dispatch-gen.h.mako')
-rw-r--r-- | tests/util/piglit-dispatch-gen.h.mako | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/tests/util/piglit-dispatch-gen.h.mako b/tests/util/piglit-dispatch-gen.h.mako new file mode 100644 index 000000000..feb4be848 --- /dev/null +++ b/tests/util/piglit-dispatch-gen.h.mako @@ -0,0 +1,82 @@ +/** + * ${warning} + * + * Copyright 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +<%block filter='fake_whitespace'>\ +#pragma once + +#ifndef __PIGLIT_DISPATCH_GEN_H__ +#define __PIGLIT_DISPATCH_GEN_H__ + +## +## Define function pointer typedefs, such as PFNGLACCUMPROC. +## +% for f in sorted(gl_registry.commands): +typedef ${f.c_return_type} (APIENTRY *PFN${f.name.upper()}PROC)(${f.c_named_param_list}); +% endfor + +## +## Emit macro wrapper for each dispatch function. For example, +## +## #define glAttachObjectARB piglit_dispatch_glAttachShader +## +% for alias_set in gl_registry.command_alias_map: +<% f0 = alias_set.primary_command %>\ +% for command in alias_set: +/* ${command.name} +% for requirement in command.requirements: +.................. (${requirement.provider.name}) +% endfor +................................................. */ +% endfor +extern PFN${f0.name.upper()}PROC piglit_dispatch_${f0.name}; +% for command in alias_set: +#define ${command.name} piglit_dispatch_${f0.name} +% endfor + +% endfor +## +## Define enums. +## +% for enum_group in gl_registry.enum_groups: +% if len(enum_group.enums) > 0: +/* Enum Group ${enum_group.name} */ +% for enum in enum_group.enums: +#define ${enum.name} ${enum.c_num_literal} +% endfor + +% endif +% endfor +/* Extensions */ +% for extension in gl_registry.extensions: +#define ${extension.name} 1 +% endfor + +/* Versions */ +% for feature in gl_registry.features: +#define ${feature.name} 1 +% endfor + +#endif /* __PIGLIT_DISPATCH_GEN_H__ */ +</%block>\ |