summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mesa/main/drawpix.c5
-rw-r--r--src/mesa/program/prog_execute.c2
-rw-r--r--src/mesa/state_tracker/st_cb_bitmap.c4
-rw-r--r--src/mesa/swrast/s_blit.c14
-rw-r--r--src/mesa/swrast/s_texfilter.c64
-rw-r--r--src/mesa/swrast/s_triangle.c4
-rw-r--r--src/util/imports.h31
7 files changed, 47 insertions, 77 deletions
diff --git a/src/mesa/main/drawpix.c b/src/mesa/main/drawpix.c
index efec78cda05..45896c15552 100644
--- a/src/mesa/main/drawpix.c
+++ b/src/mesa/main/drawpix.c
@@ -36,6 +36,7 @@
#include "state.h"
#include "glformats.h"
#include "fbobject.h"
+#include "util/u_math.h"
/*
@@ -323,8 +324,8 @@ _mesa_Bitmap( GLsizei width, GLsizei height,
/* Truncate, to satisfy conformance tests (matches SGI's OpenGL). */
if (width > 0 && height > 0) {
const GLfloat epsilon = 0.0001F;
- GLint x = IFLOOR(ctx->Current.RasterPos[0] + epsilon - xorig);
- GLint y = IFLOOR(ctx->Current.RasterPos[1] + epsilon - yorig);
+ GLint x = util_ifloor(ctx->Current.RasterPos[0] + epsilon - xorig);
+ GLint y = util_ifloor(ctx->Current.RasterPos[1] + epsilon - yorig);
if (ctx->Unpack.BufferObj) {
/* unpack from PBO */
diff --git a/src/mesa/program/prog_execute.c b/src/mesa/program/prog_execute.c
index c50465dfc49..6ada78565cc 100644
--- a/src/mesa/program/prog_execute.c
+++ b/src/mesa/program/prog_execute.c
@@ -434,7 +434,7 @@ _mesa_execute_program(struct gl_context * ctx,
{
GLfloat t[4];
fetch_vector4(&inst->SrcReg[0], machine, t);
- machine->AddressReg[0][0] = IFLOOR(t[0]);
+ machine->AddressReg[0][0] = util_ifloor(t[0]);
if (DEBUG_PROG) {
printf("ARL %d\n", machine->AddressReg[0][0]);
}
diff --git a/src/mesa/state_tracker/st_cb_bitmap.c b/src/mesa/state_tracker/st_cb_bitmap.c
index 475ab2fc8cd..06cbb980013 100644
--- a/src/mesa/state_tracker/st_cb_bitmap.c
+++ b/src/mesa/state_tracker/st_cb_bitmap.c
@@ -698,8 +698,8 @@ st_DrawAtlasBitmaps(struct gl_context *ctx,
const float xorig = g->xorig, yorig = g->yorig;
const float s0 = g->x, t0 = g->y;
const float s1 = s0 + g->w, t1 = t0 + g->h;
- const float x0 = IFLOOR(ctx->Current.RasterPos[0] - xorig + epsilon);
- const float y0 = IFLOOR(ctx->Current.RasterPos[1] - yorig + epsilon);
+ const float x0 = util_ifloor(ctx->Current.RasterPos[0] - xorig + epsilon);
+ const float y0 = util_ifloor(ctx->Current.RasterPos[1] - yorig + epsilon);
const float x1 = x0 + g->w, y1 = y0 + g->h;
const float clip_x0 = x0 * clip_x_scale - 1.0f;
const float clip_y0 = y0 * clip_y_scale - 1.0f;
diff --git a/src/mesa/swrast/s_blit.c b/src/mesa/swrast/s_blit.c
index 557f107b536..362d4daad17 100644
--- a/src/mesa/swrast/s_blit.c
+++ b/src/mesa/swrast/s_blit.c
@@ -409,7 +409,7 @@ resample_linear_row_ub(GLint srcWidth, GLint dstWidth,
for (dstCol = 0; dstCol < dstWidth; dstCol++) {
const GLfloat srcCol = (dstCol + 0.5F) / dstWidth * srcWidth - 0.5F;
- GLint srcCol0 = MAX2(0, IFLOOR(srcCol));
+ GLint srcCol0 = MAX2(0, util_ifloor(srcCol));
GLint srcCol1 = srcCol0 + 1;
GLfloat colWeight = srcCol - srcCol0; /* fractional part of srcCol */
GLfloat red, green, blue, alpha;
@@ -441,10 +441,10 @@ resample_linear_row_ub(GLint srcWidth, GLint dstWidth,
srcColor0[srcCol0][ACOMP], srcColor0[srcCol1][ACOMP],
srcColor1[srcCol0][ACOMP], srcColor1[srcCol1][ACOMP]);
- dstColor[dstCol][RCOMP] = IFLOOR(red);
- dstColor[dstCol][GCOMP] = IFLOOR(green);
- dstColor[dstCol][BCOMP] = IFLOOR(blue);
- dstColor[dstCol][ACOMP] = IFLOOR(alpha);
+ dstColor[dstCol][RCOMP] = util_ifloor(red);
+ dstColor[dstCol][GCOMP] = util_ifloor(green);
+ dstColor[dstCol][BCOMP] = util_ifloor(blue);
+ dstColor[dstCol][ACOMP] = util_ifloor(alpha);
}
}
@@ -464,7 +464,7 @@ resample_linear_row_float(GLint srcWidth, GLint dstWidth,
for (dstCol = 0; dstCol < dstWidth; dstCol++) {
const GLfloat srcCol = (dstCol + 0.5F) / dstWidth * srcWidth - 0.5F;
- GLint srcCol0 = MAX2(0, IFLOOR(srcCol));
+ GLint srcCol0 = MAX2(0, util_ifloor(srcCol));
GLint srcCol1 = srcCol0 + 1;
GLfloat colWeight = srcCol - srcCol0; /* fractional part of srcCol */
GLfloat red, green, blue, alpha;
@@ -630,7 +630,7 @@ blit_linear(struct gl_context *ctx,
for (dstRow = 0; dstRow < dstHeight; dstRow++) {
const GLint dstY = dstYpos + dstRow;
GLfloat srcRow = (dstRow + 0.5F) / dstHeight * srcHeight - 0.5F;
- GLint srcRow0 = MAX2(0, IFLOOR(srcRow));
+ GLint srcRow0 = MAX2(0, util_ifloor(srcRow));
GLint srcRow1 = srcRow0 + 1;
GLfloat rowWeight = srcRow - srcRow0; /* fractional part of srcRow */
diff --git a/src/mesa/swrast/s_texfilter.c b/src/mesa/swrast/s_texfilter.c
index 13d517b6261..5da7f888140 100644
--- a/src/mesa/swrast/s_texfilter.c
+++ b/src/mesa/swrast/s_texfilter.c
@@ -43,7 +43,7 @@
* Also note, FRAC(x) doesn't truly return the fractional part of x for x < 0.
* Instead, if x < 0 then FRAC(x) = 1 - true_frac(x).
*/
-#define FRAC(f) ((f) - IFLOOR(f))
+#define FRAC(f) ((f) - util_ifloor(f))
@@ -169,11 +169,11 @@ linear_texel_locations(GLenum wrapMode,
case GL_REPEAT:
u = s * size - 0.5F;
if (swImg->_IsPowerOfTwo) {
- *i0 = IFLOOR(u) & (size - 1);
+ *i0 = util_ifloor(u) & (size - 1);
*i1 = (*i0 + 1) & (size - 1);
}
else {
- *i0 = REMAINDER(IFLOOR(u), size);
+ *i0 = REMAINDER(util_ifloor(u), size);
*i1 = REMAINDER(*i0 + 1, size);
}
break;
@@ -185,7 +185,7 @@ linear_texel_locations(GLenum wrapMode,
else
u = s * size;
u -= 0.5F;
- *i0 = IFLOOR(u);
+ *i0 = util_ifloor(u);
*i1 = *i0 + 1;
if (*i0 < 0)
*i0 = 0;
@@ -203,19 +203,19 @@ linear_texel_locations(GLenum wrapMode,
else
u = s * size;
u -= 0.5F;
- *i0 = IFLOOR(u);
+ *i0 = util_ifloor(u);
*i1 = *i0 + 1;
}
break;
case GL_MIRRORED_REPEAT:
{
- const GLint flr = IFLOOR(s);
+ const GLint flr = util_ifloor(s);
if (flr & 1)
u = 1.0F - (s - (GLfloat) flr);
else
u = s - (GLfloat) flr;
u = (u * size) - 0.5F;
- *i0 = IFLOOR(u);
+ *i0 = util_ifloor(u);
*i1 = *i0 + 1;
if (*i0 < 0)
*i0 = 0;
@@ -230,7 +230,7 @@ linear_texel_locations(GLenum wrapMode,
else
u *= size;
u -= 0.5F;
- *i0 = IFLOOR(u);
+ *i0 = util_ifloor(u);
*i1 = *i0 + 1;
break;
case GL_MIRROR_CLAMP_TO_EDGE_EXT:
@@ -240,7 +240,7 @@ linear_texel_locations(GLenum wrapMode,
else
u *= size;
u -= 0.5F;
- *i0 = IFLOOR(u);
+ *i0 = util_ifloor(u);
*i1 = *i0 + 1;
if (*i0 < 0)
*i0 = 0;
@@ -259,7 +259,7 @@ linear_texel_locations(GLenum wrapMode,
else
u *= size;
u -= 0.5F;
- *i0 = IFLOOR(u);
+ *i0 = util_ifloor(u);
*i1 = *i0 + 1;
}
break;
@@ -271,7 +271,7 @@ linear_texel_locations(GLenum wrapMode,
else
u = s * size;
u -= 0.5F;
- *i0 = IFLOOR(u);
+ *i0 = util_ifloor(u);
*i1 = *i0 + 1;
break;
default:
@@ -299,7 +299,7 @@ nearest_texel_location(GLenum wrapMode,
case GL_REPEAT:
/* s limited to [0,1) */
/* i limited to [0,size-1] */
- i = IFLOOR(s * size);
+ i = util_ifloor(s * size);
if (swImg->_IsPowerOfTwo)
i &= (size - 1);
else
@@ -316,7 +316,7 @@ nearest_texel_location(GLenum wrapMode,
else if (s > max)
i = size - 1;
else
- i = IFLOOR(s * size);
+ i = util_ifloor(s * size);
}
return i;
case GL_CLAMP_TO_BORDER:
@@ -330,14 +330,14 @@ nearest_texel_location(GLenum wrapMode,
else if (s >= max)
i = size;
else
- i = IFLOOR(s * size);
+ i = util_ifloor(s * size);
}
return i;
case GL_MIRRORED_REPEAT:
{
const GLfloat min = 1.0F / (2.0F * size);
const GLfloat max = 1.0F - min;
- const GLint flr = IFLOOR(s);
+ const GLint flr = util_ifloor(s);
GLfloat u;
if (flr & 1)
u = 1.0F - (s - (GLfloat) flr);
@@ -348,7 +348,7 @@ nearest_texel_location(GLenum wrapMode,
else if (u > max)
i = size - 1;
else
- i = IFLOOR(u * size);
+ i = util_ifloor(u * size);
}
return i;
case GL_MIRROR_CLAMP_EXT:
@@ -361,7 +361,7 @@ nearest_texel_location(GLenum wrapMode,
else if (u >= 1.0F)
i = size - 1;
else
- i = IFLOOR(u * size);
+ i = util_ifloor(u * size);
}
return i;
case GL_MIRROR_CLAMP_TO_EDGE_EXT:
@@ -376,7 +376,7 @@ nearest_texel_location(GLenum wrapMode,
else if (u > max)
i = size - 1;
else
- i = IFLOOR(u * size);
+ i = util_ifloor(u * size);
}
return i;
case GL_MIRROR_CLAMP_TO_BORDER_EXT:
@@ -391,7 +391,7 @@ nearest_texel_location(GLenum wrapMode,
else if (u > max)
i = size;
else
- i = IFLOOR(u * size);
+ i = util_ifloor(u * size);
}
return i;
case GL_CLAMP:
@@ -402,7 +402,7 @@ nearest_texel_location(GLenum wrapMode,
else if (s >= 1.0F)
i = size - 1;
else
- i = IFLOOR(s * size);
+ i = util_ifloor(s * size);
return i;
default:
_mesa_problem(NULL, "Bad wrap mode");
@@ -417,7 +417,7 @@ linear_repeat_texel_location(GLuint size, GLfloat s,
GLint *i0, GLint *i1, GLfloat *weight)
{
GLfloat u = s * size - 0.5F;
- *i0 = IFLOOR(u) & (size - 1);
+ *i0 = util_ifloor(u) & (size - 1);
*i1 = (*i0 + 1) & (size - 1);
*weight = FRAC(u);
}
@@ -431,11 +431,11 @@ clamp_rect_coord_nearest(GLenum wrapMode, GLfloat coord, GLint max)
{
switch (wrapMode) {
case GL_CLAMP:
- return IFLOOR( CLAMP(coord, 0.0F, max - 1) );
+ return util_ifloor( CLAMP(coord, 0.0F, max - 1) );
case GL_CLAMP_TO_EDGE:
- return IFLOOR( CLAMP(coord, 0.5F, max - 0.5F) );
+ return util_ifloor( CLAMP(coord, 0.5F, max - 0.5F) );
case GL_CLAMP_TO_BORDER:
- return IFLOOR( CLAMP(coord, -0.5F, max + 0.5F) );
+ return util_ifloor( CLAMP(coord, -0.5F, max + 0.5F) );
default:
_mesa_problem(NULL, "bad wrapMode in clamp_rect_coord_nearest");
return 0;
@@ -456,13 +456,13 @@ clamp_rect_coord_linear(GLenum wrapMode, GLfloat coord, GLint max,
case GL_CLAMP:
/* Not exactly what the spec says, but it matches NVIDIA output */
fcol = CLAMP(coord - 0.5F, 0.0F, max - 1);
- i0 = IFLOOR(fcol);
+ i0 = util_ifloor(fcol);
i1 = i0 + 1;
break;
case GL_CLAMP_TO_EDGE:
fcol = CLAMP(coord, 0.5F, max - 0.5F);
fcol -= 0.5F;
- i0 = IFLOOR(fcol);
+ i0 = util_ifloor(fcol);
i1 = i0 + 1;
if (i1 > max - 1)
i1 = max - 1;
@@ -470,7 +470,7 @@ clamp_rect_coord_linear(GLenum wrapMode, GLfloat coord, GLint max,
case GL_CLAMP_TO_BORDER:
fcol = CLAMP(coord, -0.5F, max + 0.5F);
fcol -= 0.5F;
- i0 = IFLOOR(fcol);
+ i0 = util_ifloor(fcol);
i1 = i0 + 1;
break;
default:
@@ -491,7 +491,7 @@ clamp_rect_coord_linear(GLenum wrapMode, GLfloat coord, GLint max,
static GLint
tex_array_slice(GLfloat coord, GLsizei size)
{
- GLint slice = IFLOOR(coord + 0.5f);
+ GLint slice = util_ifloor(coord + 0.5f);
slice = CLAMP(slice, 0, size - 1);
return slice;
}
@@ -1435,8 +1435,8 @@ opt_sample_rgb_2d(struct gl_context *ctx,
(void) swImg;
for (k=0; k<n; k++) {
- GLint i = IFLOOR(texcoords[k][0] * width) & colMask;
- GLint j = IFLOOR(texcoords[k][1] * height) & rowMask;
+ GLint i = util_ifloor(texcoords[k][0] * width) & colMask;
+ GLint j = util_ifloor(texcoords[k][1] * height) & rowMask;
GLint pos = (j << shift) | i;
GLubyte *texel = (GLubyte *) swImg->ImageSlices[0] + 3 * pos;
rgba[k][RCOMP] = UBYTE_TO_FLOAT(texel[2]);
@@ -1480,8 +1480,8 @@ opt_sample_rgba_2d(struct gl_context *ctx,
(void) swImg;
for (i = 0; i < n; i++) {
- const GLint col = IFLOOR(texcoords[i][0] * width) & colMask;
- const GLint row = IFLOOR(texcoords[i][1] * height) & rowMask;
+ const GLint col = util_ifloor(texcoords[i][0] * width) & colMask;
+ const GLint row = util_ifloor(texcoords[i][1] * height) & rowMask;
const GLint pos = (row << shift) | col;
const GLuint texel = *((GLuint *) swImg->ImageSlices[0] + pos);
rgba[i][RCOMP] = UBYTE_TO_FLOAT( (texel >> 24) );
diff --git a/src/mesa/swrast/s_triangle.c b/src/mesa/swrast/s_triangle.c
index 65b10a89dfa..467439c3fc0 100644
--- a/src/mesa/swrast/s_triangle.c
+++ b/src/mesa/swrast/s_triangle.c
@@ -621,8 +621,8 @@ fast_persp_span(struct gl_context *ctx, SWspan *span,
(1.0 / tex_coord[2]) : 1.0; \
GLfloat s_tmp = (GLfloat) (tex_coord[0] * invQ); \
GLfloat t_tmp = (GLfloat) (tex_coord[1] * invQ); \
- GLint s = IFLOOR(s_tmp) & info->smask; \
- GLint t = IFLOOR(t_tmp) & info->tmask; \
+ GLint s = util_ifloor(s_tmp) & info->smask; \
+ GLint t = util_ifloor(t_tmp) & info->tmask; \
GLint pos = (t << info->twidth_log2) + s; \
const GLchan *tex00 = info->texture + COMP * pos; \
DO_TEX; \
diff --git a/src/util/imports.h b/src/util/imports.h
index 385b37c81b5..d56bd77e03b 100644
--- a/src/util/imports.h
+++ b/src/util/imports.h
@@ -129,37 +129,6 @@ static inline int IROUND_POS(float f)
return (int) (f + 0.5F);
}
-/** Return (as an integer) floor of float */
-static inline int IFLOOR(float f)
-{
-#if defined(USE_X86_ASM) && defined(__GNUC__) && defined(__i386__)
- /*
- * IEEE floor for computers that round to nearest or even.
- * 'f' must be between -4194304 and 4194303.
- * This floor operation is done by "(iround(f + .5) + iround(f - .5)) >> 1",
- * but uses some IEEE specific tricks for better speed.
- * Contributed by Josh Vanderhoof
- */
- int ai, bi;
- double af, bf;
- af = (3 << 22) + 0.5 + (double)f;
- bf = (3 << 22) + 0.5 - (double)f;
- /* GCC generates an extra fstp/fld without this. */
- __asm__ ("fstps %0" : "=m" (ai) : "t" (af) : "st");
- __asm__ ("fstps %0" : "=m" (bi) : "t" (bf) : "st");
- return (ai - bi) >> 1;
-#else
- int ai, bi;
- double af, bf;
- fi_type u;
- af = (3 << 22) + 0.5 + (double)f;
- bf = (3 << 22) + 0.5 - (double)f;
- u.f = (float) af; ai = u.i;
- u.f = (float) bf; bi = u.i;
- return (ai - bi) >> 1;
-#endif
-}
-
/**********************************************************************
* Functions