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 43cfe185328..0cab0ca3ec1 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 7b61bfadd99..0f320fea6a5 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 f6e14a4d97d..0f086835f7b 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 42acdc8ff60..c364b0b0e84 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) |