diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/mesa/main/mtypes.h | 1 | ||||
| -rw-r--r-- | src/mesa/main/texobj.c | 7 | ||||
| -rw-r--r-- | src/mesa/swrast/s_texfilter.c | 46 | ||||
| -rw-r--r-- | src/mesa/swrast/s_triangle.c | 2 | 
4 files changed, 24 insertions, 32 deletions
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 43cfe18532..0cab0ca3ec 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -1299,7 +1299,6 @@ struct gl_texture_object     GLint _MaxLevel;		/**< actual max mipmap level (q in the spec) */     GLfloat _MaxLambda;		/**< = _MaxLevel - BaseLevel (q - b in spec) */     GLboolean GenerateMipmap;    /**< GL_SGIS_generate_mipmap */ -   GLboolean _IsPowerOfTwo;	/**< Are all image dimensions powers of two? */     GLboolean Complete;		/**< Is texture object complete? */     /** Actual texture images, indexed by [cube face] and [mipmap level] */ diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c index 7b61bfadd9..0f320fea6a 100644 --- a/src/mesa/main/texobj.c +++ b/src/mesa/main/texobj.c @@ -201,7 +201,6 @@ _mesa_copy_texture_object( struct gl_texture_object *dest,     dest->GenerateMipmap = src->GenerateMipmap;     dest->Palette = src->Palette;     dest->Complete = src->Complete; -   dest->_IsPowerOfTwo = src->_IsPowerOfTwo;  } @@ -244,7 +243,6 @@ _mesa_test_texobj_completeness( const GLcontext *ctx,     GLint maxLog2 = 0, maxLevels = 0;     t->Complete = GL_TRUE;  /* be optimistic */ -   t->_IsPowerOfTwo = GL_TRUE;  /* may be set FALSE below */     /* Always need the base level image */     if (!t->Image[0][baseLevel]) { @@ -320,11 +318,6 @@ _mesa_test_texobj_completeness( const GLcontext *ctx,        }     } -   /* check for non power of two */ -   if (!t->Image[0][baseLevel]->_IsPowerOfTwo) { -      t->_IsPowerOfTwo = GL_FALSE; -   } -     /* extra checking for mipmaps */     if (t->MinFilter != GL_NEAREST && t->MinFilter != GL_LINEAR) {        /* diff --git a/src/mesa/swrast/s_texfilter.c b/src/mesa/swrast/s_texfilter.c index f6e14a4d97..0f086835f7 100644 --- a/src/mesa/swrast/s_texfilter.c +++ b/src/mesa/swrast/s_texfilter.c @@ -241,7 +241,7 @@ repeat_remainder(GLint a, GLint b)     switch (wrapMode) {							\     case GL_REPEAT:							\        U = S * SIZE - 0.5F;						\ -      if (tObj->_IsPowerOfTwo) {					\ +      if (img->_IsPowerOfTwo) {						\           I0 = IFLOOR(U) & (SIZE - 1);					\           I1 = (I0 + 1) & (SIZE - 1);					\        }									\ @@ -363,7 +363,7 @@ repeat_remainder(GLint a, GLint b)        /* s limited to [0,1) */						\        /* i limited to [0,size-1] */					\        I = IFLOOR(S * SIZE);						\ -      if (tObj->_IsPowerOfTwo)						\ +      if (img->_IsPowerOfTwo)						\           I &= (SIZE - 1);						\        else								\           I = repeat_remainder(I, SIZE);					\ @@ -1152,7 +1152,6 @@ sample_2d_linear_mipmap_linear_repeat( GLcontext *ctx,     ASSERT(lambda != NULL);     ASSERT(tObj->WrapS == GL_REPEAT);     ASSERT(tObj->WrapT == GL_REPEAT); -   ASSERT(tObj->_IsPowerOfTwo);     for (i = 0; i < n; i++) {        GLint level = linear_mipmap_level(tObj, lambda[i]);        if (level >= tObj->_MaxLevel) { @@ -2239,9 +2238,9 @@ sample_depth_texture( GLcontext *ctx,                        GLchan texel[][4] )  {     const GLint baseLevel = tObj->BaseLevel; -   const struct gl_texture_image *texImage = tObj->Image[0][baseLevel]; -   const GLuint width = texImage->Width; -   const GLuint height = texImage->Height; +   const struct gl_texture_image *img = tObj->Image[0][baseLevel]; +   const GLuint width = img->Width; +   const GLuint height = img->Height;     GLchan ambient;     GLenum function;     GLchan result; @@ -2286,7 +2285,7 @@ sample_depth_texture( GLcontext *ctx,           /* XXX fix for texture rectangle! */           COMPUTE_NEAREST_TEXEL_LOCATION(tObj->WrapS, texcoords[i][0], width, col);           COMPUTE_NEAREST_TEXEL_LOCATION(tObj->WrapT, texcoords[i][1], height, row); -         texImage->FetchTexelf(texImage, col, row, 0, &depthSample); +         img->FetchTexelf(img, col, row, 0, &depthSample);           switch (function) {           case GL_LEQUAL: @@ -2359,11 +2358,11 @@ sample_depth_texture( GLcontext *ctx,           COMPUTE_LINEAR_TEXEL_LOCATIONS(tObj->WrapT, texcoords[i][1], v, height,j0, j1);           useBorderTexel = 0; -         if (texImage->Border) { -            i0 += texImage->Border; -            i1 += texImage->Border; -            j0 += texImage->Border; -            j1 += texImage->Border; +         if (img->Border) { +            i0 += img->Border; +            i1 += img->Border; +            j0 += img->Border; +            j1 += img->Border;           }           else {              if (i0 < 0 || i0 >= (GLint) width)   useBorderTexel |= I0BIT; @@ -2377,25 +2376,25 @@ sample_depth_texture( GLcontext *ctx,              depth00 = 1.0;           }           else { -            texImage->FetchTexelf(texImage, i0, j0, 0, &depth00); +            img->FetchTexelf(img, i0, j0, 0, &depth00);           }           if (useBorderTexel & (I1BIT | J0BIT)) {              depth10 = 1.0;           }           else { -            texImage->FetchTexelf(texImage, i1, j0, 0, &depth10); +            img->FetchTexelf(img, i1, j0, 0, &depth10);           }           if (useBorderTexel & (I0BIT | J1BIT)) {              depth01 = 1.0;           }           else { -            texImage->FetchTexelf(texImage, i0, j1, 0, &depth01); +            img->FetchTexelf(img, i0, j1, 0, &depth01);           }           if (useBorderTexel & (I1BIT | J1BIT)) {              depth11 = 1.0;           }           else { -            texImage->FetchTexelf(texImage, i1, j1, 0, &depth11); +            img->FetchTexelf(img, i1, j1, 0, &depth11);           }           if (0) { @@ -2675,20 +2674,21 @@ _swrast_choose_texture_sample_func( GLcontext *ctx,              return &sample_linear_2d;           }           else { -            GLint baseLevel = t->BaseLevel; +            /* check for a few optimized cases */ +            const struct gl_texture_image *img = t->Image[0][t->BaseLevel];              ASSERT(t->MinFilter == GL_NEAREST);              if (t->WrapS == GL_REPEAT &&                  t->WrapT == GL_REPEAT && -                t->_IsPowerOfTwo && -                t->Image[0][baseLevel]->Border == 0 && -                t->Image[0][baseLevel]->TexFormat->MesaFormat == MESA_FORMAT_RGB) { +                img->_IsPowerOfTwo && +                img->Border == 0 && +                img->TexFormat->MesaFormat == MESA_FORMAT_RGB) {                 return &opt_sample_rgb_2d;              }              else if (t->WrapS == GL_REPEAT &&                       t->WrapT == GL_REPEAT && -                     t->_IsPowerOfTwo && -                     t->Image[0][baseLevel]->Border == 0 && -                     t->Image[0][baseLevel]->TexFormat->MesaFormat == MESA_FORMAT_RGBA) { +                     img->_IsPowerOfTwo && +                     img->Border == 0 && +                     img->TexFormat->MesaFormat == MESA_FORMAT_RGBA) {                 return &opt_sample_rgba_2d;              }              else { diff --git a/src/mesa/swrast/s_triangle.c b/src/mesa/swrast/s_triangle.c index 42acdc8ff6..c364b0b0e8 100644 --- a/src/mesa/swrast/s_triangle.c +++ b/src/mesa/swrast/s_triangle.c @@ -1093,7 +1093,7 @@ _swrast_choose_triangle( GLcontext *ctx )               && ctx->Texture.Unit[0]._ReallyEnabled == TEXTURE_2D_BIT               && texObj2D->WrapS == GL_REPEAT  	     && texObj2D->WrapT == GL_REPEAT -             && texObj2D->_IsPowerOfTwo +             && texImg->_IsPowerOfTwo               && texImg->Border == 0               && texImg->Width == texImg->RowStride               && (format == MESA_FORMAT_RGB || format == MESA_FORMAT_RGBA)  | 
