diff options
Diffstat (limited to 'src/mesa')
| -rw-r--r-- | src/mesa/drivers/dri/tdfx/tdfx_tex.c | 47 | 
1 files changed, 27 insertions, 20 deletions
| diff --git a/src/mesa/drivers/dri/tdfx/tdfx_tex.c b/src/mesa/drivers/dri/tdfx/tdfx_tex.c index 771e2bcadb..f9d6c2a657 100644 --- a/src/mesa/drivers/dri/tdfx/tdfx_tex.c +++ b/src/mesa/drivers/dri/tdfx/tdfx_tex.c @@ -956,19 +956,13 @@ tdfxTexImage2D(GLcontext *ctx, GLenum target, GLint level,      if (mml->width != width || mml->height != height) {          /* rescale the image to overcome 1:8 aspect limitation */          GLvoid *tempImage; +        /* allocate temporary image */          tempImage = MALLOC(width * height * texelBytes);          if (!tempImage) {              _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage2D");              return;          } -        /* unpack image, apply transfer ops and store in tempImage */ -        texImage->TexFormat->StoreImage(ctx, 2, texImage->Format, -                                        texImage->TexFormat, tempImage, -                                        0, 0, 0, /* dstX/Y/Zoffset */ -                                        width * texelBytes, /* dstRowStride */ -                                        0, /* dstImageStride */ -                                        width, height, 1, -                                        format, type, pixels, packing); +        /* allocate texture memory */          assert(!texImage->Data);          texImage->Data = MESA_PBUFFER_ALLOC(mml->width * mml->height * texelBytes);          if (!texImage->Data) { @@ -976,11 +970,22 @@ tdfxTexImage2D(GLcontext *ctx, GLenum target, GLint level,              FREE(tempImage);              return;          } -        _mesa_rescale_teximage2d(texelBytes, -                                 mml->width * texelBytes, /* dst stride */ -                                 width, height, -                                 mml->width, mml->height, -                                 tempImage /*src*/, texImage->Data /*dst*/ ); +        if (pixels) { +           /* unpack image, apply transfer ops and store in tempImage */ +           texImage->TexFormat->StoreImage(ctx, 2, texImage->Format, +                                           texImage->TexFormat, tempImage, +                                           0, 0, 0, /* dstX/Y/Zoffset */ +                                           width * texelBytes, /* dstRowStride */ +                                           0, /* dstImageStride */ +                                           width, height, 1, +                                           format, type, pixels, packing); +           /* rescale */ +           _mesa_rescale_teximage2d(texelBytes, +                                    mml->width * texelBytes, /* dst stride */ +                                    width, height, +                                    mml->width, mml->height, +                                    tempImage /*src*/, texImage->Data /*dst*/ ); +        }          FREE(tempImage);      }      else { @@ -992,13 +997,15 @@ tdfxTexImage2D(GLcontext *ctx, GLenum target, GLint level,            return;        }        /* unpack image, apply transfer ops and store in texImage->Data */ -      texImage->TexFormat->StoreImage(ctx, 2, texImage->Format, -                                    texImage->TexFormat, texImage->Data, -                                    0, 0, 0, /* dstX/Y/Zoffset */ -                                    width * texelBytes, /* dstRowStride */ -                                    0, /* dstImageStride */ -                                    width, height, 1, -                                    format, type, pixels, packing); +      if (pixels) { +         texImage->TexFormat->StoreImage(ctx, 2, texImage->Format, +                                       texImage->TexFormat, texImage->Data, +                                       0, 0, 0, /* dstX/Y/Zoffset */ +                                       width * texelBytes, /* dstRowStride */ +                                       0, /* dstImageStride */ +                                       width, height, 1, +                                       format, type, pixels, packing); +      }      }      RevalidateTexture(ctx, texObj); | 
