Since we memcpy texture data synchronously to the card, idle the engine before
authorEric Anholt <anholt@FreeBSD.org>
Mon, 24 Oct 2005 10:24:23 +0000 (10:24 +0000)
committerEric Anholt <anholt@FreeBSD.org>
Mon, 24 Oct 2005 10:24:23 +0000 (10:24 +0000)
we start copying.  I haven't seen it go wrong before, but I'm pretty sure this
fix is correct.

src/mesa/drivers/dri/sis/sis_tex.c

index e2b7e93b807657f41569fc5dba723af589703702..a97bed833a224c561e798ce8245c90bd54b5e6c4 100644 (file)
@@ -380,6 +380,7 @@ static void sisTexImage1D( GLcontext *ctx, GLenum target, GLint level,
    sisAllocTexImage(smesa, t, level, texImage);
 
    /* Upload the texture */
+   WaitEngIdle(smesa);
    memcpy(t->image[level].Data, texImage->Data, t->image[level].size);
    
    if (smesa->PrevTexFormat[ctx->Texture.CurrentUnit] != t->format)
@@ -422,6 +423,7 @@ static void sisTexSubImage1D( GLcontext *ctx,
    sisAllocTexImage(smesa, t, level, texImage);
 
    /* Upload the texture */
+   WaitEngIdle(smesa);
    texelBytes = texImage->TexFormat->TexelBytes;
 
    copySize = width * texelBytes;
@@ -465,6 +467,7 @@ static void sisTexImage2D( GLcontext *ctx, GLenum target, GLint level,
    sisAllocTexImage(smesa, t, level, texImage);
 
    /* Upload the texture */
+   WaitEngIdle(smesa);
    memcpy(t->image[level].Data, texImage->Data, t->image[level].size);
    
    if (smesa->PrevTexFormat[ctx->Texture.CurrentUnit] != t->format)
@@ -508,6 +511,7 @@ static void sisTexSubImage2D( GLcontext *ctx,
    sisAllocTexImage(smesa, t, level, texImage);
 
    /* Upload the texture */
+   WaitEngIdle(smesa);
    texelBytes = texImage->TexFormat->TexelBytes;
 
    copySize = width * texelBytes;