[Mesa-dev] [PATCH 11/20] mesa: Autogenerate most of format_pack.c

Jason Ekstrand jason at jlekstrand.net
Tue Nov 18 10:54:34 PST 2014


On Tue, Nov 18, 2014 at 12:43 AM, Iago Toral Quiroga <itoral at igalia.com>
wrote:

> From: Jason Ekstrand <jason.ekstrand at intel.com>
>
> We were auto-generating it before.  The problem was that the autogeneration
> tool we were using was called "copy, paste, and edit".  Let's use a more
> sensible solution.
>
> Signed-off-by: Jason Ekstrand <jason.ekstrand at intel.com>
>
> v2 by Samuel Iglesias <siglesias at igalia.com>
> - Remove format_pack.c as it is now autogenerated
> - Add usage of INDENT_FLAGS in Makefile.am
> - Remove trailing blank line
>
> Signed-off-by: Samuel Iglesias Gonsalvez <siglesias at igalia.com>
> ---
>  src/mesa/Makefile.am             |    9 +
>  src/mesa/Makefile.sources        |    2 +-
>  src/mesa/main/format_convert.py  |   71 +
>  src/mesa/main/format_pack.c      | 2982
> --------------------------------------
>  src/mesa/main/format_pack.c.mako |  898 ++++++++++++
>  src/mesa/main/run_mako.py        |    7 +
>  6 files changed, 986 insertions(+), 2983 deletions(-)
>  create mode 100644 src/mesa/main/format_convert.py
>  delete mode 100644 src/mesa/main/format_pack.c
>  create mode 100644 src/mesa/main/format_pack.c.mako
>  create mode 100644 src/mesa/main/run_mako.py
>
> diff --git a/src/mesa/Makefile.am b/src/mesa/Makefile.am
> index e71bccb..76cac4a 100644
> --- a/src/mesa/Makefile.am
> +++ b/src/mesa/Makefile.am
> @@ -66,6 +66,7 @@ BUILT_SOURCES = \
>         main/get_hash.h \
>          main/format_info.c \
>         $(BUILDDIR)main/git_sha1.h \
> +       $(BUILDDIR)main/format_pack.c \
>         $(BUILDDIR)program/program_parse.tab.c \
>         $(BUILDDIR)program/lex.yy.c
>  CLEANFILES = \
> @@ -89,6 +90,14 @@ main/format_info.c: main/formats.csv
>                 \
>                     $< > $@.tmp;                                         \
>         mv $@.tmp $@;
>
> +$(BUILDDIR)main/format_pack.c: main/format_pack.c.mako main/formats.csv \
> +                               main/run_mako.py main/format_parser.py
> +       $(AM_V_GEN)set -e;                                              \
> +       $(PYTHON2) $(PYTHON_FLAGS) $(srcdir)/main/run_mako.py           \
> +                   $< $(srcdir)/main/formats.csv > $@.tmp;              \
> +       cat $@.tmp | $(INDENT) $(INDENT_FLAGS) > $@;                    \
> +        rm $@.tmp;
> +
>  main/formats.c: main/format_info.c
>
>  noinst_LTLIBRARIES = $(ARCH_LIBS)
> diff --git a/src/mesa/Makefile.sources b/src/mesa/Makefile.sources
> index 4755018..99fc497 100644
> --- a/src/mesa/Makefile.sources
> +++ b/src/mesa/Makefile.sources
> @@ -50,7 +50,7 @@ MAIN_FILES = \
>         $(SRCDIR)main/fog.c \
>         $(SRCDIR)main/formatquery.c \
>         $(SRCDIR)main/formats.c \
> -       $(SRCDIR)main/format_pack.c \
> +       $(BUILDDIR)main/format_pack.c \
>         $(SRCDIR)main/format_unpack.c \
>         $(SRCDIR)main/format_utils.c \
>         $(SRCDIR)main/framebuffer.c \
> diff --git a/src/mesa/main/format_convert.py
> b/src/mesa/main/format_convert.py
> new file mode 100644
> index 0000000..0423427
> --- /dev/null
> +++ b/src/mesa/main/format_convert.py
> @@ -0,0 +1,71 @@
> +#!/usr/bin/env python
> +#
> +# Copyright 2014 Intel Corporation
> +# All Rights Reserved.
> +#
> +# 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, sub license, 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 NON-INFRINGEMENT.
> +# IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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.
> +
> +import format_parser as parser
> +
> +def __get_datatype(_type, size):
> +   if _type == parser.FLOAT:
> +      if size == 32:
> +         return 'float'
> +      elif size == 16:
> +         return 'uint16_t'
> +      else:
> +         assert False
> +   elif _type == parser.UNSIGNED:
> +      if size <= 8:
> +         return 'uint8_t'
> +      elif size <= 16:
> +         return 'uint16_t'
> +      elif size <= 32:
> +         return 'uint32_t'
> +      else:
> +         assert False
> +   elif _type == parser.SIGNED:
> +      if size <= 8:
> +         return 'int8_t'
> +      elif size <= 16:
> +         return 'int16_t'
> +      elif size <= 32:
> +         return 'int32_t'
> +      else:
> +         assert False
> +   else:
> +      assert False
> +
> +def channel_datatype(c):
> +   return __get_datatype(c.type, c.size)
> +
> +def format_datatype(f):
> +   if f.layout == parser.PACKED:
> +      if f.block_size() == 8:
> +         return 'uint8_t'
> +      if f.block_size() == 16:
> +         return 'uint16_t'
> +      if f.block_size() == 32:
> +         return 'uint32_t'
> +      else:
> +         assert False
> +   else:
> +      return __get_datatype(f.channel_type(), f.channel_size())
>

On second thought, this could probably be easily rolled into the format
parse.  I initially; had it separate because this file initially contained
almost the entire generator and was highly GL-specific.  Now that it's just
a couple of helpers to get an stdint datatype, I don't see any reason for
it to be its own file.  We should just have c_datatype methods on Format
and Channel in format_parser.py and get rid of the extra file.
--Jason

(snip...)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20141118/d2181d2a/attachment-0001.html>


More information about the mesa-dev mailing list