|
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>
|