X-Git-Url: https://git.libre-soc.org/?p=mesa.git;a=blobdiff_plain;f=src%2Fmesa%2Fswrast%2Fs_texfilter.c;h=7f1354785a4d9e783b0935ebe2f2ba8e8ca99c8d;hp=abc1727cf29d9aafff9b36cafaad9f575d6713c8;hb=8e3696137f2cb7b4f5a3824f26186ecbb06f9282;hpb=8ac9407a835ee892d96f326b0c56967046cbb982 diff --git a/src/mesa/swrast/s_texfilter.c b/src/mesa/swrast/s_texfilter.c index abc1727cf29..7f1354785a4 100644 --- a/src/mesa/swrast/s_texfilter.c +++ b/src/mesa/swrast/s_texfilter.c @@ -26,7 +26,7 @@ #include "c99_math.h" #include "main/glheader.h" #include "main/context.h" -#include "main/imports.h" + #include "main/macros.h" #include "main/samplerobj.h" #include "main/teximage.h" @@ -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; } @@ -1406,7 +1406,7 @@ sample_linear_2d(struct gl_context *ctx, * Optimized 2-D texture sampling: * S and T wrap mode == GL_REPEAT * GL_NEAREST min/mag filter - * No border, + * No border, * RowStride == Width, * Format = GL_RGB */ @@ -1435,8 +1435,8 @@ opt_sample_rgb_2d(struct gl_context *ctx, (void) swImg; for (k=0; kImageSlices[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) ); @@ -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; } } @@ -1666,7 +1666,7 @@ sample_2d_ewa(struct gl_context *ctx, GLfloat uy = dudy * scaling; GLfloat vy = dvdy * scaling; - /* compute ellipse coefficients to bound the region: + /* compute ellipse coefficients to bound the region: * A*x*x + B*x*y + C*y*y = F. */ GLfloat A = vx*vx+vy*vy+1; @@ -1847,7 +1847,7 @@ texture_unit_index(const struct gl_context *ctx, } if (u >= maxUnit) u = 0; /* not found, use 1st one; should never happen */ - + return u; } @@ -1871,7 +1871,7 @@ sample_lambda_2d_aniso(struct gl_context *ctx, const struct swrast_texture_image *swImg = swrast_texture_image_const(tImg); const GLfloat maxEccentricity = samp->MaxAnisotropy * samp->MaxAnisotropy; - + /* re-calculate the lambda values so that they are usable with anisotropic * filtering */ @@ -1880,7 +1880,7 @@ sample_lambda_2d_aniso(struct gl_context *ctx, /* based on interpolate_texcoords(struct gl_context *ctx, SWspan *span) * in swrast/s_span.c */ - + /* find the texture unit index by looking up the current texture object * from the context list of available texture objects. */ @@ -1902,10 +1902,10 @@ sample_lambda_2d_aniso(struct gl_context *ctx, const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[u]; const GLboolean adjustLOD = (texUnit->LodBias + samp->LodBias != 0.0F) - || (samp->MinLod != -1000.0 || samp->MaxLod != 1000.0); + || (samp->MinLod != -1000.0F || samp->MaxLod != 1000.0F); GLuint i; - + /* on first access create the lookup table containing the filter weights. */ if (!weightLut) { create_filter_table(); @@ -1916,13 +1916,13 @@ sample_lambda_2d_aniso(struct gl_context *ctx, for (i = 0; i < n; i++) { const GLfloat invQ = (q == 0.0F) ? 1.0F : (1.0F / q); - + GLfloat dudx = texW * ((s + dsdx) / (q + dqdx) - s * invQ); GLfloat dvdx = texH * ((t + dtdx) / (q + dqdx) - t * invQ); GLfloat dudy = texW * ((s + dsdy) / (q + dqdy) - s * invQ); GLfloat dvdy = texH * ((t + dtdy) / (q + dqdy) - t * invQ); - - /* note: instead of working with Px and Py, we will use the + + /* note: instead of working with Px and Py, we will use the * squared length instead, to avoid sqrt. */ GLfloat Px2 = dudx * dudx + dvdx * dvdx; @@ -1936,7 +1936,7 @@ sample_lambda_2d_aniso(struct gl_context *ctx, s += dsdx; t += dtdx; q += dqdx; - + if (Px2 < Py2) { Pmax2 = Py2; Pmin2 = Px2; @@ -1945,7 +1945,7 @@ sample_lambda_2d_aniso(struct gl_context *ctx, Pmax2 = Px2; Pmin2 = Py2; } - + /* if the eccentricity of the ellipse is too big, scale up the shorter * of the two vectors to limit the maximum amount of work per pixel */ @@ -1957,12 +1957,12 @@ sample_lambda_2d_aniso(struct gl_context *ctx, Pmin2 *= s; */ Pmin2 = Pmax2 / maxEccentricity; } - + /* note: we need to have Pmin=sqrt(Pmin2) here, but we can avoid * this since 0.5*log(x) = log(sqrt(x)) */ - lod = 0.5f * LOG2(Pmin2); - + lod = 0.5f * util_fast_log2(Pmin2); + if (adjustLOD) { /* from swrast/s_texcombine.c _swrast_texture_span */ if (texUnit->LodBias + samp->LodBias != 0.0F) { @@ -1973,14 +1973,14 @@ sample_lambda_2d_aniso(struct gl_context *ctx, ctx->Const.MaxTextureLodBias); lod += bias; - if (samp->MinLod != -1000.0 || - samp->MaxLod != 1000.0) { + if (samp->MinLod != -1000.0F || + samp->MaxLod != 1000.0F) { /* apply LOD clamping to lambda */ lod = CLAMP(lod, samp->MinLod, samp->MaxLod); } } } - + /* If the ellipse covers the whole image, we can * simply return the average of the whole image. */ @@ -2406,7 +2406,7 @@ choose_cube_face(const struct gl_texture_object *texObj, } } - { + { const float ima = 1.0F / ma; newCoord[0] = ( sc * ima + 1.0F ) * 0.5F; newCoord[1] = ( tc * ima + 1.0F ) * 0.5F; @@ -2917,7 +2917,7 @@ sample_2d_array_linear(struct gl_context *ctx, else { swImg->FetchTexel(swImg, i1, j1, array, t11); } - + /* trilinear interpolation of samples */ lerp_rgba_2d(rgba, a, b, t00, t10, t01, t11); } @@ -3099,7 +3099,7 @@ sample_lambda_2d_array(struct gl_context *ctx, case GL_LINEAR_MIPMAP_LINEAR: sample_2d_array_linear_mipmap_linear(ctx, samp, tObj, m, texcoords + minStart, - lambda + minStart, + lambda + minStart, rgba + minStart); break; default: @@ -3373,7 +3373,7 @@ sample_lambda_1d_array(struct gl_context *ctx, lambda + minStart, rgba + minStart); break; case GL_LINEAR_MIPMAP_NEAREST: - sample_1d_array_linear_mipmap_nearest(ctx, samp, tObj, m, + sample_1d_array_linear_mipmap_nearest(ctx, samp, tObj, m, texcoords + minStart, lambda + minStart, rgba + minStart); @@ -3383,9 +3383,9 @@ sample_lambda_1d_array(struct gl_context *ctx, lambda + minStart, rgba + minStart); break; case GL_LINEAR_MIPMAP_LINEAR: - sample_1d_array_linear_mipmap_linear(ctx, samp, tObj, m, + sample_1d_array_linear_mipmap_linear(ctx, samp, tObj, m, texcoords + minStart, - lambda + minStart, + lambda + minStart, rgba + minStart); break; default: @@ -3579,7 +3579,7 @@ sample_depth_texture( struct gl_context *ctx, nearest_texcoord(samp, tObj, level, texcoords[i], &col, &row, &slice); - if (col >= 0 && row >= 0 && col < width && row < height && + if (col >= 0 && row >= 0 && col < width && row < height && slice >= 0 && slice < depth) { swImg->FetchTexel(swImg, col, row, slice, &depthSample); } @@ -3713,7 +3713,7 @@ _swrast_choose_texture_sample_func( struct gl_context *ctx, const struct gl_sampler_object *sampler) { if (!t || !_mesa_is_texture_complete(t, sampler)) { - return &null_sample_func; + return null_sample_func; } else { const GLboolean needLambda = @@ -3722,32 +3722,32 @@ _swrast_choose_texture_sample_func( struct gl_context *ctx, switch (t->Target) { case GL_TEXTURE_1D: if (is_depth_texture(t)) { - return &sample_depth_texture; + return sample_depth_texture; } else if (needLambda) { - return &sample_lambda_1d; + return sample_lambda_1d; } else if (sampler->MinFilter == GL_LINEAR) { - return &sample_linear_1d; + return sample_linear_1d; } else { assert(sampler->MinFilter == GL_NEAREST); - return &sample_nearest_1d; + return sample_nearest_1d; } case GL_TEXTURE_2D: if (is_depth_texture(t)) { - return &sample_depth_texture; + return sample_depth_texture; } else if (needLambda) { /* Anisotropic filtering extension. Activated only if mipmaps are used */ - if (sampler->MaxAnisotropy > 1.0 && + if (sampler->MaxAnisotropy > 1.0F && sampler->MinFilter == GL_LINEAR_MIPMAP_LINEAR) { - return &sample_lambda_2d_aniso; + return sample_lambda_2d_aniso; } - return &sample_lambda_2d; + return sample_lambda_2d; } else if (sampler->MinFilter == GL_LINEAR) { - return &sample_linear_2d; + return sample_linear_2d; } else { /* check for a few optimized cases */ @@ -3772,72 +3772,72 @@ _swrast_choose_texture_sample_func( struct gl_context *ctx, } case GL_TEXTURE_3D: if (needLambda) { - return &sample_lambda_3d; + return sample_lambda_3d; } else if (sampler->MinFilter == GL_LINEAR) { - return &sample_linear_3d; + return sample_linear_3d; } else { assert(sampler->MinFilter == GL_NEAREST); - return &sample_nearest_3d; + return sample_nearest_3d; } case GL_TEXTURE_CUBE_MAP: if (needLambda) { - return &sample_lambda_cube; + return sample_lambda_cube; } else if (sampler->MinFilter == GL_LINEAR) { - return &sample_linear_cube; + return sample_linear_cube; } else { assert(sampler->MinFilter == GL_NEAREST); - return &sample_nearest_cube; + return sample_nearest_cube; } case GL_TEXTURE_RECTANGLE_NV: if (is_depth_texture(t)) { - return &sample_depth_texture; + return sample_depth_texture; } else if (needLambda) { - return &sample_lambda_rect; + return sample_lambda_rect; } else if (sampler->MinFilter == GL_LINEAR) { - return &sample_linear_rect; + return sample_linear_rect; } else { assert(sampler->MinFilter == GL_NEAREST); - return &sample_nearest_rect; + return sample_nearest_rect; } case GL_TEXTURE_1D_ARRAY_EXT: if (is_depth_texture(t)) { - return &sample_depth_texture; + return sample_depth_texture; } else if (needLambda) { - return &sample_lambda_1d_array; + return sample_lambda_1d_array; } else if (sampler->MinFilter == GL_LINEAR) { - return &sample_linear_1d_array; + return sample_linear_1d_array; } else { assert(sampler->MinFilter == GL_NEAREST); - return &sample_nearest_1d_array; + return sample_nearest_1d_array; } case GL_TEXTURE_2D_ARRAY_EXT: if (is_depth_texture(t)) { - return &sample_depth_texture; + return sample_depth_texture; } else if (needLambda) { - return &sample_lambda_2d_array; + return sample_lambda_2d_array; } else if (sampler->MinFilter == GL_LINEAR) { - return &sample_linear_2d_array; + return sample_linear_2d_array; } else { assert(sampler->MinFilter == GL_NEAREST); - return &sample_nearest_2d_array; + return sample_nearest_2d_array; } default: _mesa_problem(ctx, "invalid target in _swrast_choose_texture_sample_func"); - return &null_sample_func; + return null_sample_func; } } }