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

Samuel Iglesias Gonsálvez siglesias at igalia.com
Wed Nov 19 05:49:35 PST 2014


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 18/11/14 19:54, Jason Ekstrand wrote:
> 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

OK, good idea. I'm going to move them to format_parser.py for the second
version of the patches.

Thanks,

Sam
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iQIcBAEBAgAGBQJUbJ/vAAoJEH/0ujLxfcNDfUsP/RZtcF31VvM0tL5QcAH7P/ES
efk1D2Apoj0yr3RxN/rzzz38C1uzltUfg4MsOrLowbJ7qpL5PXHs7H1G3HXWSdiD
JdFkPX4ZcfdoUull+KhZPYLkp5N26q+eAH7icSwUGRjba/MceO73hMxj+2zkjYTt
lLA5ZXh1glRzCHqBJKvMhEViZyvZZGJni/EpSq9sg0Qg/mLxVAeemqsVFRh753fR
uS6f0m5MfduMc9ZPAX/b9pwdNEaW+/JcmEnArKw7veRId7chBpR0DQAtCIA7EWvw
BpcPDz3G22FFgN4ckbCJ3F6mjDMEnJLDWKeJ5hR+dnWIUmmNZ97uB7TYjxSmRS1D
7IMaGjrM/1FTvcErgXecXmR6dHuv06eaMAhjmq38qnIF53Z5pMNoB86luDSv43xJ
5qwruigW6hBhUeS+ogRdxdwU8w/0UKtcLfg0eAROdnGj+8L1vXRizBcTquS1ySPt
j/Md4s2I+Pa/H2Eof02ZF2cg1V1F81SuC/aZ47hf4+ueNgljSD3nxKK5LJrYzFR/
tVkOh4+4rqS+CwjeIRXeZuVgIjCf+QbJBnyayy5LaSZmVPTIziyDf3HY2EAlGoVN
KPlkluekiBISQupNxcnYLvE85B4yX5C09rQXSukQhRRVUZGwuAiTy/JKMXIoUThv
/DbxIkBgij9RS0TV/JRw
=duf/
-----END PGP SIGNATURE-----


More information about the mesa-dev mailing list