diff options
| author | Brian Paul <brian.paul@tungstengraphics.com> | 2002-02-15 03:41:47 +0000 | 
|---|---|---|
| committer | Brian Paul <brian.paul@tungstengraphics.com> | 2002-02-15 03:41:47 +0000 | 
| commit | ce57201825e661800ce39e98eeae090ac118cdcf (patch) | |
| tree | 78aed550a58d3800f695b63b1b6c56ca55444785 /src | |
| parent | 09700ee358cd07634161ac7802e97ddbe6c075bf (diff) | |
uniformly pass texcoords as GLfloat [4]
Diffstat (limited to 'src')
| -rw-r--r-- | src/mesa/swrast/s_texture.c | 316 | 
1 files changed, 139 insertions, 177 deletions
| diff --git a/src/mesa/swrast/s_texture.c b/src/mesa/swrast/s_texture.c index 882a6ad178..206508559f 100644 --- a/src/mesa/swrast/s_texture.c +++ b/src/mesa/swrast/s_texture.c @@ -1,4 +1,4 @@ -/* $Id: s_texture.c,v 1.49 2002/02/02 21:40:34 brianp Exp $ */ +/* $Id: s_texture.c,v 1.50 2002/02/15 03:41:47 brianp Exp $ */  /*   * Mesa 3-D graphics library @@ -299,12 +299,12 @@ static void  sample_1d_nearest(GLcontext *ctx,                    const struct gl_texture_object *tObj,                    const struct gl_texture_image *img, -                  GLfloat s, GLchan rgba[4]) +                  const GLfloat texcoord[4], GLchan rgba[4])  {     const GLint width = img->Width2;  /* without border, power of two */     GLint i; -   COMPUTE_NEAREST_TEXEL_LOCATION(tObj->WrapS, s, width, i); +   COMPUTE_NEAREST_TEXEL_LOCATION(tObj->WrapS, texcoord[0], width, i);     /* skip over the border, if any */     i += img->Border; @@ -330,14 +330,14 @@ static void  sample_1d_linear(GLcontext *ctx,                   const struct gl_texture_object *tObj,                   const struct gl_texture_image *img, -                 GLfloat s, GLchan rgba[4]) +                 const GLfloat texcoord[4], GLchan rgba[4])  {     const GLint width = img->Width2;     GLint i0, i1;     GLfloat u;     GLuint useBorderColor; -   COMPUTE_LINEAR_TEXEL_LOCATIONS(tObj->WrapS, s, u, width, i0, i1); +   COMPUTE_LINEAR_TEXEL_LOCATIONS(tObj->WrapS, texcoord[0], u, width, i0, i1);     useBorderColor = 0;     if (img->Border) { @@ -405,24 +405,24 @@ sample_1d_linear(GLcontext *ctx,  static void  sample_1d_nearest_mipmap_nearest(GLcontext *ctx,                                   const struct gl_texture_object *tObj, -                                 GLfloat s, GLfloat lambda, +                                 const GLfloat texcoord[4], GLfloat lambda,                                   GLchan rgba[4])  {     GLint level;     COMPUTE_NEAREST_MIPMAP_LEVEL(tObj, lambda, level); -   sample_1d_nearest(ctx, tObj, tObj->Image[level], s, rgba); +   sample_1d_nearest(ctx, tObj, tObj->Image[level], texcoord, rgba);  }  static void  sample_1d_linear_mipmap_nearest(GLcontext *ctx,                                  const struct gl_texture_object *tObj, -                                GLfloat s, GLfloat lambda, +                                const GLfloat texcoord[4], GLfloat lambda,                                  GLchan rgba[4])  {     GLint level;     COMPUTE_NEAREST_MIPMAP_LEVEL(tObj, lambda, level); -   sample_1d_linear(ctx, tObj, tObj->Image[level], s, rgba); +   sample_1d_linear(ctx, tObj, tObj->Image[level], texcoord, rgba);  } @@ -440,7 +440,7 @@ sample_1d_linear_mipmap_nearest(GLcontext *ctx,  static void  sample_1d_nearest_mipmap_linear(GLcontext *ctx,                                  const struct gl_texture_object *tObj, -                                GLfloat s, GLfloat lambda, +                                const GLfloat texcoord[4], GLfloat lambda,                                  GLchan rgba[4])  {     GLint level; @@ -448,13 +448,13 @@ sample_1d_nearest_mipmap_linear(GLcontext *ctx,     COMPUTE_LINEAR_MIPMAP_LEVEL(tObj, lambda, level);     if (level >= tObj->_MaxLevel) { -      sample_1d_nearest(ctx, tObj, tObj->Image[tObj->_MaxLevel], s, rgba); +      sample_1d_nearest(ctx, tObj, tObj->Image[tObj->_MaxLevel], texcoord, rgba);     }     else {        GLchan t0[4], t1[4];        const GLfloat f = FRAC(lambda); -      sample_1d_nearest(ctx, tObj, tObj->Image[level  ], s, t0); -      sample_1d_nearest(ctx, tObj, tObj->Image[level+1], s, t1); +      sample_1d_nearest(ctx, tObj, tObj->Image[level  ], texcoord, t0); +      sample_1d_nearest(ctx, tObj, tObj->Image[level+1], texcoord, t1);        rgba[RCOMP] = (GLchan) INTCAST ((1.0F-f) * t0[RCOMP] + f * t1[RCOMP]);        rgba[GCOMP] = (GLchan) INTCAST ((1.0F-f) * t0[GCOMP] + f * t1[GCOMP]);        rgba[BCOMP] = (GLchan) INTCAST ((1.0F-f) * t0[BCOMP] + f * t1[BCOMP]); @@ -467,7 +467,7 @@ sample_1d_nearest_mipmap_linear(GLcontext *ctx,  static void  sample_1d_linear_mipmap_linear(GLcontext *ctx,                                 const struct gl_texture_object *tObj, -                               GLfloat s, GLfloat lambda, +                               const GLfloat texcoord[4], GLfloat lambda,                                 GLchan rgba[4])  {     GLint level; @@ -475,13 +475,13 @@ sample_1d_linear_mipmap_linear(GLcontext *ctx,     COMPUTE_LINEAR_MIPMAP_LEVEL(tObj, lambda, level);     if (level >= tObj->_MaxLevel) { -      sample_1d_linear(ctx, tObj, tObj->Image[tObj->_MaxLevel], s, rgba); +      sample_1d_linear(ctx, tObj, tObj->Image[tObj->_MaxLevel], texcoord, rgba);     }     else {        GLchan t0[4], t1[4];        const GLfloat f = FRAC(lambda); -      sample_1d_linear(ctx, tObj, tObj->Image[level  ], s, t0); -      sample_1d_linear(ctx, tObj, tObj->Image[level+1], s, t1); +      sample_1d_linear(ctx, tObj, tObj->Image[level  ], texcoord, t0); +      sample_1d_linear(ctx, tObj, tObj->Image[level+1], texcoord, t1);        rgba[RCOMP] = (GLchan) INTCAST ((1.0F-f) * t0[RCOMP] + f * t1[RCOMP]);        rgba[GCOMP] = (GLchan) INTCAST ((1.0F-f) * t0[GCOMP] + f * t1[GCOMP]);        rgba[BCOMP] = (GLchan) INTCAST ((1.0F-f) * t0[BCOMP] + f * t1[BCOMP]); @@ -501,7 +501,7 @@ sample_nearest_1d( GLcontext *ctx, GLuint texUnit,     struct gl_texture_image *image = tObj->Image[tObj->BaseLevel];     (void) lambda;     for (i=0;i<n;i++) { -      sample_1d_nearest(ctx, tObj, image, texcoords[i][0], rgba[i]); +      sample_1d_nearest(ctx, tObj, image, texcoords[i], rgba[i]);     }  } @@ -517,7 +517,7 @@ sample_linear_1d( GLcontext *ctx, GLuint texUnit,     struct gl_texture_image *image = tObj->Image[tObj->BaseLevel];     (void) lambda;     for (i=0;i<n;i++) { -      sample_1d_linear(ctx, tObj, image, texcoords[i][0], rgba[i]); +      sample_1d_linear(ctx, tObj, image, texcoords[i], rgba[i]);     }  } @@ -542,27 +542,27 @@ sample_lambda_1d( GLcontext *ctx, GLuint texUnit,           switch (tObj->MinFilter) {              case GL_NEAREST:                 sample_1d_nearest(ctx, tObj, tObj->Image[tObj->BaseLevel], -                                 texcoords[i][0], rgba[i]); +                                 texcoords[i], rgba[i]);                 break;              case GL_LINEAR:                 sample_1d_linear(ctx, tObj, tObj->Image[tObj->BaseLevel], -                                texcoords[i][0], rgba[i]); +                                texcoords[i], rgba[i]);                 break;              case GL_NEAREST_MIPMAP_NEAREST: -               sample_1d_nearest_mipmap_nearest(ctx, tObj, lambda[i], texcoords[i][0], -                                                rgba[i]); +               sample_1d_nearest_mipmap_nearest(ctx, tObj, texcoords[i], +                                                lambda[i], rgba[i]);                 break;              case GL_LINEAR_MIPMAP_NEAREST: -               sample_1d_linear_mipmap_nearest(ctx, tObj, texcoords[i][0], lambda[i], -                                               rgba[i]); +               sample_1d_linear_mipmap_nearest(ctx, tObj, texcoords[i], +                                               lambda[i], rgba[i]);                 break;              case GL_NEAREST_MIPMAP_LINEAR: -               sample_1d_nearest_mipmap_linear(ctx, tObj, texcoords[i][0], lambda[i], -                                               rgba[i]); +               sample_1d_nearest_mipmap_linear(ctx, tObj, texcoords[i], +                                               lambda[i], rgba[i]);                 break;              case GL_LINEAR_MIPMAP_LINEAR: -               sample_1d_linear_mipmap_linear(ctx, tObj, texcoords[i][0], lambda[i], -                                              rgba[i]); +               sample_1d_linear_mipmap_linear(ctx, tObj, texcoords[i], +                                              lambda[i], rgba[i]);                 break;              default:                 _mesa_problem(NULL, "Bad min filter in sample_1d_texture"); @@ -574,11 +574,11 @@ sample_lambda_1d( GLcontext *ctx, GLuint texUnit,           switch (tObj->MagFilter) {              case GL_NEAREST:                 sample_1d_nearest(ctx, tObj, tObj->Image[tObj->BaseLevel], -                                 texcoords[i][0], rgba[i]); +                                 texcoords[i], rgba[i]);                 break;              case GL_LINEAR:                 sample_1d_linear(ctx, tObj, tObj->Image[tObj->BaseLevel], -                                texcoords[i][0], rgba[i]); +                                texcoords[i], rgba[i]);                 break;              default:                 _mesa_problem(NULL, "Bad mag filter in sample_1d_texture"); @@ -603,15 +603,15 @@ static void  sample_2d_nearest(GLcontext *ctx,                    const struct gl_texture_object *tObj,                    const struct gl_texture_image *img, -                  GLfloat s, GLfloat t, +                  const GLfloat texcoord[4],                    GLchan rgba[])  {     const GLint width = img->Width2;    /* without border, power of two */     const GLint height = img->Height2;  /* without border, power of two */     GLint i, j; -   COMPUTE_NEAREST_TEXEL_LOCATION(tObj->WrapS, s, width,  i); -   COMPUTE_NEAREST_TEXEL_LOCATION(tObj->WrapT, t, height, j); +   COMPUTE_NEAREST_TEXEL_LOCATION(tObj->WrapS, texcoord[0], width,  i); +   COMPUTE_NEAREST_TEXEL_LOCATION(tObj->WrapT, texcoord[1], height, j);     /* skip over the border, if any */     i += img->Border; @@ -639,7 +639,7 @@ static void  sample_2d_linear(GLcontext *ctx,                   const struct gl_texture_object *tObj,                   const struct gl_texture_image *img, -                 GLfloat s, GLfloat t, +                 const GLfloat texcoord[4],                   GLchan rgba[])  {     const GLint width = img->Width2; @@ -648,8 +648,8 @@ sample_2d_linear(GLcontext *ctx,     GLuint useBorderColor;     GLfloat u, v; -   COMPUTE_LINEAR_TEXEL_LOCATIONS(tObj->WrapS, s, u, width,  i0, i1); -   COMPUTE_LINEAR_TEXEL_LOCATIONS(tObj->WrapT, t, v, height, j0, j1); +   COMPUTE_LINEAR_TEXEL_LOCATIONS(tObj->WrapS, texcoord[0], u, width,  i0, i1); +   COMPUTE_LINEAR_TEXEL_LOCATIONS(tObj->WrapT, texcoord[1], v, height, j0, j1);     useBorderColor = 0;     if (img->Border) { @@ -756,12 +756,12 @@ sample_2d_linear(GLcontext *ctx,  static void  sample_2d_nearest_mipmap_nearest(GLcontext *ctx,                                   const struct gl_texture_object *tObj, -                                 GLfloat s, GLfloat t, GLfloat lambda, +                                 const GLfloat texcoord[4], GLfloat lambda,                                   GLchan rgba[4])  {     GLint level;     COMPUTE_NEAREST_MIPMAP_LEVEL(tObj, lambda, level); -   sample_2d_nearest(ctx, tObj, tObj->Image[level], s, t, rgba); +   sample_2d_nearest(ctx, tObj, tObj->Image[level], texcoord, rgba);  } @@ -769,12 +769,12 @@ sample_2d_nearest_mipmap_nearest(GLcontext *ctx,  static void  sample_2d_linear_mipmap_nearest(GLcontext *ctx,                                  const struct gl_texture_object *tObj, -                                GLfloat s, GLfloat t, GLfloat lambda, +                                const GLfloat texcoord[4], GLfloat lambda,                                  GLchan rgba[4])  {     GLint level;     COMPUTE_NEAREST_MIPMAP_LEVEL(tObj, lambda, level); -   sample_2d_linear(ctx, tObj, tObj->Image[level], s, t, rgba); +   sample_2d_linear(ctx, tObj, tObj->Image[level], texcoord, rgba);  } @@ -782,7 +782,7 @@ sample_2d_linear_mipmap_nearest(GLcontext *ctx,  static void  sample_2d_nearest_mipmap_linear(GLcontext *ctx,                                  const struct gl_texture_object *tObj, -                                GLfloat s, GLfloat t, GLfloat lambda, +                                const GLfloat texcoord[4], GLfloat lambda,                                  GLchan rgba[4])  {     GLint level; @@ -790,13 +790,13 @@ sample_2d_nearest_mipmap_linear(GLcontext *ctx,     COMPUTE_LINEAR_MIPMAP_LEVEL(tObj, lambda, level);     if (level >= tObj->_MaxLevel) { -      sample_2d_nearest(ctx, tObj, tObj->Image[tObj->_MaxLevel], s, t, rgba); +      sample_2d_nearest(ctx, tObj, tObj->Image[tObj->_MaxLevel], texcoord, rgba);     }     else {        GLchan t0[4], t1[4];  /* texels */        const GLfloat f = FRAC(lambda); -      sample_2d_nearest(ctx, tObj, tObj->Image[level  ], s, t, t0); -      sample_2d_nearest(ctx, tObj, tObj->Image[level+1], s, t, t1); +      sample_2d_nearest(ctx, tObj, tObj->Image[level  ], texcoord, t0); +      sample_2d_nearest(ctx, tObj, tObj->Image[level+1], texcoord, t1);        rgba[RCOMP] = (GLchan) INTCAST ((1.0F-f) * t0[RCOMP] + f * t1[RCOMP]);        rgba[GCOMP] = (GLchan) INTCAST ((1.0F-f) * t0[GCOMP] + f * t1[GCOMP]);        rgba[BCOMP] = (GLchan) INTCAST ((1.0F-f) * t0[BCOMP] + f * t1[BCOMP]); @@ -809,7 +809,7 @@ sample_2d_nearest_mipmap_linear(GLcontext *ctx,  static void  sample_2d_linear_mipmap_linear(GLcontext *ctx,                                 const struct gl_texture_object *tObj, -                               GLfloat s, GLfloat t, GLfloat lambda, +                               const GLfloat texcoord[4], GLfloat lambda,                                 GLchan rgba[4])  {     GLint level; @@ -817,13 +817,13 @@ sample_2d_linear_mipmap_linear(GLcontext *ctx,     COMPUTE_LINEAR_MIPMAP_LEVEL(tObj, lambda, level);     if (level >= tObj->_MaxLevel) { -      sample_2d_linear(ctx, tObj, tObj->Image[tObj->_MaxLevel], s, t, rgba); +      sample_2d_linear(ctx, tObj, tObj->Image[tObj->_MaxLevel], texcoord, rgba);     }     else {        GLchan t0[4], t1[4];  /* texels */        const GLfloat f = FRAC(lambda); -      sample_2d_linear(ctx, tObj, tObj->Image[level  ], s, t, t0); -      sample_2d_linear(ctx, tObj, tObj->Image[level+1], s, t, t1); +      sample_2d_linear(ctx, tObj, tObj->Image[level  ], texcoord, t0); +      sample_2d_linear(ctx, tObj, tObj->Image[level+1], texcoord, t1);        rgba[RCOMP] = (GLchan) INTCAST ((1.0F-f) * t0[RCOMP] + f * t1[RCOMP]);        rgba[GCOMP] = (GLchan) INTCAST ((1.0F-f) * t0[GCOMP] + f * t1[GCOMP]);        rgba[BCOMP] = (GLchan) INTCAST ((1.0F-f) * t0[BCOMP] + f * t1[BCOMP]); @@ -843,8 +843,7 @@ sample_nearest_2d( GLcontext *ctx, GLuint texUnit,     struct gl_texture_image *image = tObj->Image[tObj->BaseLevel];     (void) lambda;     for (i=0;i<n;i++) { -      sample_2d_nearest(ctx, tObj, image, texcoords[i][0], -			texcoords[i][1], rgba[i]); +      sample_2d_nearest(ctx, tObj, image, texcoords[i], rgba[i]);     }  } @@ -860,8 +859,7 @@ sample_linear_2d( GLcontext *ctx, GLuint texUnit,     struct gl_texture_image *image = tObj->Image[tObj->BaseLevel];     (void) lambda;     for (i=0;i<n;i++) { -      sample_2d_linear(ctx, tObj, image, texcoords[i][0], -		       texcoords[i][1], rgba[i]); +      sample_2d_linear(ctx, tObj, image, texcoords[i], rgba[i]);     }  } @@ -877,8 +875,7 @@ static void  opt_sample_rgb_2d( GLcontext *ctx, GLuint texUnit,                     const struct gl_texture_object *tObj,                     GLuint n, GLfloat texcoords[][4], -                   const GLfloat lambda[], -                   GLchan rgba[][4] ) +                   const GLfloat lambda[], GLchan rgba[][4] )  {     const struct gl_texture_image *img = tObj->Image[tObj->BaseLevel];     const GLfloat width = (GLfloat) img->Width; @@ -916,8 +913,7 @@ static void  opt_sample_rgba_2d( GLcontext *ctx, GLuint texUnit,                      const struct gl_texture_object *tObj,                      GLuint n, GLfloat texcoords[][4], -                    const GLfloat lambda[], -                    GLchan rgba[][4] ) +                    const GLfloat lambda[], GLchan rgba[][4] )  {     const struct gl_texture_image *img = tObj->Image[tObj->BaseLevel];     const GLfloat width = (GLfloat) img->Width; @@ -972,8 +968,7 @@ static void  sample_lambda_2d( GLcontext *ctx, GLuint texUnit,                    const struct gl_texture_object *tObj,                    GLuint n, GLfloat texcoords[][4], -                  const GLfloat lambda[], -                  GLchan rgba[][4] ) +                  const GLfloat lambda[], GLchan rgba[][4] )  {     const GLfloat minMagThresh = SWRAST_CONTEXT(ctx)->_MinMagThresh[texUnit];     GLuint i; @@ -1018,40 +1013,31 @@ sample_lambda_2d( GLcontext *ctx, GLuint texUnit,        }     }     else { +      const struct gl_texture_image *tImg = tObj->Image[tObj->BaseLevel];        for (i = 0; i < n; i++) {           if (lambda[i] > minMagThresh) {              /* minification */              switch (tObj->MinFilter) {                 case GL_NEAREST: -                  sample_2d_nearest(ctx, tObj, tObj->Image[tObj->BaseLevel], -                                    texcoords[i][0], texcoords[i][1], rgba[i]); +                  sample_2d_nearest(ctx, tObj, tImg, texcoords[i], rgba[i]);                    break;                 case GL_LINEAR: -                  sample_2d_linear(ctx, tObj, tObj->Image[tObj->BaseLevel], -                                   texcoords[i][0], texcoords[i][1], rgba[i]); +                  sample_2d_linear(ctx, tObj, tImg, texcoords[i], rgba[i]);                    break;                 case GL_NEAREST_MIPMAP_NEAREST: -                  sample_2d_nearest_mipmap_nearest(ctx, tObj, -                                                   texcoords[i][0], -                                                   texcoords[i][1], +                  sample_2d_nearest_mipmap_nearest(ctx, tObj, texcoords[i],                                                     lambda[i], rgba[i]);                    break;                 case GL_LINEAR_MIPMAP_NEAREST: -                  sample_2d_linear_mipmap_nearest(ctx, tObj, -                                                  texcoords[i][0], -                                                  texcoords[i][1], +                  sample_2d_linear_mipmap_nearest(ctx, tObj, texcoords[i],                                                    lambda[i], rgba[i]);                    break;                 case GL_NEAREST_MIPMAP_LINEAR: -                  sample_2d_nearest_mipmap_linear(ctx, tObj, -                                                  texcoords[i][0], -                                                  texcoords[i][1], +                  sample_2d_nearest_mipmap_linear(ctx, tObj, texcoords[i],                                                    lambda[i], rgba[i]);                    break;                 case GL_LINEAR_MIPMAP_LINEAR: -                  sample_2d_linear_mipmap_linear(ctx, tObj, -                                                 texcoords[i][0], -                                                 texcoords[i][1], +                  sample_2d_linear_mipmap_linear(ctx, tObj, texcoords[i],                                                   lambda[i], rgba[i] );                    break;                 default: @@ -1063,12 +1049,10 @@ sample_lambda_2d( GLcontext *ctx, GLuint texUnit,              /* magnification */              switch (tObj->MagFilter) {                 case GL_NEAREST: -                  sample_2d_nearest(ctx, tObj, tObj->Image[tObj->BaseLevel], -                                    texcoords[i][0], texcoords[i][1], rgba[i]); +                  sample_2d_nearest(ctx, tObj, tImg, texcoords[i], rgba[i]);                    break;                 case GL_LINEAR: -                  sample_2d_linear(ctx, tObj, tObj->Image[tObj->BaseLevel], -                                   texcoords[i][0], texcoords[i][1], rgba[i] ); +                  sample_2d_linear(ctx, tObj, tImg, texcoords[i], rgba[i] );                    break;                 default:                    _mesa_problem(NULL, "Bad mag filter in sample_2d_texture"); @@ -1091,7 +1075,7 @@ static void  sample_3d_nearest(GLcontext *ctx,                    const struct gl_texture_object *tObj,                    const struct gl_texture_image *img, -                  GLfloat s, GLfloat t, GLfloat r, +                  const GLfloat texcoord[4],                    GLchan rgba[4])  {     const GLint width = img->Width2;     /* without border, power of two */ @@ -1099,9 +1083,9 @@ sample_3d_nearest(GLcontext *ctx,     const GLint depth = img->Depth2;     /* without border, power of two */     GLint i, j, k; -   COMPUTE_NEAREST_TEXEL_LOCATION(tObj->WrapS, s, width,  i); -   COMPUTE_NEAREST_TEXEL_LOCATION(tObj->WrapT, t, height, j); -   COMPUTE_NEAREST_TEXEL_LOCATION(tObj->WrapR, r, depth,  k); +   COMPUTE_NEAREST_TEXEL_LOCATION(tObj->WrapS, texcoord[0], width,  i); +   COMPUTE_NEAREST_TEXEL_LOCATION(tObj->WrapT, texcoord[1], height, j); +   COMPUTE_NEAREST_TEXEL_LOCATION(tObj->WrapR, texcoord[2], depth,  k);     if (i < 0 || i >= (GLint) img->Width ||         j < 0 || j >= (GLint) img->Height || @@ -1126,7 +1110,7 @@ static void  sample_3d_linear(GLcontext *ctx,                   const struct gl_texture_object *tObj,                   const struct gl_texture_image *img, -                 GLfloat s, GLfloat t, GLfloat r, +                 const GLfloat texcoord[4],                   GLchan rgba[4])  {     const GLint width = img->Width2; @@ -1136,9 +1120,9 @@ sample_3d_linear(GLcontext *ctx,     GLuint useBorderColor;     GLfloat u, v, w; -   COMPUTE_LINEAR_TEXEL_LOCATIONS(tObj->WrapS, s, u, width,  i0, i1); -   COMPUTE_LINEAR_TEXEL_LOCATIONS(tObj->WrapT, t, v, height, j0, j1); -   COMPUTE_LINEAR_TEXEL_LOCATIONS(tObj->WrapR, r, w, depth,  k0, k1); +   COMPUTE_LINEAR_TEXEL_LOCATIONS(tObj->WrapS, texcoord[0], u, width,  i0, i1); +   COMPUTE_LINEAR_TEXEL_LOCATIONS(tObj->WrapT, texcoord[1], v, height, j0, j1); +   COMPUTE_LINEAR_TEXEL_LOCATIONS(tObj->WrapR, texcoord[2], w, depth,  k0, k1);     useBorderColor = 0;     if (img->Border) { @@ -1316,31 +1300,31 @@ sample_3d_linear(GLcontext *ctx,  static void  sample_3d_nearest_mipmap_nearest(GLcontext *ctx,                                   const struct gl_texture_object *tObj, -                                 GLfloat s, GLfloat t, GLfloat r, +                                 const GLfloat texcoord[4],                                   GLfloat lambda, GLchan rgba[4] )  {     GLint level;     COMPUTE_NEAREST_MIPMAP_LEVEL(tObj, lambda, level); -   sample_3d_nearest(ctx, tObj, tObj->Image[level], s, t, r, rgba); +   sample_3d_nearest(ctx, tObj, tObj->Image[level], texcoord, rgba);  }  static void  sample_3d_linear_mipmap_nearest(GLcontext *ctx,                                  const struct gl_texture_object *tObj, -                                GLfloat s, GLfloat t, GLfloat r, +                                const GLfloat texcoord[4],                                  GLfloat lambda, GLchan rgba[4])  {     GLint level;     COMPUTE_NEAREST_MIPMAP_LEVEL(tObj, lambda, level); -   sample_3d_linear(ctx, tObj, tObj->Image[level], s, t, r, rgba); +   sample_3d_linear(ctx, tObj, tObj->Image[level], texcoord, rgba);  }  static void  sample_3d_nearest_mipmap_linear(GLcontext *ctx,                                  const struct gl_texture_object *tObj, -                                GLfloat s, GLfloat t, GLfloat r, +                                const GLfloat texcoord[4],                                  GLfloat lambda, GLchan rgba[4])  {     GLint level; @@ -1349,13 +1333,13 @@ sample_3d_nearest_mipmap_linear(GLcontext *ctx,     if (level >= tObj->_MaxLevel) {        sample_3d_nearest(ctx, tObj, tObj->Image[tObj->_MaxLevel], -                        s, t, r, rgba); +                        texcoord, rgba);     }     else {        GLchan t0[4], t1[4];  /* texels */        const GLfloat f = FRAC(lambda); -      sample_3d_nearest(ctx, tObj, tObj->Image[level  ], s, t, r, t0); -      sample_3d_nearest(ctx, tObj, tObj->Image[level+1], s, t, r, t1); +      sample_3d_nearest(ctx, tObj, tObj->Image[level  ], texcoord, t0); +      sample_3d_nearest(ctx, tObj, tObj->Image[level+1], texcoord, t1);        rgba[RCOMP] = (GLchan) INTCAST ((1.0F-f) * t0[RCOMP] + f * t1[RCOMP]);        rgba[GCOMP] = (GLchan) INTCAST ((1.0F-f) * t0[GCOMP] + f * t1[GCOMP]);        rgba[BCOMP] = (GLchan) INTCAST ((1.0F-f) * t0[BCOMP] + f * t1[BCOMP]); @@ -1367,7 +1351,7 @@ sample_3d_nearest_mipmap_linear(GLcontext *ctx,  static void  sample_3d_linear_mipmap_linear(GLcontext *ctx,                                 const struct gl_texture_object *tObj, -                               GLfloat s, GLfloat t, GLfloat r, +                               const GLfloat texcoord[4],                                 GLfloat lambda, GLchan rgba[4] )  {     GLint level; @@ -1375,13 +1359,13 @@ sample_3d_linear_mipmap_linear(GLcontext *ctx,     COMPUTE_LINEAR_MIPMAP_LEVEL(tObj, lambda, level);     if (level >= tObj->_MaxLevel) { -      sample_3d_linear(ctx, tObj, tObj->Image[tObj->_MaxLevel], s, t, r, rgba); +      sample_3d_linear(ctx, tObj, tObj->Image[tObj->_MaxLevel], texcoord, rgba);     }     else {        GLchan t0[4], t1[4];  /* texels */        const GLfloat f = FRAC(lambda); -      sample_3d_linear(ctx, tObj, tObj->Image[level  ], s, t, r, t0); -      sample_3d_linear(ctx, tObj, tObj->Image[level+1], s, t, r, t1); +      sample_3d_linear(ctx, tObj, tObj->Image[level  ], texcoord, t0); +      sample_3d_linear(ctx, tObj, tObj->Image[level+1], texcoord, t1);        rgba[RCOMP] = (GLchan) INTCAST ((1.0F-f) * t0[RCOMP] + f * t1[RCOMP]);        rgba[GCOMP] = (GLchan) INTCAST ((1.0F-f) * t0[GCOMP] + f * t1[GCOMP]);        rgba[BCOMP] = (GLchan) INTCAST ((1.0F-f) * t0[BCOMP] + f * t1[BCOMP]); @@ -1400,9 +1384,7 @@ sample_nearest_3d(GLcontext *ctx, GLuint texUnit,     struct gl_texture_image *image = tObj->Image[tObj->BaseLevel];     (void) lambda;     for (i=0;i<n;i++) { -      sample_3d_nearest(ctx, tObj, image, -                        texcoords[i][0], texcoords[i][1], texcoords[i][2], -                        rgba[i]); +      sample_3d_nearest(ctx, tObj, image, texcoords[i], rgba[i]);     }  } @@ -1418,9 +1400,7 @@ sample_linear_3d( GLcontext *ctx, GLuint texUnit,     struct gl_texture_image *image = tObj->Image[tObj->BaseLevel];     (void) lambda;     for (i=0;i<n;i++) { -      sample_3d_linear(ctx, tObj, image, -                       texcoords[i][0], texcoords[i][1], texcoords[i][2], -                       rgba[i]); +      sample_3d_linear(ctx, tObj, image, texcoords[i], rgba[i]);     }  } @@ -1445,40 +1425,26 @@ sample_lambda_3d( GLcontext *ctx, GLuint texUnit,           switch (tObj->MinFilter) {              case GL_NEAREST:                 sample_3d_nearest(ctx, tObj, tObj->Image[tObj->BaseLevel], -                                 texcoords[i][0], texcoords[i][1], -                                 texcoords[i][2], rgba[i]); +                                 texcoords[i], rgba[i]);                 break;              case GL_LINEAR:                 sample_3d_linear(ctx, tObj, tObj->Image[tObj->BaseLevel], -                                texcoords[i][0], texcoords[i][1], -                                texcoords[i][2], rgba[i]); +                                texcoords[i], rgba[i]);                 break;              case GL_NEAREST_MIPMAP_NEAREST: -               sample_3d_nearest_mipmap_nearest(ctx, tObj, -                                                texcoords[i][0], -                                                texcoords[i][1], -                                                texcoords[i][2], +               sample_3d_nearest_mipmap_nearest(ctx, tObj, texcoords[i],                                                  lambda[i], rgba[i]);                 break;              case GL_LINEAR_MIPMAP_NEAREST: -               sample_3d_linear_mipmap_nearest(ctx, tObj, -                                               texcoords[i][0], -                                               texcoords[i][1], -                                               texcoords[i][2], +               sample_3d_linear_mipmap_nearest(ctx, tObj, texcoords[i],                                                 lambda[i], rgba[i]);                 break;              case GL_NEAREST_MIPMAP_LINEAR: -               sample_3d_nearest_mipmap_linear(ctx, tObj, -                                               texcoords[i][0], -                                               texcoords[i][1], -                                               texcoords[i][2], +               sample_3d_nearest_mipmap_linear(ctx, tObj, texcoords[i],                                                 lambda[i], rgba[i]);                 break;              case GL_LINEAR_MIPMAP_LINEAR: -               sample_3d_linear_mipmap_linear(ctx, tObj, -                                              texcoords[i][0], -                                              texcoords[i][1], -                                              texcoords[i][2], +               sample_3d_linear_mipmap_linear(ctx, tObj, texcoords[i],                                                lambda[i], rgba[i]);                 break;              default: @@ -1490,13 +1456,11 @@ sample_lambda_3d( GLcontext *ctx, GLuint texUnit,           switch (tObj->MagFilter) {              case GL_NEAREST:                 sample_3d_nearest(ctx, tObj, tObj->Image[tObj->BaseLevel], -                                 texcoords[i][0], texcoords[i][1], -                                 texcoords[i][2], rgba[i]); +                                 texcoords[i], rgba[i]);                 break;              case GL_LINEAR:                 sample_3d_linear(ctx, tObj, tObj->Image[tObj->BaseLevel], -                                texcoords[i][0], texcoords[i][1], -                                texcoords[i][2], rgba[i]); +                                texcoords[i], rgba[i]);                 break;              default:                 _mesa_problem(NULL, "Bad mag filter in sample_3d_texture"); @@ -1517,8 +1481,7 @@ sample_lambda_3d( GLcontext *ctx, GLuint texUnit,   */  static const struct gl_texture_image **  choose_cube_face(const struct gl_texture_object *texObj, -                 GLfloat rx, GLfloat ry, GLfloat rz, -                 GLfloat *newS, GLfloat *newT) +                 const GLfloat texcoord[4], GLfloat newCoord[4])  {  /*        major axis @@ -1531,6 +1494,9 @@ choose_cube_face(const struct gl_texture_object *texObj,         +rz          TEXTURE_CUBE_MAP_POSITIVE_Z_EXT    +rx    -ry   rz         -rz          TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT    -rx    -ry   rz  */ +   const GLfloat rx = texcoord[0]; +   const GLfloat ry = texcoord[1]; +   const GLfloat rz = texcoord[2];     const struct gl_texture_image **imgArray;     const GLfloat arx = ABSF(rx),   ary = ABSF(ry),   arz = ABSF(rz);     GLfloat sc, tc, ma; @@ -1578,8 +1544,8 @@ choose_cube_face(const struct gl_texture_object *texObj,        }     } -   *newS = ( sc / ma + 1.0F ) * 0.5F; -   *newT = ( tc / ma + 1.0F ) * 0.5F; +   newCoord[0] = ( sc / ma + 1.0F ) * 0.5F; +   newCoord[1] = ( tc / ma + 1.0F ) * 0.5F;     return imgArray;  } @@ -1594,10 +1560,10 @@ sample_nearest_cube(GLcontext *ctx, GLuint texUnit,     (void) lambda;     for (i = 0; i < n; i++) {        const struct gl_texture_image **images; -      GLfloat newS, newT; -      images = choose_cube_face(tObj, texcoords[i][0], texcoords[i][1], texcoords[i][2], &newS, &newT); +      GLfloat newCoord[4]; +      images = choose_cube_face(tObj, texcoords[i], newCoord);        sample_2d_nearest(ctx, tObj, images[tObj->BaseLevel], -                        newS, newT, rgba[i]); +                        newCoord, rgba[i]);     }  } @@ -1612,10 +1578,10 @@ sample_linear_cube(GLcontext *ctx, GLuint texUnit,     (void) lambda;     for (i = 0; i < n; i++) {        const struct gl_texture_image **images; -      GLfloat newS, newT; -      images = choose_cube_face(tObj, texcoords[i][0], texcoords[i][1], texcoords[i][2], &newS, &newT); +      GLfloat newCoord[4]; +      images = choose_cube_face(tObj, texcoords[i], newCoord);        sample_2d_linear(ctx, tObj, images[tObj->BaseLevel], -                       newS, newT, rgba[i]); +                       newCoord, rgba[i]);     }  } @@ -1623,59 +1589,59 @@ sample_linear_cube(GLcontext *ctx, GLuint texUnit,  static void  sample_cube_nearest_mipmap_nearest(GLcontext *ctx,                                     const struct gl_texture_object *tObj, -                                   GLfloat s, GLfloat t, GLfloat u, +                                   const GLfloat texcoord[4],                                     GLfloat lambda, GLchan rgba[4])  {     const struct gl_texture_image **images; -   GLfloat newS, newT; +   GLfloat newCoord[4];     GLint level;     COMPUTE_NEAREST_MIPMAP_LEVEL(tObj, lambda, level); -   images = choose_cube_face(tObj, s, t, u, &newS, &newT); -   sample_2d_nearest(ctx, tObj, images[level], newS, newT, rgba); +   images = choose_cube_face(tObj, texcoord, newCoord); +   sample_2d_nearest(ctx, tObj, images[level], newCoord, rgba);  }  static void  sample_cube_linear_mipmap_nearest(GLcontext *ctx,                                    const struct gl_texture_object *tObj, -                                  GLfloat s, GLfloat t, GLfloat u, +                                  const GLfloat texcoord[4],                                    GLfloat lambda, GLchan rgba[4])  {     const struct gl_texture_image **images; -   GLfloat newS, newT; +   GLfloat newCoord[4];     GLint level;     COMPUTE_NEAREST_MIPMAP_LEVEL(tObj, lambda, level); -   images = choose_cube_face(tObj, s, t, u, &newS, &newT); -   sample_2d_linear(ctx, tObj, images[level], newS, newT, rgba); +   images = choose_cube_face(tObj, texcoord, newCoord); +   sample_2d_linear(ctx, tObj, images[level], newCoord, rgba);  }  static void  sample_cube_nearest_mipmap_linear(GLcontext *ctx,                                    const struct gl_texture_object *tObj, -                                  GLfloat s, GLfloat t, GLfloat u, +                                  const GLfloat texcoord[4],                                    GLfloat lambda, GLchan rgba[4])  {     const struct gl_texture_image **images; -   GLfloat newS, newT; +   GLfloat newCoord[4];     GLint level;     COMPUTE_LINEAR_MIPMAP_LEVEL(tObj, lambda, level); -   images = choose_cube_face(tObj, s, t, u, &newS, &newT); +   images = choose_cube_face(tObj, texcoord, newCoord);     if (level >= tObj->_MaxLevel) { -      sample_2d_nearest(ctx, tObj, images[tObj->_MaxLevel], newS, newT, rgba); +      sample_2d_nearest(ctx, tObj, images[tObj->_MaxLevel], newCoord, rgba);     }     else {        GLchan t0[4], t1[4];  /* texels */        const GLfloat f = FRAC(lambda); -      sample_2d_nearest(ctx, tObj, images[level  ], newS, newT, t0); -      sample_2d_nearest(ctx, tObj, images[level+1], newS, newT, t1); +      sample_2d_nearest(ctx, tObj, images[level  ], newCoord, t0); +      sample_2d_nearest(ctx, tObj, images[level+1], newCoord, t1);        rgba[RCOMP] = (GLchan) INTCAST ((1.0F-f) * t0[RCOMP] + f * t1[RCOMP]);        rgba[GCOMP] = (GLchan) INTCAST ((1.0F-f) * t0[GCOMP] + f * t1[GCOMP]);        rgba[BCOMP] = (GLchan) INTCAST ((1.0F-f) * t0[BCOMP] + f * t1[BCOMP]); @@ -1687,25 +1653,25 @@ sample_cube_nearest_mipmap_linear(GLcontext *ctx,  static void  sample_cube_linear_mipmap_linear(GLcontext *ctx,                                   const struct gl_texture_object *tObj, -                                 GLfloat s, GLfloat t, GLfloat u, +                                 const GLfloat texcoord[4],                                   GLfloat lambda, GLchan rgba[4])  {     const struct gl_texture_image **images; -   GLfloat newS, newT; +   GLfloat newCoord[4];     GLint level;     COMPUTE_LINEAR_MIPMAP_LEVEL(tObj, lambda, level); -   images = choose_cube_face(tObj, s, t, u, &newS, &newT); +   images = choose_cube_face(tObj, texcoord, newCoord);     if (level >= tObj->_MaxLevel) { -      sample_2d_linear(ctx, tObj, images[tObj->_MaxLevel], newS, newT, rgba); +      sample_2d_linear(ctx, tObj, images[tObj->_MaxLevel], newCoord, rgba);     }     else {        GLchan t0[4], t1[4];        const GLfloat f = FRAC(lambda); -      sample_2d_linear(ctx, tObj, images[level  ], newS, newT, t0); -      sample_2d_linear(ctx, tObj, images[level+1], newS, newT, t1); +      sample_2d_linear(ctx, tObj, images[level  ], newCoord, t0); +      sample_2d_linear(ctx, tObj, images[level+1], newCoord, t1);        rgba[RCOMP] = (GLchan) INTCAST ((1.0F-f) * t0[RCOMP] + f * t1[RCOMP]);        rgba[GCOMP] = (GLchan) INTCAST ((1.0F-f) * t0[GCOMP] + f * t1[GCOMP]);        rgba[BCOMP] = (GLchan) INTCAST ((1.0F-f) * t0[BCOMP] + f * t1[BCOMP]); @@ -1730,38 +1696,35 @@ sample_lambda_cube( GLcontext *ctx, GLuint texUnit,              case GL_NEAREST:                 {                    const struct gl_texture_image **images; -                  GLfloat newS, newT; -                  images = choose_cube_face(tObj, texcoords[i][0], -					    texcoords[i][1], texcoords[i][2], -                                            &newS, &newT); +                  GLfloat newCoord[4]; +                  images = choose_cube_face(tObj, texcoords[i], newCoord);                    sample_2d_nearest(ctx, tObj, images[tObj->BaseLevel], -                                    newS, newT, rgba[i]); +                                    newCoord, rgba[i]);                 }                 break;              case GL_LINEAR:                 {                    const struct gl_texture_image **images; -                  GLfloat newS, newT; -                  images = choose_cube_face(tObj, texcoords[i][0], texcoords[i][1], texcoords[i][2], -                                            &newS, &newT); +                  GLfloat newCoord[4]; +                  images = choose_cube_face(tObj, texcoords[i], newCoord);                    sample_2d_linear(ctx, tObj, images[tObj->BaseLevel], -                                   newS, newT, rgba[i]); +                                   newCoord, rgba[i]);                 }                 break;              case GL_NEAREST_MIPMAP_NEAREST: -               sample_cube_nearest_mipmap_nearest(ctx, tObj, texcoords[i][0], texcoords[i][1], texcoords[i][2], +               sample_cube_nearest_mipmap_nearest(ctx, tObj, texcoords[i],                                                    lambda[i], rgba[i]);                 break;              case GL_LINEAR_MIPMAP_NEAREST: -               sample_cube_linear_mipmap_nearest(ctx, tObj, texcoords[i][0], texcoords[i][1], texcoords[i][2], +               sample_cube_linear_mipmap_nearest(ctx, tObj, texcoords[i],                                                   lambda[i], rgba[i]);                 break;              case GL_NEAREST_MIPMAP_LINEAR: -               sample_cube_nearest_mipmap_linear(ctx, tObj, texcoords[i][0], texcoords[i][1], texcoords[i][2], +               sample_cube_nearest_mipmap_linear(ctx, tObj, texcoords[i],                                                   lambda[i], rgba[i]);                 break;              case GL_LINEAR_MIPMAP_LINEAR: -               sample_cube_linear_mipmap_linear(ctx, tObj, texcoords[i][0], texcoords[i][1], texcoords[i][2], +               sample_cube_linear_mipmap_linear(ctx, tObj, texcoords[i],                                                  lambda[i], rgba[i]);                 break;              default: @@ -1771,17 +1734,16 @@ sample_lambda_cube( GLcontext *ctx, GLuint texUnit,        else {           /* magnification */           const struct gl_texture_image **images; -         GLfloat newS, newT; -         images = choose_cube_face(tObj, texcoords[i][0], texcoords[i][1], texcoords[i][2], -                                   &newS, &newT); +         GLfloat newCoord[4]; +         images = choose_cube_face(tObj, texcoords[i], newCoord);           switch (tObj->MagFilter) {              case GL_NEAREST:                 sample_2d_nearest(ctx, tObj, images[tObj->BaseLevel], -                                 newS, newT, rgba[i]); +                                 newCoord, rgba[i]);                 break;              case GL_LINEAR:                 sample_2d_linear(ctx, tObj, images[tObj->BaseLevel], -                                newS, newT, rgba[i]); +                                newCoord, rgba[i]);                 break;              default:                 _mesa_problem(NULL, "Bad mag filter in sample_lambda_cube"); | 
