X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fswrast%2Fs_texfilter.c;h=ec281776d0d1f998fffc9a36bd8d7cdf464fa7ac;hb=2e5764ccf440e59fc6f8441e329c0747ef4ed57b;hp=3fc554c5a2050c85672a6ca95ae60147522853ba;hpb=e5c7d1e1c8ccb493c63e33d017c28b5cf4a55829;p=mesa.git diff --git a/src/mesa/swrast/s_texfilter.c b/src/mesa/swrast/s_texfilter.c index 3fc554c5a20..ec281776d0d 100644 --- a/src/mesa/swrast/s_texfilter.c +++ b/src/mesa/swrast/s_texfilter.c @@ -135,8 +135,11 @@ lerp_rgba_3d(GLfloat result[4], GLfloat a, GLfloat b, GLfloat c, /** - * If A is a signed integer, A % B doesn't give the right value for A < 0 - * (in terms of texture repeat). Just casting to unsigned fixes that. + * Used for GL_REPEAT wrap mode. Using A % B doesn't produce the + * right results for A<0. Casting to A to be unsigned only works if B + * is a power of two. Adding a bias to A (which is a multiple of B) + * avoids the problems with A < 0 (for reasonable A) without using a + * conditional. */ #define REMAINDER(A, B) (((A) + (B) * 1024) % (B)) @@ -795,7 +798,7 @@ get_border_color(const struct gl_texture_object *tObj, * Return the texture sample for coordinate (s) using GL_NEAREST filter. */ static INLINE void -sample_1d_nearest(GLcontext *ctx, +sample_1d_nearest(struct gl_context *ctx, const struct gl_texture_object *tObj, const struct gl_texture_image *img, const GLfloat texcoord[4], GLfloat rgba[4]) @@ -819,7 +822,7 @@ sample_1d_nearest(GLcontext *ctx, * Return the texture sample for coordinate (s) using GL_LINEAR filter. */ static INLINE void -sample_1d_linear(GLcontext *ctx, +sample_1d_linear(struct gl_context *ctx, const struct gl_texture_object *tObj, const struct gl_texture_image *img, const GLfloat texcoord[4], GLfloat rgba[4]) @@ -860,7 +863,7 @@ sample_1d_linear(GLcontext *ctx, static void -sample_1d_nearest_mipmap_nearest(GLcontext *ctx, +sample_1d_nearest_mipmap_nearest(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -875,7 +878,7 @@ sample_1d_nearest_mipmap_nearest(GLcontext *ctx, static void -sample_1d_linear_mipmap_nearest(GLcontext *ctx, +sample_1d_linear_mipmap_nearest(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -890,7 +893,7 @@ sample_1d_linear_mipmap_nearest(GLcontext *ctx, static void -sample_1d_nearest_mipmap_linear(GLcontext *ctx, +sample_1d_nearest_mipmap_linear(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -915,7 +918,7 @@ sample_1d_nearest_mipmap_linear(GLcontext *ctx, static void -sample_1d_linear_mipmap_linear(GLcontext *ctx, +sample_1d_linear_mipmap_linear(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -941,7 +944,7 @@ sample_1d_linear_mipmap_linear(GLcontext *ctx, /** Sample 1D texture, nearest filtering for both min/magnification */ static void -sample_nearest_1d( GLcontext *ctx, +sample_nearest_1d( struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4] ) @@ -957,7 +960,7 @@ sample_nearest_1d( GLcontext *ctx, /** Sample 1D texture, linear filtering for both min/magnification */ static void -sample_linear_1d( GLcontext *ctx, +sample_linear_1d( struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4] ) @@ -973,7 +976,7 @@ sample_linear_1d( GLcontext *ctx, /** Sample 1D texture, using lambda to choose between min/magnification */ static void -sample_lambda_1d( GLcontext *ctx, +sample_lambda_1d( struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4] ) @@ -1052,7 +1055,7 @@ sample_lambda_1d( GLcontext *ctx, * Return the texture sample for coordinate (s,t) using GL_NEAREST filter. */ static INLINE void -sample_2d_nearest(GLcontext *ctx, +sample_2d_nearest(struct gl_context *ctx, const struct gl_texture_object *tObj, const struct gl_texture_image *img, const GLfloat texcoord[4], @@ -1085,7 +1088,7 @@ sample_2d_nearest(GLcontext *ctx, * New sampling code contributed by Lynn Quam . */ static INLINE void -sample_2d_linear(GLcontext *ctx, +sample_2d_linear(struct gl_context *ctx, const struct gl_texture_object *tObj, const struct gl_texture_image *img, const GLfloat texcoord[4], @@ -1149,7 +1152,7 @@ sample_2d_linear(GLcontext *ctx, * We don't have to worry about the texture border. */ static INLINE void -sample_2d_linear_repeat(GLcontext *ctx, +sample_2d_linear_repeat(struct gl_context *ctx, const struct gl_texture_object *tObj, const struct gl_texture_image *img, const GLfloat texcoord[4], @@ -1182,7 +1185,7 @@ sample_2d_linear_repeat(GLcontext *ctx, static void -sample_2d_nearest_mipmap_nearest(GLcontext *ctx, +sample_2d_nearest_mipmap_nearest(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -1196,7 +1199,7 @@ sample_2d_nearest_mipmap_nearest(GLcontext *ctx, static void -sample_2d_linear_mipmap_nearest(GLcontext *ctx, +sample_2d_linear_mipmap_nearest(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -1211,7 +1214,7 @@ sample_2d_linear_mipmap_nearest(GLcontext *ctx, static void -sample_2d_nearest_mipmap_linear(GLcontext *ctx, +sample_2d_nearest_mipmap_linear(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -1236,7 +1239,7 @@ sample_2d_nearest_mipmap_linear(GLcontext *ctx, static void -sample_2d_linear_mipmap_linear( GLcontext *ctx, +sample_2d_linear_mipmap_linear( struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4] ) @@ -1261,7 +1264,7 @@ sample_2d_linear_mipmap_linear( GLcontext *ctx, static void -sample_2d_linear_mipmap_linear_repeat(GLcontext *ctx, +sample_2d_linear_mipmap_linear_repeat(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -1291,7 +1294,7 @@ sample_2d_linear_mipmap_linear_repeat(GLcontext *ctx, /** Sample 2D texture, nearest filtering for both min/magnification */ static void -sample_nearest_2d(GLcontext *ctx, +sample_nearest_2d(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -1307,7 +1310,7 @@ sample_nearest_2d(GLcontext *ctx, /** Sample 2D texture, linear filtering for both min/magnification */ static void -sample_linear_2d(GLcontext *ctx, +sample_linear_2d(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -1340,7 +1343,7 @@ sample_linear_2d(GLcontext *ctx, * Format = GL_RGB */ static void -opt_sample_rgb_2d(GLcontext *ctx, +opt_sample_rgb_2d(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -1381,7 +1384,7 @@ opt_sample_rgb_2d(GLcontext *ctx, * Format = GL_RGBA */ static void -opt_sample_rgba_2d(GLcontext *ctx, +opt_sample_rgba_2d(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -1416,7 +1419,7 @@ opt_sample_rgba_2d(GLcontext *ctx, /** Sample 2D texture, using lambda to choose between min/magnification */ static void -sample_lambda_2d(GLcontext *ctx, +sample_lambda_2d(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -1537,7 +1540,7 @@ sample_lambda_2d(GLcontext *ctx, * Return the texture sample for coordinate (s,t,r) using GL_NEAREST filter. */ static INLINE void -sample_3d_nearest(GLcontext *ctx, +sample_3d_nearest(struct gl_context *ctx, const struct gl_texture_object *tObj, const struct gl_texture_image *img, const GLfloat texcoord[4], @@ -1569,7 +1572,7 @@ sample_3d_nearest(GLcontext *ctx, * Return the texture sample for coordinate (s,t,r) using GL_LINEAR filter. */ static void -sample_3d_linear(GLcontext *ctx, +sample_3d_linear(struct gl_context *ctx, const struct gl_texture_object *tObj, const struct gl_texture_image *img, const GLfloat texcoord[4], @@ -1663,7 +1666,7 @@ sample_3d_linear(GLcontext *ctx, static void -sample_3d_nearest_mipmap_nearest(GLcontext *ctx, +sample_3d_nearest_mipmap_nearest(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4] ) @@ -1677,7 +1680,7 @@ sample_3d_nearest_mipmap_nearest(GLcontext *ctx, static void -sample_3d_linear_mipmap_nearest(GLcontext *ctx, +sample_3d_linear_mipmap_nearest(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -1692,7 +1695,7 @@ sample_3d_linear_mipmap_nearest(GLcontext *ctx, static void -sample_3d_nearest_mipmap_linear(GLcontext *ctx, +sample_3d_nearest_mipmap_linear(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -1717,7 +1720,7 @@ sample_3d_nearest_mipmap_linear(GLcontext *ctx, static void -sample_3d_linear_mipmap_linear(GLcontext *ctx, +sample_3d_linear_mipmap_linear(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -1743,7 +1746,7 @@ sample_3d_linear_mipmap_linear(GLcontext *ctx, /** Sample 3D texture, nearest filtering for both min/magnification */ static void -sample_nearest_3d(GLcontext *ctx, +sample_nearest_3d(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -1759,7 +1762,7 @@ sample_nearest_3d(GLcontext *ctx, /** Sample 3D texture, linear filtering for both min/magnification */ static void -sample_linear_3d(GLcontext *ctx, +sample_linear_3d(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -1775,7 +1778,7 @@ sample_linear_3d(GLcontext *ctx, /** Sample 3D texture, using lambda to choose between min/magnification */ static void -sample_lambda_3d(GLcontext *ctx, +sample_lambda_3d(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -1930,7 +1933,7 @@ choose_cube_face(const struct gl_texture_object *texObj, static void -sample_nearest_cube(GLcontext *ctx, +sample_nearest_cube(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -1948,7 +1951,7 @@ sample_nearest_cube(GLcontext *ctx, static void -sample_linear_cube(GLcontext *ctx, +sample_linear_cube(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -1966,7 +1969,7 @@ sample_linear_cube(GLcontext *ctx, static void -sample_cube_nearest_mipmap_nearest(GLcontext *ctx, +sample_cube_nearest_mipmap_nearest(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -1995,7 +1998,7 @@ sample_cube_nearest_mipmap_nearest(GLcontext *ctx, static void -sample_cube_linear_mipmap_nearest(GLcontext *ctx, +sample_cube_linear_mipmap_nearest(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -2014,7 +2017,7 @@ sample_cube_linear_mipmap_nearest(GLcontext *ctx, static void -sample_cube_nearest_mipmap_linear(GLcontext *ctx, +sample_cube_nearest_mipmap_linear(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -2043,7 +2046,7 @@ sample_cube_nearest_mipmap_linear(GLcontext *ctx, static void -sample_cube_linear_mipmap_linear(GLcontext *ctx, +sample_cube_linear_mipmap_linear(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -2073,7 +2076,7 @@ sample_cube_linear_mipmap_linear(GLcontext *ctx, /** Sample cube texture, using lambda to choose between min/magnification */ static void -sample_lambda_cube(GLcontext *ctx, +sample_lambda_cube(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -2147,7 +2150,7 @@ sample_lambda_cube(GLcontext *ctx, static void -sample_nearest_rect(GLcontext *ctx, +sample_nearest_rect(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -2181,7 +2184,7 @@ sample_nearest_rect(GLcontext *ctx, static void -sample_linear_rect(GLcontext *ctx, +sample_linear_rect(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -2247,7 +2250,7 @@ sample_linear_rect(GLcontext *ctx, /** Sample Rect texture, using lambda to choose between min/magnification */ static void -sample_lambda_rect(GLcontext *ctx, +sample_lambda_rect(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -2291,7 +2294,7 @@ sample_lambda_rect(GLcontext *ctx, * Return the texture sample for coordinate (s,t,r) using GL_NEAREST filter. */ static void -sample_2d_array_nearest(GLcontext *ctx, +sample_2d_array_nearest(struct gl_context *ctx, const struct gl_texture_object *tObj, const struct gl_texture_image *img, const GLfloat texcoord[4], @@ -2324,7 +2327,7 @@ sample_2d_array_nearest(GLcontext *ctx, * Return the texture sample for coordinate (s,t,r) using GL_LINEAR filter. */ static void -sample_2d_array_linear(GLcontext *ctx, +sample_2d_array_linear(struct gl_context *ctx, const struct gl_texture_object *tObj, const struct gl_texture_image *img, const GLfloat texcoord[4], @@ -2394,7 +2397,7 @@ sample_2d_array_linear(GLcontext *ctx, static void -sample_2d_array_nearest_mipmap_nearest(GLcontext *ctx, +sample_2d_array_nearest_mipmap_nearest(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -2409,7 +2412,7 @@ sample_2d_array_nearest_mipmap_nearest(GLcontext *ctx, static void -sample_2d_array_linear_mipmap_nearest(GLcontext *ctx, +sample_2d_array_linear_mipmap_nearest(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -2425,7 +2428,7 @@ sample_2d_array_linear_mipmap_nearest(GLcontext *ctx, static void -sample_2d_array_nearest_mipmap_linear(GLcontext *ctx, +sample_2d_array_nearest_mipmap_linear(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -2452,7 +2455,7 @@ sample_2d_array_nearest_mipmap_linear(GLcontext *ctx, static void -sample_2d_array_linear_mipmap_linear(GLcontext *ctx, +sample_2d_array_linear_mipmap_linear(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -2480,7 +2483,7 @@ sample_2d_array_linear_mipmap_linear(GLcontext *ctx, /** Sample 2D Array texture, nearest filtering for both min/magnification */ static void -sample_nearest_2d_array(GLcontext *ctx, +sample_nearest_2d_array(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -2497,7 +2500,7 @@ sample_nearest_2d_array(GLcontext *ctx, /** Sample 2D Array texture, linear filtering for both min/magnification */ static void -sample_linear_2d_array(GLcontext *ctx, +sample_linear_2d_array(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -2513,7 +2516,7 @@ sample_linear_2d_array(GLcontext *ctx, /** Sample 2D Array texture, using lambda to choose between min/magnification */ static void -sample_lambda_2d_array(GLcontext *ctx, +sample_lambda_2d_array(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -2601,7 +2604,7 @@ sample_lambda_2d_array(GLcontext *ctx, * Return the texture sample for coordinate (s,t,r) using GL_NEAREST filter. */ static void -sample_1d_array_nearest(GLcontext *ctx, +sample_1d_array_nearest(struct gl_context *ctx, const struct gl_texture_object *tObj, const struct gl_texture_image *img, const GLfloat texcoord[4], @@ -2631,7 +2634,7 @@ sample_1d_array_nearest(GLcontext *ctx, * Return the texture sample for coordinate (s,t,r) using GL_LINEAR filter. */ static void -sample_1d_array_linear(GLcontext *ctx, +sample_1d_array_linear(struct gl_context *ctx, const struct gl_texture_object *tObj, const struct gl_texture_image *img, const GLfloat texcoord[4], @@ -2680,7 +2683,7 @@ sample_1d_array_linear(GLcontext *ctx, static void -sample_1d_array_nearest_mipmap_nearest(GLcontext *ctx, +sample_1d_array_nearest_mipmap_nearest(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -2695,7 +2698,7 @@ sample_1d_array_nearest_mipmap_nearest(GLcontext *ctx, static void -sample_1d_array_linear_mipmap_nearest(GLcontext *ctx, +sample_1d_array_linear_mipmap_nearest(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -2711,7 +2714,7 @@ sample_1d_array_linear_mipmap_nearest(GLcontext *ctx, static void -sample_1d_array_nearest_mipmap_linear(GLcontext *ctx, +sample_1d_array_nearest_mipmap_linear(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -2736,7 +2739,7 @@ sample_1d_array_nearest_mipmap_linear(GLcontext *ctx, static void -sample_1d_array_linear_mipmap_linear(GLcontext *ctx, +sample_1d_array_linear_mipmap_linear(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoord[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -2762,7 +2765,7 @@ sample_1d_array_linear_mipmap_linear(GLcontext *ctx, /** Sample 1D Array texture, nearest filtering for both min/magnification */ static void -sample_nearest_1d_array(GLcontext *ctx, +sample_nearest_1d_array(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -2778,7 +2781,7 @@ sample_nearest_1d_array(GLcontext *ctx, /** Sample 1D Array texture, linear filtering for both min/magnification */ static void -sample_linear_1d_array(GLcontext *ctx, +sample_linear_1d_array(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -2794,7 +2797,7 @@ sample_linear_1d_array(GLcontext *ctx, /** Sample 1D Array texture, using lambda to choose between min/magnification */ static void -sample_lambda_1d_array(GLcontext *ctx, +sample_lambda_1d_array(struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -2972,11 +2975,16 @@ choose_depth_texture_level(const struct gl_texture_object *tObj, GLfloat lambda) { GLint level; - lambda = CLAMP(lambda, tObj->MinLod, tObj->MaxLod); - - level = (GLint) lambda; - - level = CLAMP(level, tObj->BaseLevel, tObj->_MaxLevel); + if (tObj->MinFilter == GL_NEAREST || tObj->MinFilter == GL_LINEAR) { + /* no mipmapping - use base level */ + level = tObj->BaseLevel; + } + else { + /* choose mipmap level */ + lambda = CLAMP(lambda, tObj->MinLod, tObj->MaxLod); + level = (GLint) lambda; + level = CLAMP(level, tObj->BaseLevel, tObj->_MaxLevel); + } return level; } @@ -2987,7 +2995,7 @@ choose_depth_texture_level(const struct gl_texture_object *tObj, GLfloat lambda) * check for minification vs. magnification, etc. */ static void -sample_depth_texture( GLcontext *ctx, +sample_depth_texture( struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat texel[][4] ) @@ -3048,6 +3056,9 @@ sample_depth_texture( GLcontext *ctx, case GL_ALPHA: ASSIGN_4V(texel[i], 0.0F, 0.0F, 0.0F, result); break; + case GL_RED: + ASSIGN_4V(texel[i], result, 0.0F, 0.0F, 1.0F); + break; default: _mesa_problem(ctx, "Bad depth texture mode"); } @@ -3153,7 +3164,7 @@ sample_depth_texture( GLcontext *ctx, * Note: fragment programs don't observe the texture enable/disable flags. */ static void -null_sample_func( GLcontext *ctx, +null_sample_func( struct gl_context *ctx, const struct gl_texture_object *tObj, GLuint n, const GLfloat texcoords[][4], const GLfloat lambda[], GLfloat rgba[][4]) @@ -3176,7 +3187,7 @@ null_sample_func( GLcontext *ctx, * Choose the texture sampling function for the given texture object. */ texture_sample_func -_swrast_choose_texture_sample_func( GLcontext *ctx, +_swrast_choose_texture_sample_func( struct gl_context *ctx, const struct gl_texture_object *t ) { if (!t || !t->_Complete) {