diff options
author | Vladislav Egorov <[email protected]> | 2017-05-21 22:49:17 +0200 |
---|---|---|
committer | Timothy Arceri <[email protected]> | 2017-05-22 12:34:28 +1000 |
commit | 4a47247523e678a3a9d3939e8a3c217188b99452 (patch) | |
tree | ff701ebd659f0b3efb1f5c450ff72a3d28a023c3 | |
parent | b8e792ee25e01ce1e9e4f3ed444f8e1ade8c992e (diff) |
glcpp: Skip unnecessary line continuations removal
Overwhelming majority of shaders don't use line continuations. In my
shader-db only shaders from the Talos Principle and Serious Sam used
them, less than 1% out of all shaders. Optimize for this case, don't
do any copying if no line continuation was found.
Reviewed-by: Ian Romanick <[email protected]>
Reviewed-by: Timothy Arceri <[email protected]>
-rw-r--r-- | src/compiler/glsl/glcpp/pp.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/compiler/glsl/glcpp/pp.c b/src/compiler/glsl/glcpp/pp.c index c526f37719c..96125f2e2f1 100644 --- a/src/compiler/glsl/glcpp/pp.c +++ b/src/compiler/glsl/glcpp/pp.c @@ -117,6 +117,12 @@ remove_line_continuations(glcpp_parser_t *ctx, const char *shader) char newline_separator[3]; int collapsed_newlines = 0; + backslash = strchr(shader, '\\'); + + /* No line continuations were found in this shader, our job is done */ + if (backslash == NULL) + return (char *) shader; + search_start = shader; /* Determine what flavor of newlines this shader is using. GLSL @@ -157,8 +163,6 @@ remove_line_continuations(glcpp_parser_t *ctx, const char *shader) } while (true) { - backslash = strchr(search_start, '\\'); - /* If we have previously collapsed any line-continuations, * then we want to insert additional newlines at the next * occurrence of a newline character to avoid changing any @@ -204,6 +208,8 @@ remove_line_continuations(glcpp_parser_t *ctx, const char *shader) shader = skip_newline (backslash + 1); search_start = shader; } + + backslash = strchr(search_start, '\\'); } ralloc_strcat(&clean, shader); |