[Mesa-dev] [PATCH 1/2] ralloc: Make rewrite_tail increase "start" by the new text's length.
Ian Romanick
idr at freedesktop.org
Wed Feb 22 13:50:40 PST 2012
On 02/21/2012 01:38 PM, Kenneth Graunke wrote:
> Both callers of rewrite_tail immediately compute the new total string
> length by adding the (known) length of the existing string plus the
> length of the newly appended text. Unfortunately, callers generally
> won't know the length of the new text, as it's printf-formatted.
>
> Since ralloc already computes this length, it makes sense to add it in
> and save the caller the effort. This simplifies both existing callers,
> but more importantly, will allow for cheap-appending in the next commit.
>
> Signed-off-by: Kenneth Graunke<kenneth at whitecape.org>
The series is
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
> ---
> src/glsl/link_uniforms.cpp | 14 +++++---------
> src/glsl/linker.h | 2 +-
> src/glsl/ralloc.c | 11 ++++++-----
> src/glsl/ralloc.h | 6 ++++--
> 4 files changed, 16 insertions(+), 17 deletions(-)
>
> diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp
> index d51850c..aca6dc0 100644
> --- a/src/glsl/link_uniforms.cpp
> +++ b/src/glsl/link_uniforms.cpp
> @@ -67,7 +67,7 @@ uniform_field_visitor::process(ir_variable *var)
>
> void
> uniform_field_visitor::recursion(const glsl_type *t, char **name,
> - unsigned name_length)
> + size_t name_length)
> {
> /* Records need to have each field processed individually.
> *
> @@ -80,20 +80,16 @@ uniform_field_visitor::recursion(const glsl_type *t, char **name,
> const char *field = t->fields.structure[i].name;
>
> /* Append '.field' to the current uniform name. */
> - ralloc_asprintf_rewrite_tail(name, name_length, ".%s", field);
> + ralloc_asprintf_rewrite_tail(name,&name_length, ".%s", field);
>
> - recursion(t->fields.structure[i].type, name,
> - name_length + 1 + strlen(field));
> + recursion(t->fields.structure[i].type, name, name_length);
> }
> } else if (t->is_array()&& t->fields.array->is_record()) {
> for (unsigned i = 0; i< t->length; i++) {
> - char subscript[13];
> -
> /* Append the subscript to the current uniform name */
> - const unsigned subscript_length = snprintf(subscript, 13, "[%u]", i);
> - ralloc_asprintf_rewrite_tail(name, name_length, "%s", subscript);
> + ralloc_asprintf_rewrite_tail(name,&name_length, "[%u]", i);
>
> - recursion(t->fields.array, name, name_length + subscript_length);
> + recursion(t->fields.array, name, name_length);
> }
> } else {
> this->visit_field(t, *name);
> diff --git a/src/glsl/linker.h b/src/glsl/linker.h
> index 433c63b..0b4c001 100644
> --- a/src/glsl/linker.h
> +++ b/src/glsl/linker.h
> @@ -76,7 +76,7 @@ private:
> * \param name_length Length of the current name \b not including the
> * terminating \c NUL character.
> */
> - void recursion(const glsl_type *t, char **name, unsigned name_length);
> + void recursion(const glsl_type *t, char **name, size_t name_length);
> };
>
> #endif /* GLSL_LINKER_H */
> diff --git a/src/glsl/ralloc.c b/src/glsl/ralloc.c
> index 91e4bab..2f93dcd 100644
> --- a/src/glsl/ralloc.c
> +++ b/src/glsl/ralloc.c
> @@ -448,11 +448,11 @@ ralloc_vasprintf_append(char **str, const char *fmt, va_list args)
> size_t existing_length;
> assert(str != NULL);
> existing_length = *str ? strlen(*str) : 0;
> - return ralloc_vasprintf_rewrite_tail(str, existing_length, fmt, args);
> + return ralloc_vasprintf_rewrite_tail(str,&existing_length, fmt, args);
> }
>
> bool
> -ralloc_asprintf_rewrite_tail(char **str, size_t start, const char *fmt, ...)
> +ralloc_asprintf_rewrite_tail(char **str, size_t *start, const char *fmt, ...)
> {
> bool success;
> va_list args;
> @@ -463,7 +463,7 @@ ralloc_asprintf_rewrite_tail(char **str, size_t start, const char *fmt, ...)
> }
>
> bool
> -ralloc_vasprintf_rewrite_tail(char **str, size_t start, const char *fmt,
> +ralloc_vasprintf_rewrite_tail(char **str, size_t *start, const char *fmt,
> va_list args)
> {
> size_t new_length;
> @@ -479,11 +479,12 @@ ralloc_vasprintf_rewrite_tail(char **str, size_t start, const char *fmt,
>
> new_length = printf_length(fmt, args);
>
> - ptr = resize(*str, start + new_length + 1);
> + ptr = resize(*str, *start + new_length + 1);
> if (unlikely(ptr == NULL))
> return false;
>
> - vsnprintf(ptr + start, new_length + 1, fmt, args);
> + vsnprintf(ptr + *start, new_length + 1, fmt, args);
> *str = ptr;
> + *start += new_length;
> return true;
> }
> diff --git a/src/glsl/ralloc.h b/src/glsl/ralloc.h
> index 1324f34..86306b1 100644
> --- a/src/glsl/ralloc.h
> +++ b/src/glsl/ralloc.h
> @@ -329,10 +329,11 @@ char *ralloc_vasprintf(const void *ctx, const char *fmt, va_list args);
> * \param fmt A printf-style formatting string
> *
> * \p str will be updated to the new pointer unless allocation fails.
> + * \p start will be increased by the length of the newly formatted text.
> *
> * \return True unless allocation failed.
> */
> -bool ralloc_asprintf_rewrite_tail(char **str, size_t start,
> +bool ralloc_asprintf_rewrite_tail(char **str, size_t *start,
> const char *fmt, ...);
>
> /**
> @@ -352,10 +353,11 @@ bool ralloc_asprintf_rewrite_tail(char **str, size_t start,
> * \param args A va_list containing the data to be formatted
> *
> * \p str will be updated to the new pointer unless allocation fails.
> + * \p start will be increased by the length of the newly formatted text.
> *
> * \return True unless allocation failed.
> */
> -bool ralloc_vasprintf_rewrite_tail(char **str, size_t start, const char *fmt,
> +bool ralloc_vasprintf_rewrite_tail(char **str, size_t *start, const char *fmt,
> va_list args);
>
> /**
More information about the mesa-dev
mailing list