summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVladislav Egorov <[email protected]>2017-05-21 22:49:17 +0200
committerTimothy Arceri <[email protected]>2017-05-22 12:34:28 +1000
commit4a47247523e678a3a9d3939e8a3c217188b99452 (patch)
treeff701ebd659f0b3efb1f5c450ff72a3d28a023c3
parentb8e792ee25e01ce1e9e4f3ed444f8e1ade8c992e (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.c10
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);