diff options
Diffstat (limited to 'src/mesa')
| -rw-r--r-- | src/mesa/main/teximage.c | 12 | ||||
| -rw-r--r-- | src/mesa/main/texobj.c | 10 | ||||
| -rw-r--r-- | src/mesa/main/texstate.c | 4 | ||||
| -rw-r--r-- | src/mesa/main/texstore.c | 6 | 
4 files changed, 21 insertions, 11 deletions
| diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index 90f0332237..e10b75b0b3 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -105,7 +105,7 @@ static void PrintTexture(GLcontext *ctx, const struct gl_texture_image *img)  /*   * Compute floor(log_base_2(n)). - * If n <= 0 return -1. + * If n < 0 return -1.   */  static int  logbase2( int n ) @@ -113,9 +113,11 @@ logbase2( int n )     GLint i = 1;     GLint log2 = 0; -   if (n <= 0) { +   if (n < 0)        return -1; -   } + +   if (n == 0) +      return 0;     while ( n > i ) {        i *= 2; @@ -1094,10 +1096,10 @@ texture_error_check( GLcontext *ctx, GLenum target,        return GL_TRUE;     } -   if (width < 1 || height < 1 || depth < 1) { +   if (width < 0 || height < 0 || depth < 0) {        if (!isProxy) {           _mesa_error(ctx, GL_INVALID_VALUE, -                     "glTexImage%dD(width, height or depth < 1)", dimensions); +                     "glTexImage%dD(width, height or depth < 0)", dimensions);        }        return GL_TRUE;     } diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c index 6edb7e6565..08c59a0854 100644 --- a/src/mesa/main/texobj.c +++ b/src/mesa/main/texobj.c @@ -310,6 +310,15 @@ _mesa_test_texobj_completeness( const GLcontext *ctx,        return;     } +   /* Check width/height/depth for zero */ +   if (t->Image[baseLevel]->Width == 0 || +       t->Image[baseLevel]->Height == 0 || +       t->Image[baseLevel]->Depth == 0) { +      incomplete(t, "texture width = 0"); +      t->Complete = GL_FALSE; +      return; +   } +     /* Compute _MaxLevel */     if (t->Target == GL_TEXTURE_1D) {        maxLog2 = t->Image[baseLevel]->WidthLog2; @@ -559,7 +568,6 @@ _mesa_test_texobj_completeness( const GLcontext *ctx,        }        else if (t->Target == GL_TEXTURE_RECTANGLE_NV) {           /* XXX special checking? */ -        }        else {           /* Target = ??? */ diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c index 133b957aa5..95009a23a5 100644 --- a/src/mesa/main/texstate.c +++ b/src/mesa/main/texstate.c @@ -2716,6 +2716,7 @@ update_texture_state( GLcontext *ctx )        struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];        GLuint enableBits; +      texUnit->_Current = NULL;        texUnit->_ReallyEnabled = 0;        texUnit->_GenFlags = 0; @@ -2789,8 +2790,7 @@ update_texture_state( GLcontext *ctx )        }        if (!texUnit->_ReallyEnabled) { -	 texUnit->_Current = NULL; -	 continue; +         continue;        }        if (texUnit->_ReallyEnabled) diff --git a/src/mesa/main/texstore.c b/src/mesa/main/texstore.c index 16dd320e82..5a564fbc15 100644 --- a/src/mesa/main/texstore.c +++ b/src/mesa/main/texstore.c @@ -195,9 +195,9 @@ transfer_teximage(GLcontext *ctx, GLuint dimensions,            texDestFormat == GL_COLOR_INDEX ||            texDestFormat == GL_DEPTH_COMPONENT);     ASSERT(texDestAddr); -   ASSERT(srcWidth >= 1); -   ASSERT(srcHeight >= 1); -   ASSERT(srcDepth >= 1); +   ASSERT(srcWidth >= 0); +   ASSERT(srcHeight >= 0); +   ASSERT(srcDepth >= 0);     ASSERT(dstXoffset >= 0);     ASSERT(dstYoffset >= 0);     ASSERT(dstZoffset >= 0); | 
