MSVC's strtod() function does not parse "inf" or "-inf" so add a wrapper function to do that. Several generated shader tests use inf uniforms. --- tests/shaders/shader_runner.c | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-)
diff --git a/tests/shaders/shader_runner.c b/tests/shaders/shader_runner.c index a1bd5ee..d2cb666 100644 --- a/tests/shaders/shader_runner.c +++ b/tests/shaders/shader_runner.c @@ -1236,13 +1236,44 @@ get_required_config(const char *script_name, } } +/** + * Wrapper for strtod() which also handles +/-inf with MSVC. + * Note: we only check for "inf" and not "INF". + */ +static double +strtod_inf(const char *nptr, char **endptr) +{ +#if defined(_MSC_VER) + /* Define our own infinty value here */ + const unsigned inf_u = 0x7f800000; + const float inf = *((float *) &inf_u); + + /* skip spaces and tabs */ + while (*nptr == ' ' || *nptr == '\t') + nptr++; + + if (nptr[0] == 'i' && nptr[1] == 'n' && nptr[2] == 'f') { + /* +infinity */ + *endptr = (char *) (nptr + 3); + return inf; + } + else if (nptr[0] == '-' && nptr[1] == 'i' && nptr[2] == 'n' && nptr[3] == 'f') { + /* -infinity */ + *endptr = (char *) (nptr + 4); + return -inf; + } + /* fall-through */ +#endif + return strtod(nptr, endptr); +} + void get_floats(const char *line, float *f, unsigned count) { unsigned i; for (i = 0; i < count; i++) - f[i] = strtod(line, (char **) &line); + f[i] = strtod_inf(line, (char **) &line); } void @@ -1251,7 +1282,7 @@ get_doubles(const char *line, double *d, unsigned count) unsigned i; for (i = 0; i < count; i++) - d[i] = strtod(line, (char **) &line); + d[i] = strtod_inf(line, (char **) &line); } -- 1.7.10.4 _______________________________________________ Piglit mailing list Piglit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/piglit