Index: alg/gdalwarpoperation.cpp
===================================================================
--- alg/gdalwarpoperation.cpp   (revision 14052)
+++ alg/gdalwarpoperation.cpp   (working copy)
@@ -583,6 +583,19 @@
  * @return CE_None on success or CE_Failure if an error occurs.
  */

+struct WarpChunk {
+    int dx, dy, dsx, dsy;
+    int sx, sy, ssx, ssy;
+};
+
+bool OrderWarpChunk(const WarpChunk& a, const WarpChunk &b) {
+    if (a.dy < b.dy) return true;
+    else if (a.dy > b.dy) return false;
+    else if (a.dx < b.dx) return true;
+    else if (a.dx > b.dx) return false;
+    else return false;
+}
+
 CPLErr GDALWarpOperation::ChunkAndWarpImage(
     int nDstXOff, int nDstYOff,  int nDstXSize, int nDstYSize )

@@ -592,6 +605,7 @@
 /* -------------------------------------------------------------------- */
     WipeChunkList();
     CollectChunkList( nDstXOff, nDstYOff, nDstXSize, nDstYSize );
+    std::sort(reinterpret_cast<WarpChunk *>(panChunkList), reinterpret_cast<WarpChunk *>(panChunkList) + nChunkListCount, OrderWarpChunk);

 /* -------------------------------------------------------------------- */
 /*      Total up output pixels to process.                              */

