mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-04 02:40:11 +01:00
fix parse error in sign of exponents (bug 968323)
This commit is contained in:
parent
7c381a267a
commit
0590895ea7
1 changed files with 13 additions and 30 deletions
|
|
@ -621,23 +621,23 @@ parse_string_without_adding (GLubyte ** inst, struct arb_program *Program)
|
|||
}
|
||||
|
||||
/**
|
||||
* \return 0 if sign is plus, 1 if sign is minus
|
||||
* \return -1 if we parse '-', return 1 otherwise
|
||||
*/
|
||||
static GLuint
|
||||
static GLint
|
||||
parse_sign (GLubyte ** inst)
|
||||
{
|
||||
/*return *(*inst)++ != '+'; */
|
||||
|
||||
if (**inst == '-') {
|
||||
(*inst)++;
|
||||
return 1;
|
||||
return -1;
|
||||
}
|
||||
else if (**inst == '+') {
|
||||
(*inst)++;
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -670,10 +670,7 @@ parse_integer (GLubyte ** inst, struct arb_program *Program)
|
|||
*/
|
||||
Program->Position = parse_position (inst);
|
||||
|
||||
if (sign)
|
||||
value *= -1;
|
||||
|
||||
return value;
|
||||
return value * sign;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -685,9 +682,6 @@ parse_float (GLubyte ** inst, struct arb_program *Program)
|
|||
GLuint leading_zeros =0;
|
||||
GLfloat value = 0;
|
||||
|
||||
#if 0
|
||||
tmp[0] = parse_sign (inst); /* This is the sign of the number + - >0, - -> 1 */
|
||||
#endif
|
||||
tmp[1] = parse_integer (inst, Program); /* This is the integer portion of the number */
|
||||
|
||||
/* Now we grab the fractional portion of the number (the digits after
|
||||
|
|
@ -709,10 +703,7 @@ parse_float (GLubyte ** inst, struct arb_program *Program)
|
|||
denom *= 10;
|
||||
denom *= (GLint) _mesa_pow( 10, leading_zeros );
|
||||
value += (GLfloat) tmp[2] / (GLfloat) denom;
|
||||
#if 0
|
||||
if (tmp[0])
|
||||
value *= -1;
|
||||
#endif
|
||||
|
||||
value *= (GLfloat) _mesa_pow (10, (GLfloat) tmp[3] * (GLfloat) tmp[4]);
|
||||
|
||||
return value;
|
||||
|
|
@ -724,17 +715,9 @@ parse_float (GLubyte ** inst, struct arb_program *Program)
|
|||
static GLfloat
|
||||
parse_signed_float (GLubyte ** inst, struct arb_program *Program)
|
||||
{
|
||||
GLint negate;
|
||||
GLfloat value;
|
||||
|
||||
negate = parse_sign (inst);
|
||||
|
||||
value = parse_float (inst, Program);
|
||||
|
||||
if (negate)
|
||||
value *= -1;
|
||||
|
||||
return value;
|
||||
GLint sign = parse_sign (inst);
|
||||
GLfloat value = parse_float (inst, Program);
|
||||
return value * sign;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -2405,7 +2388,7 @@ parse_extended_swizzle_mask (GLubyte ** inst, GLubyte * mask, GLboolean * Negate
|
|||
|
||||
*Negate = GL_FALSE;
|
||||
for (a = 0; a < 4; a++) {
|
||||
if (parse_sign (inst))
|
||||
if (parse_sign (inst) == -1)
|
||||
*Negate = GL_TRUE;
|
||||
|
||||
swz = *(*inst)++;
|
||||
|
|
@ -2614,7 +2597,7 @@ parse_vector_src_reg (GLcontext * ctx, GLubyte ** inst,
|
|||
GLubyte * Swizzle, GLboolean *IsRelOffset)
|
||||
{
|
||||
/* Grab the sign */
|
||||
*Negate = parse_sign (inst);
|
||||
*Negate = (parse_sign (inst) == -1);
|
||||
|
||||
/* And the src reg */
|
||||
if (parse_src_reg (ctx, inst, vc_head, Program, File, Index, IsRelOffset))
|
||||
|
|
@ -2635,7 +2618,7 @@ parse_scalar_src_reg (GLcontext * ctx, GLubyte ** inst,
|
|||
GLubyte * Swizzle, GLboolean *IsRelOffset)
|
||||
{
|
||||
/* Grab the sign */
|
||||
*Negate = parse_sign (inst);
|
||||
*Negate = (parse_sign (inst) == -1);
|
||||
|
||||
/* And the src reg */
|
||||
if (parse_src_reg (ctx, inst, vc_head, Program, File, Index, IsRelOffset))
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue