From 06c5875fd6b8fa387a103bd0c6fad4fa5ef847a5 Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Wed, 26 Feb 2020 23:05:51 +0100 Subject: [PATCH] Fix promotion of floats to doubles Use the f variants of the math functions if the input parameter is a float, saves converting from float to double and running the double variant of the math function for gaining no precision at all Reviewed-by: Matt Turner Part-of: --- src/amd/vulkan/radv_cmd_buffer.c | 4 ++-- src/amd/vulkan/radv_pipeline.c | 2 +- src/amd/vulkan/si_cmd_buffer.c | 8 +++---- src/gallium/drivers/llvmpipe/lp_setup_line.c | 16 ++++++------- src/gallium/drivers/r600/sb/sb_expr.cpp | 24 +++++++++---------- src/gallium/drivers/softpipe/sp_tex_sample.c | 2 +- src/gallium/state_trackers/xa/xa_renderer.c | 2 +- src/intel/common/gen_l3_config.c | 2 +- src/mesa/drivers/dri/nouveau/nv10_state_tnl.c | 2 +- src/mesa/program/program.c | 2 +- src/mesa/state_tracker/st_cb_bitmap.c | 2 +- src/mesa/swrast/s_texfilter.c | 2 +- 12 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index abc1cfbbd04..6e5809ac492 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -700,8 +700,8 @@ radv_convert_user_sample_locs(struct radv_sample_locations_state *state, float shifted_pos_x = user_locs[i].x - 0.5; float shifted_pos_y = user_locs[i].y - 0.5; - int32_t scaled_pos_x = floor(shifted_pos_x * 16); - int32_t scaled_pos_y = floor(shifted_pos_y * 16); + int32_t scaled_pos_x = floorf(shifted_pos_x * 16); + int32_t scaled_pos_y = floorf(shifted_pos_y * 16); sample_locs[i].x = CLAMP(scaled_pos_x, -8, 7); sample_locs[i].y = CLAMP(scaled_pos_y, -8, 7); diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index b10ee86ac7c..f470432d20b 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -988,7 +988,7 @@ static uint8_t radv_pipeline_get_ps_iter_samples(const VkGraphicsPipelineCreateI } if (vkms->sampleShadingEnable) { - ps_iter_samples = ceil(vkms->minSampleShading * num_samples); + ps_iter_samples = ceilf(vkms->minSampleShading * num_samples); ps_iter_samples = util_next_power_of_two(ps_iter_samples); } return ps_iter_samples; diff --git a/src/amd/vulkan/si_cmd_buffer.c b/src/amd/vulkan/si_cmd_buffer.c index c0fd636de60..43d288145d7 100644 --- a/src/amd/vulkan/si_cmd_buffer.c +++ b/src/amd/vulkan/si_cmd_buffer.c @@ -595,10 +595,10 @@ static VkRect2D si_scissor_from_viewport(const VkViewport *viewport) get_viewport_xform(viewport, scale, translate); - rect.offset.x = translate[0] - fabs(scale[0]); - rect.offset.y = translate[1] - fabs(scale[1]); - rect.extent.width = ceilf(translate[0] + fabs(scale[0])) - rect.offset.x; - rect.extent.height = ceilf(translate[1] + fabs(scale[1])) - rect.offset.y; + rect.offset.x = translate[0] - fabsf(scale[0]); + rect.offset.y = translate[1] - fabsf(scale[1]); + rect.extent.width = ceilf(translate[0] + fabsf(scale[0])) - rect.offset.x; + rect.extent.height = ceilf(translate[1] + fabsf(scale[1])) - rect.offset.y; return rect; } diff --git a/src/gallium/drivers/llvmpipe/lp_setup_line.c b/src/gallium/drivers/llvmpipe/lp_setup_line.c index 3a7212326e3..1357d026dfe 100644 --- a/src/gallium/drivers/llvmpipe/lp_setup_line.c +++ b/src/gallium/drivers/llvmpipe/lp_setup_line.c @@ -361,10 +361,10 @@ try_setup_line( struct lp_setup_context *setup, if (fabsf(dx) >= fabsf(dy)) { float dydx = dy / dx; - x1diff = v1[0][0] - (float) floor(v1[0][0]) - 0.5; - y1diff = v1[0][1] - (float) floor(v1[0][1]) - 0.5; - x2diff = v2[0][0] - (float) floor(v2[0][0]) - 0.5; - y2diff = v2[0][1] - (float) floor(v2[0][1]) - 0.5; + x1diff = v1[0][0] - floorf(v1[0][0]) - 0.5f; + y1diff = v1[0][1] - floorf(v1[0][1]) - 0.5f; + x2diff = v2[0][0] - floorf(v2[0][0]) - 0.5f; + y2diff = v2[0][1] - floorf(v2[0][1]) - 0.5f; if (y2diff==-0.5 && dy<0){ y2diff = 0.5; @@ -459,10 +459,10 @@ try_setup_line( struct lp_setup_context *setup, const float dxdy = dx / dy; /* Y-MAJOR LINE */ - x1diff = v1[0][0] - (float) floor(v1[0][0]) - 0.5; - y1diff = v1[0][1] - (float) floor(v1[0][1]) - 0.5; - x2diff = v2[0][0] - (float) floor(v2[0][0]) - 0.5; - y2diff = v2[0][1] - (float) floor(v2[0][1]) - 0.5; + x1diff = v1[0][0] - floorf(v1[0][0]) - 0.5f; + y1diff = v1[0][1] - floorf(v1[0][1]) - 0.5f; + x2diff = v2[0][0] - floorf(v2[0][0]) - 0.5f; + y2diff = v2[0][1] - floorf(v2[0][1]) - 0.5f; if (x2diff==-0.5 && dx<0) { x2diff = 0.5; diff --git a/src/gallium/drivers/r600/sb/sb_expr.cpp b/src/gallium/drivers/r600/sb/sb_expr.cpp index 05674ff24b8..73287f126b0 100644 --- a/src/gallium/drivers/r600/sb/sb_expr.cpp +++ b/src/gallium/drivers/r600/sb/sb_expr.cpp @@ -326,7 +326,7 @@ void expr_handler::apply_alu_src_mod(const bc_alu &bc, unsigned src, const bc_alu_src &s = bc.src[src]; if (s.abs) - v = fabs(v.f); + v = fabsf(v.f); if (s.neg) v = -v.f; } @@ -424,21 +424,21 @@ bool expr_handler::fold_alu_op1(alu_node& n) { apply_alu_src_mod(n.bc, 0, cv); switch (n.bc.op) { - case ALU_OP1_CEIL: dv = ceil(cv.f); break; + case ALU_OP1_CEIL: dv = ceilf(cv.f); break; case ALU_OP1_COS: dv = cos(cv.f * 2.0f * M_PI); break; - case ALU_OP1_EXP_IEEE: dv = exp2(cv.f); break; - case ALU_OP1_FLOOR: dv = floor(cv.f); break; + case ALU_OP1_EXP_IEEE: dv = exp2f(cv.f); break; + case ALU_OP1_FLOOR: dv = floorf(cv.f); break; case ALU_OP1_FLT_TO_INT: dv = (int)cv.f; break; // FIXME: round modes ???? - case ALU_OP1_FLT_TO_INT_FLOOR: dv = (int32_t)floor(cv.f); break; - case ALU_OP1_FLT_TO_INT_RPI: dv = (int32_t)floor(cv.f + 0.5f); break; - case ALU_OP1_FLT_TO_INT_TRUNC: dv = (int32_t)trunc(cv.f); break; + case ALU_OP1_FLT_TO_INT_FLOOR: dv = (int32_t)floorf(cv.f); break; + case ALU_OP1_FLT_TO_INT_RPI: dv = (int32_t)floorf(cv.f + 0.5f); break; + case ALU_OP1_FLT_TO_INT_TRUNC: dv = (int32_t)truncf(cv.f); break; case ALU_OP1_FLT_TO_UINT: dv = (uint32_t)cv.f; break; - case ALU_OP1_FRACT: dv = cv.f - floor(cv.f); break; + case ALU_OP1_FRACT: dv = cv.f - floorf(cv.f); break; case ALU_OP1_INT_TO_FLT: dv = (float)cv.i; break; case ALU_OP1_LOG_CLAMPED: case ALU_OP1_LOG_IEEE: if (cv.f != 0.0f) - dv = log2(cv.f); + dv = log2f(cv.f); else // don't fold to NAN, let the GPU handle it for now // (prevents degenerate LIT tests from failing) @@ -454,7 +454,7 @@ bool expr_handler::fold_alu_op1(alu_node& n) { case ALU_OP1_PRED_SET_RESTORE: dv = cv; break; case ALU_OP1_RECIPSQRT_CLAMPED: case ALU_OP1_RECIPSQRT_FF: - case ALU_OP1_RECIPSQRT_IEEE: dv = 1.0f / sqrt(cv.f); break; + case ALU_OP1_RECIPSQRT_IEEE: dv = 1.0f / sqrtf(cv.f); break; case ALU_OP1_RECIP_CLAMPED: case ALU_OP1_RECIP_FF: case ALU_OP1_RECIP_IEEE: dv = 1.0f / cv.f; break; @@ -462,8 +462,8 @@ bool expr_handler::fold_alu_op1(alu_node& n) { case ALU_OP1_RECIP_UINT: dv.u = (1ull << 32) / cv.u; break; // case ALU_OP1_RNDNE: dv = floor(cv.f + 0.5f); break; case ALU_OP1_SIN: dv = sin(cv.f * 2.0f * M_PI); break; - case ALU_OP1_SQRT_IEEE: dv = sqrt(cv.f); break; - case ALU_OP1_TRUNC: dv = trunc(cv.f); break; + case ALU_OP1_SQRT_IEEE: dv = sqrtf(cv.f); break; + case ALU_OP1_TRUNC: dv = truncf(cv.f); break; default: return false; diff --git a/src/gallium/drivers/softpipe/sp_tex_sample.c b/src/gallium/drivers/softpipe/sp_tex_sample.c index d3f67c6426c..5a0ec40d9c8 100644 --- a/src/gallium/drivers/softpipe/sp_tex_sample.c +++ b/src/gallium/drivers/softpipe/sp_tex_sample.c @@ -2320,7 +2320,7 @@ create_filter_table(void) for (i = 0; i < WEIGHT_LUT_SIZE; ++i) { const float alpha = 2; const float r2 = (float) i / (float) (WEIGHT_LUT_SIZE - 1); - const float weight = (float) exp(-alpha * r2); + const float weight = (float) expf(-alpha * r2); lut[i] = weight; } weightLut = lut; diff --git a/src/gallium/state_trackers/xa/xa_renderer.c b/src/gallium/state_trackers/xa/xa_renderer.c index c1aeacd22ce..89548ad7019 100644 --- a/src/gallium/state_trackers/xa/xa_renderer.c +++ b/src/gallium/state_trackers/xa/xa_renderer.c @@ -34,7 +34,7 @@ #include "util/u_sampler.h" #include "util/u_draw_quad.h" -#define floatsEqual(x, y) (fabs(x - y) <= 0.00001f * MIN2(fabs(x), fabs(y))) +#define floatsEqual(x, y) (fabsf(x - y) <= 0.00001f * MIN2(fabsf(x), fabsf(y))) #define floatIsZero(x) (floatsEqual((x) + 1, 1)) #define NUM_COMPONENTS 4 diff --git a/src/intel/common/gen_l3_config.c b/src/intel/common/gen_l3_config.c index 46926f8bdf4..d54368556d3 100644 --- a/src/intel/common/gen_l3_config.c +++ b/src/intel/common/gen_l3_config.c @@ -245,7 +245,7 @@ gen_diff_l3_weights(struct gen_l3_weights w0, struct gen_l3_weights w1) float dw = 0; for (unsigned i = 0; i < GEN_NUM_L3P; i++) - dw += fabs(w0.w[i] - w1.w[i]); + dw += fabsf(w0.w[i] - w1.w[i]); return dw; } diff --git a/src/mesa/drivers/dri/nouveau/nv10_state_tnl.c b/src/mesa/drivers/dri/nouveau/nv10_state_tnl.c index 9f80e413577..247cad4a38b 100644 --- a/src/mesa/drivers/dri/nouveau/nv10_state_tnl.c +++ b/src/mesa/drivers/dri/nouveau/nv10_state_tnl.c @@ -244,7 +244,7 @@ nv10_get_spot_coeff(struct gl_light *l, float k[7]) float a0, b0, a1, a2, b2, a3; if (e > 0) - a0 = -1 - 5.36e-3 / sqrt(e); + a0 = -1 - 5.36e-3 / sqrtf(e); else a0 = -1; b0 = 1 / (1 + 0.273 * e); diff --git a/src/mesa/program/program.c b/src/mesa/program/program.c index 6ab1bf50177..754e3d480b8 100644 --- a/src/mesa/program/program.c +++ b/src/mesa/program/program.c @@ -539,7 +539,7 @@ _mesa_get_min_invocations_per_fragment(struct gl_context *ctx, SYSTEM_BIT_SAMPLE_POS))) return MAX2(_mesa_geometric_samples(ctx->DrawBuffer), 1); else if (ctx->Multisample.SampleShading) - return MAX2(ceil(ctx->Multisample.MinSampleShadingValue * + return MAX2(ceilf(ctx->Multisample.MinSampleShadingValue * _mesa_geometric_samples(ctx->DrawBuffer)), 1); else return 1; diff --git a/src/mesa/state_tracker/st_cb_bitmap.c b/src/mesa/state_tracker/st_cb_bitmap.c index 44ad5334175..475ab2fc8cd 100644 --- a/src/mesa/state_tracker/st_cb_bitmap.c +++ b/src/mesa/state_tracker/st_cb_bitmap.c @@ -479,7 +479,7 @@ accum_bitmap(struct gl_context *ctx, if (px < 0 || px + width > BITMAP_CACHE_WIDTH || py < 0 || py + height > BITMAP_CACHE_HEIGHT || !TEST_EQ_4V(ctx->Current.RasterColor, cache->color) || - ((fabs(z - cache->zpos) > Z_EPSILON))) { + ((fabsf(z - cache->zpos) > Z_EPSILON))) { /* This bitmap would extend beyond cache bounds, or the bitmap * color is changing * so flush and continue. diff --git a/src/mesa/swrast/s_texfilter.c b/src/mesa/swrast/s_texfilter.c index f73037791de..cb91b81260e 100644 --- a/src/mesa/swrast/s_texfilter.c +++ b/src/mesa/swrast/s_texfilter.c @@ -1628,7 +1628,7 @@ create_filter_table(void) for (i = 0; i < WEIGHT_LUT_SIZE; ++i) { GLfloat alpha = 2; GLfloat r2 = (GLfloat) i / (GLfloat) (WEIGHT_LUT_SIZE - 1); - GLfloat weight = (GLfloat) exp(-alpha * r2); + GLfloat weight = expf(-alpha * r2); weightLut[i] = weight; } } -- 2.30.2