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.
---
 src/compiler/glsl/glcpp/pp.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/compiler/glsl/glcpp/pp.c b/src/compiler/glsl/glcpp/pp.c
index af4ec93..c196868 100644
--- a/src/compiler/glsl/glcpp/pp.c
+++ b/src/compiler/glsl/glcpp/pp.c
@@ -236,6 +236,12 @@ remove_line_continuations(glcpp_parser_t *ctx, const char 
*shader)
        int collapsed_newlines = 0;
        int separator_len;
 
+       backslash = strchr(shader, '\\');
+
+       /* No line continuations were found in this shader, our job is done */
+       if (backslash == NULL)
+               return (char *) shader;
+
        sb.capacity = 4096 - RALLOC_OVERHEAD;
        sb.buf = ralloc_size(ctx, sb.capacity);
        sb.length = 0;
@@ -281,8 +287,6 @@ remove_line_continuations(glcpp_parser_t *ctx, const char 
*shader)
        separator_len = strlen(newline_separator);
 
        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
@@ -331,6 +335,8 @@ remove_line_continuations(glcpp_parser_t *ctx, const char 
*shader)
                        shader = skip_newline (backslash + 1);
                        search_start = shader;
                }
+
+               backslash = strchr(search_start, '\\');
        }
 
        glcpp_append(ctx, &sb, shader);
-- 
2.7.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to