I'll send out a v2 soon. Quoting Matt Turner (2017-02-17 11:38:17) > On Fri, Feb 17, 2017 at 10:49 AM, Dylan Baker <dy...@pnwbakers.com> wrote: > > This adds a python generator to produce enum_to_str functions for > > Vulkan from the vk.xml API description. It supports extensions as well > > as core API features, and the generator works with both python2 and > > python3. > > > > CC: Jason Ekstrand <ja...@jlekstrand.net> > > Signed-off-by: Dylan Baker <dylanx.c.ba...@intel.com> > > --- > > configure.ac | 1 + > > src/Makefile.am | 1 + > > src/intel/vulkan/Makefile.am | 2 + > > src/intel/vulkan/anv_util.c | 36 +------- > > src/vulkan/util/.gitignore | 1 + > > src/vulkan/util/Makefile.am | 22 +++++ > > src/vulkan/util/gen_enum_to_str.py | 172 > > +++++++++++++++++++++++++++++++++++++ > > 7 files changed, 201 insertions(+), 34 deletions(-) > > create mode 100644 src/vulkan/util/.gitignore > > create mode 100644 src/vulkan/util/Makefile.am > > create mode 100644 src/vulkan/util/gen_enum_to_str.py > > > > diff --git a/configure.ac b/configure.ac > > index 7e4544f5bf..c83a5234da 100644 > > --- a/configure.ac > > +++ b/configure.ac > > @@ -2691,6 +2691,7 @@ AC_CONFIG_FILES([Makefile > > src/mesa/main/tests/Makefile > > src/util/Makefile > > src/util/tests/hash_table/Makefile > > + src/vulkan/util/Makefile > > src/vulkan/wsi/Makefile]) > > These two really don't need to be separate Makefiles. > > Can you try, as a follow-on, to combine them as a unified > src/vulkan/Makefile.am?
Okay, I'll do that > > > > > AC_OUTPUT > > diff --git a/src/Makefile.am b/src/Makefile.am > > index 12e5dcdb12..90f95b2265 100644 > > --- a/src/Makefile.am > > +++ b/src/Makefile.am > > @@ -117,6 +117,7 @@ SUBDIRS += intel/tools > > endif > > > > if HAVE_VULKAN_COMMON > > +SUBDIRS += vulkan/util > > SUBDIRS += vulkan/wsi > > List both on the same line. done > > > endif > > EXTRA_DIST += vulkan/registry/vk.xml > > diff --git a/src/intel/vulkan/Makefile.am b/src/intel/vulkan/Makefile.am > > index 4197b0e77c..54bf0f5de1 100644 > > --- a/src/intel/vulkan/Makefile.am > > +++ b/src/intel/vulkan/Makefile.am > > @@ -49,6 +49,7 @@ AM_CPPFLAGS = \ > > -I$(top_builddir)/src \ > > -I$(top_srcdir)/src \ > > -I$(top_srcdir)/src/vulkan/wsi \ > > + -I$(top_builddir)/src/vulkan/util \ > > -I$(top_builddir)/src/compiler \ > > -I$(top_srcdir)/src/compiler \ > > -I$(top_builddir)/src/compiler/nir \ > > @@ -125,6 +126,7 @@ libvulkan_common_la_SOURCES = $(VULKAN_SOURCES) > > > > VULKAN_LIB_DEPS += \ > > libvulkan_common.la \ > > + $(top_builddir)/src/vulkan/util/libvulkan_util.la \ > > $(top_builddir)/src/vulkan/wsi/libvulkan_wsi.la \ > > $(top_builddir)/src/mesa/drivers/dri/i965/libi965_compiler.la \ > > $(top_builddir)/src/compiler/nir/libnir.la \ > > diff --git a/src/intel/vulkan/anv_util.c b/src/intel/vulkan/anv_util.c > > index 6d75187065..ec5c9486d8 100644 > > --- a/src/intel/vulkan/anv_util.c > > +++ b/src/intel/vulkan/anv_util.c > > @@ -29,6 +29,7 @@ > > #include <assert.h> > > > > #include "anv_private.h" > > +#include "vk_enum_to_str.h" > > > > /** Log an error message. */ > > void anv_printflike(1, 2) > > @@ -69,40 +70,7 @@ __vk_errorf(VkResult error, const char *file, int line, > > const char *format, ...) > > va_list ap; > > char buffer[256]; > > > > -#define ERROR_CASE(error) case error: error_str = #error; break; > > - > > - const char *error_str; > > - switch ((int32_t)error) { > > - > > - /* Core errors */ > > - ERROR_CASE(VK_ERROR_OUT_OF_HOST_MEMORY) > > - ERROR_CASE(VK_ERROR_OUT_OF_DEVICE_MEMORY) > > - ERROR_CASE(VK_ERROR_INITIALIZATION_FAILED) > > - ERROR_CASE(VK_ERROR_DEVICE_LOST) > > - ERROR_CASE(VK_ERROR_MEMORY_MAP_FAILED) > > - ERROR_CASE(VK_ERROR_LAYER_NOT_PRESENT) > > - ERROR_CASE(VK_ERROR_EXTENSION_NOT_PRESENT) > > - ERROR_CASE(VK_ERROR_FEATURE_NOT_PRESENT) > > - ERROR_CASE(VK_ERROR_INCOMPATIBLE_DRIVER) > > - ERROR_CASE(VK_ERROR_TOO_MANY_OBJECTS) > > - ERROR_CASE(VK_ERROR_FORMAT_NOT_SUPPORTED) > > - ERROR_CASE(VK_ERROR_FRAGMENTED_POOL) > > - > > - /* Extension errors */ > > - ERROR_CASE(VK_ERROR_SURFACE_LOST_KHR) > > - ERROR_CASE(VK_ERROR_NATIVE_WINDOW_IN_USE_KHR) > > - ERROR_CASE(VK_ERROR_OUT_OF_DATE_KHR) > > - ERROR_CASE(VK_ERROR_INCOMPATIBLE_DISPLAY_KHR) > > - ERROR_CASE(VK_ERROR_VALIDATION_FAILED_EXT) > > - ERROR_CASE(VK_ERROR_INVALID_SHADER_NV) > > - ERROR_CASE(VK_ERROR_OUT_OF_POOL_MEMORY_KHR) > > - > > - default: > > - assert(!"Unknown error"); > > - error_str = "unknown error"; > > - } > > - > > -#undef ERROR_CASE > > + const char *error_str = vk_Result_to_str(error); > > > > if (format) { > > va_start(ap, format); > > diff --git a/src/vulkan/util/.gitignore b/src/vulkan/util/.gitignore > > new file mode 100644 > > index 0000000000..5c79217982 > > --- /dev/null > > +++ b/src/vulkan/util/.gitignore > > @@ -0,0 +1 @@ > > +vk_enum_to_str.* > > diff --git a/src/vulkan/util/Makefile.am b/src/vulkan/util/Makefile.am > > new file mode 100644 > > index 0000000000..ced83e8873 > > --- /dev/null > > +++ b/src/vulkan/util/Makefile.am > > @@ -0,0 +1,22 @@ > > +vulkan_api_xml = $(top_srcdir)/src/vulkan/registry/vk.xml > > + > > +AM_CPPFLAGS = \ > > + -I$(top_srcdir)/include \ > > + -I$(top_srcdir)/src > > + > > +EXTRA_DIST= \ > > Space before = done > > > + gen_enum_to_str.py > > + > > +BUILT_SOURCES= \ > > Space before = done > > > + vk_enum_to_str.c \ > > + vk_enum_to_str.h > > + > > +vk_enum_to_str.c vk_enum_to_str.h: gen_enum_to_str.py $(vulkan_api_xml) > > + $(AM_V_GEN)$(PYTHON2) $(srcdir)/gen_enum_to_str.py > > + > > +noinst_LTLIBRARIES = libvulkan_util.la > > + > > +libvulkan_util_la_SOURCES = \ > > + vk_enum_to_str.c \ > > + vk_enum_to_str.h > > + > > diff --git a/src/vulkan/util/gen_enum_to_str.py > > b/src/vulkan/util/gen_enum_to_str.py > > new file mode 100644 > > index 0000000000..0564b8e028 > > --- /dev/null > > +++ b/src/vulkan/util/gen_enum_to_str.py > > @@ -0,0 +1,172 @@ > > +# encoding=utf-8 > > +# Copyright © 2017 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 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. > > + > > +"""Create enum to string functions for vulking using vk.xml.""" > > + > > +from __future__ import print_function > > +import os > > +import textwrap > > +import xml.etree.cElementTree as et > > + > > +from mako.template import Template > > + > > +VK_XML = os.path.join(os.path.dirname(__file__), '..', 'registry', > > 'vk.xml') > > + > > +COPYRIGHT = textwrap.dedent(u"""\ > > + * Copyright © 2017 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 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.""") > > + > > +C_TEMPLATE = Template(textwrap.dedent(u"""\ > > + /* Autogenerated file -- do not edit > > + * generated by ${file} > > + * > > + ${copyright} > > + */ > > + > > + #include <vulkan/vulkan.h> > > + #include "util/macros.h" > > + #include "vk_enum_to_str.h" > > + > > + % for enum in enums: > > + > > + const char * > > + vk_${enum.name[2:]}_to_str(${enum.name} input) > > + { > > + switch(input) { > > + % for v in enum.values: > > + case ${v}: > > + return "${v}"; > > "case", like "default", shouldn't be indented. I know that it's not good C style to indent the case statements, but I think it makes the for loop of the template more readable. > > Acked-by: Matt Turner <matts...@gmail.com>
signature.asc
Description: signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev