Prevent Y-offset from exceeding valid range in texture upload code. This
authorIan Romanick <idr@us.ibm.com>
Thu, 7 Oct 2004 16:39:20 +0000 (16:39 +0000)
committerIan Romanick <idr@us.ibm.com>
Thu, 7 Oct 2004 16:39:20 +0000 (16:39 +0000)
fixes bugzilla #960.

src/mesa/drivers/dri/r200/r200_texmem.c

index b219995c3e2c352c7727b406496ccd57dea61219..bc937ce6cb2f7da7ae98654111b8a28122e3e11f 100644 (file)
@@ -382,6 +382,14 @@ static void uploadSubImage( r200ContextPtr rmesa, r200TexObjPtr t,
    /* copy (x,y,width,height,data) */
    memcpy( &tmp, &t->image[face][hwlevel], sizeof(tmp) );
 
+   /* Adjust the base offset to account for the Y-offset.  This is done,
+    * instead of just letting the Y-offset automatically take care of it,
+    * because it is possible, for very large textures, for the Y-offset
+    * to exceede the [-8192,+8191] range.
+    */
+   tex.offset += tmp.y * 1024;
+   tmp.y = 0;
+    
    LOCK_HARDWARE( rmesa );
    do {
       ret = drmCommandWriteRead( rmesa->dri.fd, DRM_RADEON_TEXTURE,