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 /cmake | |
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 'cmake')
-rw-r--r-- | cmake/piglit_dispatch.cmake | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/cmake/piglit_dispatch.cmake b/cmake/piglit_dispatch.cmake index f703e4d3c..94a5ff0b8 100644 --- a/cmake/piglit_dispatch.cmake +++ b/cmake/piglit_dispatch.cmake @@ -19,6 +19,7 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. +set(piglit_dispatch_gen_script ${CMAKE_SOURCE_DIR}/tests/util/gen_dispatch.py) set(piglit_dispatch_gen_output_dir ${CMAKE_BINARY_DIR}/tests/util) file(MAKE_DIRECTORY ${piglit_dispatch_gen_output_dir}) @@ -28,15 +29,19 @@ set(piglit_dispatch_gen_outputs ${piglit_dispatch_gen_output_dir}/piglit-dispatch-gen.h ) -set(piglit_dispatch_gen_inputs +set(piglit_dispatch_gen_depends + ${CMAKE_SOURCE_DIR}/registry/__init__.py + ${CMAKE_SOURCE_DIR}/registry/gl.py + ${CMAKE_SOURCE_DIR}/registry/gl.xml ${CMAKE_SOURCE_DIR}/tests/util/gen_dispatch.py - ${CMAKE_BINARY_DIR}/glapi/glapi.json + ${CMAKE_SOURCE_DIR}/tests/util/piglit-dispatch-gen.c.mako + ${CMAKE_SOURCE_DIR}/tests/util/piglit-dispatch-gen.h.mako ) add_custom_command( OUTPUT ${piglit_dispatch_gen_outputs} - DEPENDS ${piglit_dispatch_gen_inputs} - COMMAND ${python} ${piglit_dispatch_gen_inputs} ${piglit_dispatch_gen_outputs} + DEPENDS ${piglit_dispatch_gen_depends} + COMMAND ${python} ${piglit_dispatch_gen_script} --out-dir ${piglit_dispatch_gen_output_dir} ) add_custom_target(piglit_dispatch_gen |