summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorChad Versace <chad.versace@linux.intel.com>2014-06-10 17:21:59 -0700
committerChad Versace <chad.versace@linux.intel.com>2014-06-23 02:37:36 -0700
commitac1f382db9d3ea5c69870a2bcd62a24bdb81ec5b (patch)
tree0daee8d6b4b854e3f776a812045e0f06f6036780 /cmake
parentdef993a75d909baa56142d51ee0f503f1d52f51a (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.cmake13
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