[Mesa-dev] [PATCH 0/9][RFC] GLSL preprocessor/parser improvements

Timothy Arceri tarceri at itsqueeze.com
Mon May 22 01:41:45 UTC 2017


I suspect you forgot to test with a debug build, there is issues with 
the string buffer  changes somewhere.

ralloc.c:203: reralloc_size: Assertion `ralloc_parent(ptr) == ctx' failed.

#0  0x00007ffff70eb91f in raise () from /lib64/libc.so.6
#1  0x00007ffff70ed51a in abort () from /lib64/libc.so.6
#2  0x00007ffff70e3da7 in __assert_fail_base () from /lib64/libc.so.6
#3  0x00007ffff70e3e52 in __assert_fail () from /lib64/libc.so.6
#4  0x00007ffff442c73c in reralloc_size (ctx=ctx at entry=0x7fffd40cb910, 
ptr=<optimized out>, size=<optimized out>) at ralloc.c:203
#5  0x00007ffff44b519e in glcpp_preprocess 
(ralloc_ctx=ralloc_ctx at entry=0x7fffd40c9da0, 
shader=shader at entry=0x7fffea7cfcc8, info_log=info_log at entry=0x7fffd40ca058,
     extensions=extensions at entry=0x7ffff43ff070 
<add_builtin_defines(_mesa_glsl_parse_state*, void (*)(glcpp_parser*, 
char const*, int), glcpp_parser*, unsigned int, bool)>, 
state=state at entry=0x7fffd40c9da0,
     gl_ctx=gl_ctx at entry=0x7fffe85c7010) at glsl/glcpp/pp.c:246
#6  0x00007ffff4402665 in _mesa_glsl_compile_shader 
(ctx=ctx at entry=0x7fffe85c7010, shader=shader at entry=0x7fffd40c8cc0, 
dump_ast=dump_ast at entry=false, dump_hir=dump_hir at entry=false, 
force_recompile=force_recompile at entry=false)
     at glsl/glsl_parser_extras.cpp:2065


On 22/05/17 06:49, Thomas Helland wrote:
> This patch series contains some of the work done by Vladislav
> in the beginning of March, that seems to have been forgotten.
> 
> For reference, that series, with review comments, can be found here:
> https://lists.freedesktop.org/archives/mesa-dev/2017-January/139892.html
> 
> I've adressed some of the review comments, most notably redoing the
> string buffer implementation quite a bit, and adding tests.
> The major change is that it is now decoupled from the parser
> and instead lives in /src/util/ as a utility for easier reuse.
> I've also closely followed the structure of our hash table and set
> so that it should be quite familiar for everyone. My implementation
> is also null terminated, while Vladislav's implementation was not.
> My reasoning behind this was that it's less fragile if someone where
> to access the contents of the buffer directly. I've also expanded
> with some different functions that allow us to do more stuff.
> Obviously this could be expanded upon further if need be.
> 
> I've included some of Vladislav's less involved patches that
> I think we should get in as soon as possible. I've added Ian's
> r-b on the ones that he reviewed (I hope that's OK). The one
> patch that is missing from this series is the hand-written
> custom parser. While this was the thing that gave the biggest
> speed-up, unfortunately it's also a bit harder to review,
> so I've left that as a future exercise.
> 
> I've run it through my complete shader-db and there's no changes
> or breakages, so that's encouraging. It amounts to about a 3%
> reduction in runtime and executed instructions on the shader-db run.
> It should be noted that the i965 backend is the primary bottleneck
> when running shader-db on my computer, so the numbers don't look all
> that impressive due to this. I'll see if I can come up with some
> numbers using the gallium noop driver.
> 
> I have not done a very thorough job on testing that the output
> of the preprocessor/parser is the same after this series.
> However, there's no changes here that I believe should cause
> any issues, so I feel quite confident that this series should
> not cause any trouble. The original series did have some issues
> discovered by running a fuzzer over it, however I expect that
> was caused by the introduced hand-written fast-path scanner and
> associated macro substitutaion that are not a part of this series.
> 
> CC: Vladislav Egorov <vegorov180 at gmail.com>
> CC: Ian Romanick <idr at freedesktop.com>
> 
> Thomas Helland (5):
>    util: Add a string buffer implementation
>    util: Add tests for the string buffer
>    glsl: Change the parser to use the string buffer
>    glcpp: Use string_buffer for line continuation removal
>    glcpp: Avoid unnecessary call to strlen
> 
> Vladislav Egorov (4):
>    glcpp: Avoid unnecessary strcmp()
>    glcpp: Skip unnecessary line continuations removal
>    ralloc: Use strnlen() inside of strncat()
>    glcpp: Use Bloom filter before identifier search
> 
>   configure.ac                                    |   1 +
>   src/compiler/glsl/glcpp/glcpp-lex.l             |   3 +-
>   src/compiler/glsl/glcpp/glcpp-parse.y           | 123 +++++++++-------
>   src/compiler/glsl/glcpp/glcpp.h                 |  18 ++-
>   src/compiler/glsl/glcpp/pp.c                    |  73 ++++++----
>   src/util/Makefile.am                            |   3 +-
>   src/util/Makefile.sources                       |   2 +
>   src/util/ralloc.c                               |   7 +-
>   src/util/string_buffer.c                        | 180 ++++++++++++++++++++++++
>   src/util/string_buffer.h                        |  75 ++++++++++
>   src/util/tests/string_buffer/Makefile.am        |  34 +++++
>   src/util/tests/string_buffer/append_and_print.c |  82 +++++++++++
>   12 files changed, 505 insertions(+), 96 deletions(-)
>   create mode 100644 src/util/string_buffer.c
>   create mode 100644 src/util/string_buffer.h
>   create mode 100644 src/util/tests/string_buffer/Makefile.am
>   create mode 100644 src/util/tests/string_buffer/append_and_print.c
> 


More information about the mesa-dev mailing list