diff options
author | marha <marha@users.sourceforge.net> | 2012-01-20 09:41:09 +0100 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2012-01-20 09:41:09 +0100 |
commit | c5f912c7b9248440bf9dff4b3c64513ec0f3ec98 (patch) | |
tree | 7986b288489dac6a8a70787dbdedfc0c064a0c02 /mesalib/src/glsl | |
parent | 27bec2ba601ec12334e6b7564034f87ab7c9522b (diff) | |
parent | a8ef69cc0c9e5281e6b745dd4a2be75f629eb8b8 (diff) | |
download | vcxsrv-c5f912c7b9248440bf9dff4b3c64513ec0f3ec98.tar.gz vcxsrv-c5f912c7b9248440bf9dff4b3c64513ec0f3ec98.tar.bz2 vcxsrv-c5f912c7b9248440bf9dff4b3c64513ec0f3ec98.zip |
Merge remote-tracking branch 'origin/released'
Diffstat (limited to 'mesalib/src/glsl')
-rw-r--r-- | mesalib/src/glsl/link_uniforms.cpp | 2 | ||||
-rw-r--r-- | mesalib/src/glsl/linker.cpp | 2 | ||||
-rw-r--r-- | mesalib/src/glsl/s_expression.cpp | 36 |
3 files changed, 24 insertions, 16 deletions
diff --git a/mesalib/src/glsl/link_uniforms.cpp b/mesalib/src/glsl/link_uniforms.cpp index 0b8a02d4e..296e4e20c 100644 --- a/mesalib/src/glsl/link_uniforms.cpp +++ b/mesalib/src/glsl/link_uniforms.cpp @@ -287,7 +287,7 @@ private: this->uniforms[id].sampler = ~0; } - this->uniforms[id].name = strdup(name); + this->uniforms[id].name = ralloc_strdup(this->uniforms, name); this->uniforms[id].type = base_type; this->uniforms[id].initialized = 0; this->uniforms[id].num_driver_storage = 0; diff --git a/mesalib/src/glsl/linker.cpp b/mesalib/src/glsl/linker.cpp index 0d85aeee6..adedfe6f3 100644 --- a/mesalib/src/glsl/linker.cpp +++ b/mesalib/src/glsl/linker.cpp @@ -1984,7 +1984,7 @@ store_tfeedback_info(struct gl_context *ctx, struct gl_shader_program *prog, separate_attribs_mode ? num_tfeedback_decls : 1; prog->LinkedTransformFeedback.Varyings = - rzalloc_array(prog->LinkedTransformFeedback.Varyings, + rzalloc_array(prog, struct gl_transform_feedback_varying_info, num_tfeedback_decls); diff --git a/mesalib/src/glsl/s_expression.cpp b/mesalib/src/glsl/s_expression.cpp index e704a3be2..57de9d334 100644 --- a/mesalib/src/glsl/s_expression.cpp +++ b/mesalib/src/glsl/s_expression.cpp @@ -23,6 +23,7 @@ */ #include <assert.h> +#include <limits> #include "s_expression.h" s_symbol::s_symbol(const char *str, size_t n) @@ -64,21 +65,28 @@ read_atom(void *ctx, const char *&src, char *&symbol_buffer) if (n == 0) return NULL; // no atom - // Check if the atom is a number. - char *float_end = NULL; - double f = glsl_strtod(src, &float_end); - if (float_end != src) { - char *int_end = NULL; - int i = strtol(src, &int_end, 10); - // If strtod matched more characters, it must have a decimal part - if (float_end > int_end) - expr = new(ctx) s_float(f); - else - expr = new(ctx) s_int(i); + // Check for the special symbol '+INF', which means +Infinity. Note: C99 + // requires strtod to parse '+INF' as +Infinity, but we still support some + // non-C99-compliant compilers (e.g. MSVC). + if (n == 4 && strncmp(src, "+INF", 4) == 0) { + expr = new(ctx) s_float(std::numeric_limits<float>::infinity()); } else { - // Not a number; return a symbol. - symbol_buffer[n] = '\0'; - expr = new(ctx) s_symbol(symbol_buffer, n); + // Check if the atom is a number. + char *float_end = NULL; + double f = glsl_strtod(src, &float_end); + if (float_end != src) { + char *int_end = NULL; + int i = strtol(src, &int_end, 10); + // If strtod matched more characters, it must have a decimal part + if (float_end > int_end) + expr = new(ctx) s_float(f); + else + expr = new(ctx) s_int(i); + } else { + // Not a number; return a symbol. + symbol_buffer[n] = '\0'; + expr = new(ctx) s_symbol(symbol_buffer, n); + } } src += n; |