[Mesa-dev] [PATCH 09/13] tnl: Avoid double promotion.
Iago Toral
itoral at igalia.com
Tue Jul 14 03:53:18 PDT 2015
On Mon, 2015-07-13 at 16:22 -0700, Matt Turner wrote:
> There are a couple of unrelated changes in t_vb_lighttmp.h that I hope
> you'll excuse -- there's a block of code that's duplicated modulo a few
> trivial differences that I took the liberty of fixing.
> ---
> src/mesa/tnl/t_draw.c | 2 +-
> src/mesa/tnl/t_rasterpos.c | 6 +++---
> src/mesa/tnl/t_vb_fog.c | 6 +++---
> src/mesa/tnl/t_vb_light.c | 16 ++++++++--------
> src/mesa/tnl/t_vb_lighttmp.h | 16 +++++++---------
> src/mesa/tnl/t_vb_normals.c | 4 ++--
> src/mesa/tnl/t_vertex_generic.c | 2 +-
> 7 files changed, 25 insertions(+), 27 deletions(-)
>
> diff --git a/src/mesa/tnl/t_draw.c b/src/mesa/tnl/t_draw.c
> index 6adf1dc..713c6a9 100644
> --- a/src/mesa/tnl/t_draw.c
> +++ b/src/mesa/tnl/t_draw.c
> @@ -257,7 +257,7 @@ static GLboolean *_tnl_import_edgeflag( struct gl_context *ctx,
> GLuint i;
>
> for (i = 0; i < count; i++) {
> - *bptr++ = ((GLfloat *)ptr)[0] == 1.0;
> + *bptr++ = ((GLfloat *)ptr)[0] == 1.0F;
> ptr += stride;
> }
>
> diff --git a/src/mesa/tnl/t_rasterpos.c b/src/mesa/tnl/t_rasterpos.c
> index 7ef50ea..4bd9ac8 100644
> --- a/src/mesa/tnl/t_rasterpos.c
> +++ b/src/mesa/tnl/t_rasterpos.c
> @@ -148,7 +148,7 @@ shade_rastpos(struct gl_context *ctx,
> SUB_3V(VP, light->_Position, vertex);
> /* d = length(VP) */
> d = (GLfloat) LEN_3FV( VP );
> - if (d > 1.0e-6) {
> + if (d > 1.0e-6F) {
> /* normalize VP */
> GLfloat invd = 1.0F / d;
> SELF_SCALE_SCALAR_3V(VP, invd);
> @@ -172,7 +172,7 @@ shade_rastpos(struct gl_context *ctx,
> }
> }
>
> - if (attenuation < 1e-3)
> + if (attenuation < 1e-3F)
> continue;
>
> n_dot_VP = DOT3( normal, VP );
> @@ -219,7 +219,7 @@ shade_rastpos(struct gl_context *ctx,
> shine = ctx->Light.Material.Attrib[MAT_ATTRIB_FRONT_SHININESS][0];
> spec_coef = powf(n_dot_h, shine);
>
> - if (spec_coef > 1.0e-10) {
> + if (spec_coef > 1.0e-10F) {
> if (ctx->Light.Model.ColorControl==GL_SEPARATE_SPECULAR_COLOR) {
> ACC_SCALE_SCALAR_3V( specularContrib, spec_coef,
> light->_MatSpecular[0]);
> diff --git a/src/mesa/tnl/t_vb_fog.c b/src/mesa/tnl/t_vb_fog.c
> index 1ca72f8..5489ed6 100644
> --- a/src/mesa/tnl/t_vb_fog.c
> +++ b/src/mesa/tnl/t_vb_fog.c
> @@ -45,8 +45,8 @@ struct fog_stage_data {
> #define FOG_STAGE_DATA(stage) ((struct fog_stage_data *)stage->privatePtr)
>
> #define FOG_EXP_TABLE_SIZE 256
> -#define FOG_MAX (10.0)
> -#define EXP_FOG_MAX .0006595
> +#define FOG_MAX (10.0F)
> +#define EXP_FOG_MAX .0006595F
> #define FOG_INCR (FOG_MAX/FOG_EXP_TABLE_SIZE)
> static GLfloat exp_table[FOG_EXP_TABLE_SIZE];
> static GLfloat inited = 0;
> @@ -54,7 +54,7 @@ static GLfloat inited = 0;
> #if 1
> #define NEG_EXP( result, narg ) \
> do { \
> - GLfloat f = (GLfloat) (narg * (1.0/FOG_INCR)); \
> + GLfloat f = (GLfloat) (narg * (1.0F / FOG_INCR)); \
> GLint k = (GLint) f; \
> if (k > FOG_EXP_TABLE_SIZE-2) \
> result = (GLfloat) EXP_FOG_MAX; \
> diff --git a/src/mesa/tnl/t_vb_light.c b/src/mesa/tnl/t_vb_light.c
> index dbd57fa..df9073e 100644
> --- a/src/mesa/tnl/t_vb_light.c
> +++ b/src/mesa/tnl/t_vb_light.c
> @@ -137,23 +137,23 @@ validate_shine_table( struct gl_context *ctx, GLuint side, GLfloat shininess )
> break;
>
> m = s->tab;
> - m[0] = 0.0;
> - if (shininess == 0.0) {
> + m[0] = 0.0F;
> + if (shininess == 0.0F) {
> for (j = 1 ; j <= SHINE_TABLE_SIZE ; j++)
> - m[j] = 1.0;
> + m[j] = 1.0F;
> }
> else {
> for (j = 1 ; j < SHINE_TABLE_SIZE ; j++) {
> GLdouble t, x = j / (GLfloat) (SHINE_TABLE_SIZE - 1);
I think you want to declare x (and probably t as well) with type GLfloat
here.
> - if (x < 0.005) /* underflow check */
> - x = 0.005;
> + if (x < 0.005F) /* underflow check */
> + x = 0.005F;
> t = pow(x, shininess);
Since the code below casts t to float anyway, is there a reason why you
did not use powf and declared t as float? Also, there is no point in
making the change below if you don't do that, right?
> - if (t > 1e-20)
> + if (t > 1e-20F)
> m[j] = (GLfloat) t;
> else
> - m[j] = 0.0;
> + m[j] = 0.0F;
> }
> - m[SHINE_TABLE_SIZE] = 1.0;
> + m[SHINE_TABLE_SIZE] = 1.0F;
> }
>
> s->shininess = shininess;
> diff --git a/src/mesa/tnl/t_vb_lighttmp.h b/src/mesa/tnl/t_vb_lighttmp.h
> index f8786ac..3aebcd4 100644
> --- a/src/mesa/tnl/t_vb_lighttmp.h
> +++ b/src/mesa/tnl/t_vb_lighttmp.h
> @@ -112,7 +112,7 @@ static void TAG(light_rgba_spec)( struct gl_context *ctx,
> GLint side;
> GLfloat contrib[3];
> GLfloat attenuation;
> - GLfloat VP[3]; /* unit vector from vertex to light */
> + GLfloat VP[3]; /* unit vector from vertex to light */
> GLfloat n_dot_VP; /* n dot VP */
> GLfloat *h;
>
> @@ -129,7 +129,7 @@ static void TAG(light_rgba_spec)( struct gl_context *ctx,
>
> d = (GLfloat) LEN_3FV( VP );
>
> - if (d > 1e-6) {
> + if (d > 1e-6F) {
> GLfloat invd = 1.0F / d;
> SELF_SCALE_SCALAR_3V(VP, invd);
> }
> @@ -152,7 +152,7 @@ static void TAG(light_rgba_spec)( struct gl_context *ctx,
> }
> }
>
> - if (attenuation < 1e-3)
> + if (attenuation < 1e-3F)
> continue; /* this light makes no contribution */
>
> /* Compute dot product or normal and vector from V to light pos */
> @@ -204,7 +204,7 @@ static void TAG(light_rgba_spec)( struct gl_context *ctx,
>
> if (n_dot_h > 0.0F) {
> GLfloat spec_coef = lookup_shininess(ctx, side, n_dot_h);
> - if (spec_coef > 1.0e-10) {
> + if (spec_coef > 1.0e-10F) {
> spec_coef *= attenuation;
> ACC_SCALE_SCALAR_3V( spec[side], spec_coef,
> light->_MatSpecular[side]);
> @@ -283,12 +283,11 @@ static void TAG(light_rgba)( struct gl_context *ctx,
>
> /* Add contribution from each enabled light source */
> foreach (light, &ctx->Light.EnabledList) {
> -
> GLfloat n_dot_h;
> GLfloat correction;
> GLint side;
> GLfloat contrib[3];
> - GLfloat attenuation = 1.0;
> + GLfloat attenuation;
> GLfloat VP[3]; /* unit vector from vertex to light */
> GLfloat n_dot_VP; /* n dot VP */
> GLfloat *h;
> @@ -302,12 +301,11 @@ static void TAG(light_rgba)( struct gl_context *ctx,
> else {
> GLfloat d; /* distance from vertex to light */
>
> -
> SUB_3V(VP, light->_Position, vertex);
>
> d = (GLfloat) LEN_3FV( VP );
>
> - if ( d > 1e-6) {
> + if (d > 1e-6F) {
> GLfloat invd = 1.0F / d;
> SELF_SCALE_SCALAR_3V(VP, invd);
> }
> @@ -330,7 +328,7 @@ static void TAG(light_rgba)( struct gl_context *ctx,
> }
> }
>
> - if (attenuation < 1e-3)
> + if (attenuation < 1e-3F)
> continue; /* this light makes no contribution */
>
> /* Compute dot product or normal and vector from V to light pos */
> diff --git a/src/mesa/tnl/t_vb_normals.c b/src/mesa/tnl/t_vb_normals.c
> index 9aee1a2..6fc89c2 100644
> --- a/src/mesa/tnl/t_vb_normals.c
> +++ b/src/mesa/tnl/t_vb_normals.c
> @@ -114,7 +114,7 @@ validate_normal_stage(struct gl_context *ctx, struct tnl_pipeline_stage *stage)
> store->NormalTransform = _mesa_normal_tab[transform | NORM_NORMALIZE];
> }
> else if (ctx->Transform.RescaleNormals &&
> - ctx->_ModelViewInvScale != 1.0) {
> + ctx->_ModelViewInvScale != 1.0F) {
> store->NormalTransform = _mesa_normal_tab[transform | NORM_RESCALE];
> }
> else {
> @@ -131,7 +131,7 @@ validate_normal_stage(struct gl_context *ctx, struct tnl_pipeline_stage *stage)
> store->NormalTransform = _mesa_normal_tab[NORM_NORMALIZE];
> }
> else if (!ctx->Transform.RescaleNormals &&
> - ctx->_ModelViewInvScale != 1.0) {
> + ctx->_ModelViewInvScale != 1.0F) {
> store->NormalTransform = _mesa_normal_tab[NORM_RESCALE];
> }
> else {
> diff --git a/src/mesa/tnl/t_vertex_generic.c b/src/mesa/tnl/t_vertex_generic.c
> index 2a25a96..6c40c86 100644
> --- a/src/mesa/tnl/t_vertex_generic.c
> +++ b/src/mesa/tnl/t_vertex_generic.c
> @@ -1026,7 +1026,7 @@ void _tnl_generic_interp( struct gl_context *ctx,
>
> if (tnl->NeedNdcCoords) {
> const GLfloat *dstclip = VB->ClipPtr->data[edst];
> - if (dstclip[3] != 0.0) {
> + if (dstclip[3] != 0.0f) {
> const GLfloat w = 1.0f / dstclip[3];
> GLfloat pos[4];
>
More information about the mesa-dev
mailing list