[gegl] buffer: make mipmap tests pass by default



commit 3da03808a3e47ad8ec50e41ed53f3785d7217361
Author: Øyvind Kolås <pippin gimp org>
Date:   Mon Feb 6 20:17:11 2017 +0100

    buffer: make mipmap tests pass by default
    
    a subset of operations might now be able to have mipmap rendering accelerated
    previews.

 gegl/buffer/gegl-buffer-access.c            |    8 +++---
 gegl/buffer/gegl-buffer-iterator.c          |   28 +++++++++++++++---
 tests/buffer/reference/mipmap_iterator.buf  |   12 ++++----
 tests/buffer/reference/mipmap_iterator2.buf |   32 +++++++++++-----------
 tests/buffer/reference/mipmap_sampler.buf   |   40 +++++++++++++-------------
 tests/mipmap/invert-crop-reference.png      |  Bin 12971 -> 12734 bytes
 tests/mipmap/invert-crop.sh                 |    2 +-
 tests/mipmap/invert-reference.png           |  Bin 60760 -> 59900 bytes
 tests/mipmap/invert.sh                      |    8 +++---
 tests/mipmap/unsharp-crop-reference.png     |  Bin 17774 -> 17500 bytes
 tests/mipmap/unsharp-crop.sh                |    2 +-
 tests/mipmap/unsharp-reference.png          |  Bin 86254 -> 87354 bytes
 tests/mipmap/unsharp.sh                     |    2 +-
 13 files changed, 76 insertions(+), 58 deletions(-)
---
diff --git a/gegl/buffer/gegl-buffer-access.c b/gegl/buffer/gegl-buffer-access.c
index 86e55c9..1f50399 100644
--- a/gegl/buffer/gegl-buffer-access.c
+++ b/gegl/buffer/gegl-buffer-access.c
@@ -399,8 +399,8 @@ gegl_buffer_iterate_write (GeglBuffer          *buffer,
           else
             pixels = tile_width - offsetx;
 
-          index_x = gegl_tile_indice (tiledx, tile_width, level);
-          index_y = gegl_tile_indice (tiledy, tile_height, level);
+          index_x = gegl_tile_indice (tiledx, tile_width, 0);
+          index_y = gegl_tile_indice (tiledy, tile_height, 0);
 
           tile = gegl_buffer_get_tile (buffer, index_x, index_y, level);
 
@@ -968,8 +968,8 @@ gegl_buffer_iterate_read_abyss_loop (GeglBuffer          *buffer,
   gint          origin_x;
 
   /* Loop abyss works like iterating over a grid of tiles the size of the abyss */
-  gint loop_chunk_ix = gegl_tile_indice (roi->x - abyss->x, abyss->width, level);
-  gint loop_chunk_iy = gegl_tile_indice (roi->y - abyss->y, abyss->height, level);
+  gint loop_chunk_ix = gegl_tile_indice (roi->x - abyss->x, abyss->width, 0);
+  gint loop_chunk_iy = gegl_tile_indice (roi->y - abyss->y, abyss->height, 0);
 
   current_roi.x = loop_chunk_ix * abyss->width  + abyss->x;
   current_roi.y = loop_chunk_iy * abyss->height + abyss->y;
diff --git a/gegl/buffer/gegl-buffer-iterator.c b/gegl/buffer/gegl-buffer-iterator.c
index 6d40f47..c1b56f5 100644
--- a/gegl/buffer/gegl-buffer-iterator.c
+++ b/gegl/buffer/gegl-buffer-iterator.c
@@ -122,10 +122,22 @@ gegl_buffer_iterator_add (GeglBufferIterator  *iter,
                           GeglAccessMode       access_mode,
                           GeglAbyssPolicy      abyss_policy)
 {
+  GeglRectangle roi2;
   GeglBufferIteratorPriv *priv = iter->priv;
   int                     index;
   SubIterState           *sub;
-  level = 0;
+
+  //level = 0; // XXX - this disables mipmapping for iteration while it
+             //       is known to be broken
+
+  if (level)
+  {
+    roi2.x = roi->x >> level;
+    roi2.y = roi->y >> level;
+    roi2.width = roi->width >> level;
+    roi2.height  = roi->height >> level;
+    roi = &roi2;
+  }
 
   g_return_val_if_fail (priv->num_buffers < GEGL_BUFFER_MAX_ITERATORS, 0);
 
@@ -188,8 +200,13 @@ release_tile (GeglBufferIterator *iter,
     {
       if (sub->access_mode & GEGL_ACCESS_WRITE)
         {
+          GeglRectangle roi = {sub->real_roi.x << sub->level,
+                               sub->real_roi.y << sub->level,
+                               sub->real_roi.width << sub->level,
+                               sub->real_roi.height << sub->level};
+
           gegl_buffer_set_unlocked_no_notify (sub->buffer,
-                                              &sub->real_roi,
+                                              &roi,
                                               sub->level,
                                               sub->format,
                                               sub->real_data,
@@ -220,6 +237,7 @@ retile_subs (GeglBufferIterator *iter,
   GeglBufferIteratorPriv *priv = iter->priv;
   GeglRectangle real_roi;
   int index;
+  int level = priv->sub_iter[0].level;
 
   int shift_x = priv->origin_tile.x;
   int shift_y = priv->origin_tile.y;
@@ -317,8 +335,8 @@ get_tile (GeglBufferIterator *iter,
       int tile_width  = buf->tile_width;
       int tile_height = buf->tile_height;
 
-      int tile_x = gegl_tile_indice (iter->roi[index].x + shift_x, tile_width, sub->level);
-      int tile_y = gegl_tile_indice (iter->roi[index].y + shift_y, tile_height, sub->level);
+      int tile_x = gegl_tile_indice (iter->roi[index].x + shift_x, tile_width, 0);
+      int tile_y = gegl_tile_indice (iter->roi[index].y + shift_y, tile_height, 0);
 
       sub->current_tile = gegl_buffer_get_tile (buf, tile_x, tile_y, sub->level);
 
@@ -371,7 +389,7 @@ needs_indirect_read (GeglBufferIterator *iter,
 {
   GeglBufferIteratorPriv *priv = iter->priv;
   SubIterState           *sub  = &priv->sub_iter[index];
-
+  
   if (sub->access_mode & GEGL_ITERATOR_INCOMPATIBLE)
     return TRUE;
 
diff --git a/tests/buffer/reference/mipmap_iterator.buf b/tests/buffer/reference/mipmap_iterator.buf
index 01377cf..8b1b573 100644
--- a/tests/buffer/reference/mipmap_iterator.buf
+++ b/tests/buffer/reference/mipmap_iterator.buf
@@ -48,12 +48,12 @@ Test: mipmap_iterator
 ▌                    ▐
 ▌                    ▐
 ▌░░░░░░░░░░░░░░░░░░░░▐
-▌░░░░    ░░░░░░░░░░░░▐
-▌░░░░    ░░░░░░░░░░░░▐
-▌░░░░    ░░░░░░░░░░░░▐
-▌░░░░    ░░░░░░░░░░░░▐
-▌▒▒▒▒    ▒▒▒▒▒▒▒▒▒▒▒▒▐
-▌▒▒▒▒    ▒▒▒▒▒▒▒▒▒▒▒▒▐
+▌░░░░░░░░░░░░░░░░░░░░▐
+▌░░░░░░░░░░░░░░░░░░░░▐
+▌░░░░░░░░░░░░░░░░░░░░▐
+▌░░░░░░░░░░░░░░░░░░░░▐
+▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
+▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
 ▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
 ▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
 ▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
diff --git a/tests/buffer/reference/mipmap_iterator2.buf b/tests/buffer/reference/mipmap_iterator2.buf
index 8f65cad..c3168e0 100644
--- a/tests/buffer/reference/mipmap_iterator2.buf
+++ b/tests/buffer/reference/mipmap_iterator2.buf
@@ -4,17 +4,17 @@ Test: mipmap_iterator2
 ▌                    ▐
 ▌                    ▐
 ▌░░░░░░░░░░░░░░░░░░░░▐
-▌░░░░▓▓▓▓▓▓▓▓▓░░░░░░░▐
-▌░░░░▓▓▓▓▓▓▓▓▓░░░░░░░▐
-▌░░░░▓▓▓▓▓▓▓▓▓░░░░░░░▐
-▌░░░░▓▓▓▓▓▓▓▓▓░░░░░░░▐
-▌▒▒▒▒█████████▒▒▒▒▒▒▒▐
-▌▒▒▒▒█████████▒▒▒▒▒▒▒▐
-▌▒▒▒▒█████████▒▒▒▒▒▒▒▐
-▌▒▒▒▒█████████▒▒▒▒▒▒▒▐
-▌▒▒▒▒█████████▒▒▒▒▒▒▒▐
-▌▓▓▓▓█████████▓▓▓▓▓▓▓▐
-▌▓▓▓▓█████████▓▓▓▓▓▓▓▐
+▌░░░░░░░░░░░░░░░░░░░░▐
+▌░░░░░░░░░░░░░░░░░░░░▐
+▌░░░░░░░░░░░░░░░░░░░░▐
+▌░░░░░░░░░░░░░░░░░░░░▐
+▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
+▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
+▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
+▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
+▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
+▌▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▐
+▌▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▐
 ▌▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▐
 ▌▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▐
 ▌▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▐
@@ -24,13 +24,13 @@ Test: mipmap_iterator2
 ▛▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▜
 ▌                    ▐
 ▌░░░░░░░░░░          ▐
-▌░░▓▓▓▓▒░░░          ▐
-▌░░▓▓▓▓▒░░░          ▐
-▌▒▒████▓▒▒▒          ▐
-▌▒▒████▓▒▒▒          ▐
-▌▓▓█████▓▓▓          ▐
+▌░░▓▓▓▓░░░░          ▐
+▌░░▓▓▓▓░░░░          ▐
+▌▒▒████▒▒▒▒          ▐
+▌▒▒████▒▒▒▒          ▐
 ▌▓▓████▓▓▓▓          ▐
 ▌▓▓▓▓▓▓▓▓▓▓          ▐
+▌▓▓▓▓▓▓▓▓▓▓          ▐
 ▌██████████          ▐
 ▌                    ▐
 ▌                    ▐
diff --git a/tests/buffer/reference/mipmap_sampler.buf b/tests/buffer/reference/mipmap_sampler.buf
index e74f47a..d57724d 100644
--- a/tests/buffer/reference/mipmap_sampler.buf
+++ b/tests/buffer/reference/mipmap_sampler.buf
@@ -1,31 +1,31 @@
 Test: mipmap_sampler
 ▛▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▜
-▌  ░░░░▒▒▒▒▓▓▓▓██    ▐
-▌  ░░░░▒▒▒▒▓▓▓▓██    ▐
-▌  ░░░░▒▒▒▒▓▓▓▓██    ▐
-▌  ░░░░▒▒▒▒▓▓▓▓██    ▐
-▌  ░░░░▒▒▒▒▓▓▓▓██    ▐
-▌  ░░░░▒▒▒▒▓▓▓▓██    ▐
-▌  ░░░░▒▒▒▒▓▓▓▓██    ▐
-▌  ░░░░▒▒▒▒▓▓▓▓██    ▐
-▌  ░░░░▒▒▒▒▓▓▓▓██    ▐
-▌  ░░░░▒▒▒▒▓▓▓▓██    ▐
-▌  ░░░░▒▒▒▒▓▓▓▓██    ▐
-▌  ░░░░▒▒▒▒▓▓▓▓██    ▐
-▌  ░░░░▒▒▒▒▓▓▓▓██    ▐
-▌  ░░░░▒▒▒▒▓▓▓▓██    ▐
-▌  ░░░░▒▒▒▒▓▓▓▓██    ▐
-▌  ░░░░▒▒▒▒▓▓▓▓██    ▐
+▌                    ▐
+▌                    ▐
+▌                    ▐
+▌                    ▐
+▌                    ▐
+▌                    ▐
+▌                    ▐
+▌                    ▐
+▌                    ▐
+▌                    ▐
+▌                    ▐
+▌                    ▐
+▌                    ▐
+▌                    ▐
+▌                    ▐
+▌                    ▐
 ▌                    ▐
 ▌                    ▐
 ▌                    ▐
 ▌                    ▐
 ▙▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▟
-4.000000,5.000000 : 0.281250
-6.000000,4.000000 : 0.406250
-8.000000,10.000000 : 0.531250
+4.000000,5.000000 : 0.250000
+6.000000,4.000000 : 0.375000
+8.000000,10.000000 : 0.500000
 ▛▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▜
-▌ ░░▒▒▓▓█            ▐
+▌                    ▐
 ▌ ░░▒▒▓▓█            ▐
 ▌ ░░▒▒▓▓█            ▐
 ▌ ░░▒▒▓▓█            ▐
diff --git a/tests/mipmap/invert-crop-reference.png b/tests/mipmap/invert-crop-reference.png
index 88cc211..0d22c8e 100644
Binary files a/tests/mipmap/invert-crop-reference.png and b/tests/mipmap/invert-crop-reference.png differ
diff --git a/tests/mipmap/invert-crop.sh b/tests/mipmap/invert-crop.sh
index 7c0bc10..c2b5d84 100755
--- a/tests/mipmap/invert-crop.sh
+++ b/tests/mipmap/invert-crop.sh
@@ -8,7 +8,7 @@ if [ ! -f $abs_top_builddir/bin/gegl ]; then
   echo "Skipping test-invert-crop due to lack of gegl executable"
   exit 77
 else
-  GEGL_PATH=$abs_top_builddir/operations GEGL_USE_OPENCL=no GEGL_MIPMAP_RENDERING=1 
$abs_top_builddir/bin/gegl                                       \
+  GEGL_TILE_SIZE=8x8 GEGL_PATH=$abs_top_builddir/operations GEGL_USE_OPENCL=no GEGL_MIPMAP_RENDERING=1 
$abs_top_builddir/bin/gegl                                       \
           -s 0.33 $abs_top_srcdir/tests/compositions/data/car-stack.png -o      \
           $abs_top_builddir/tests/mipmap/invert-crop-output.png           \
           -- invert crop x=147 y=66 width=200 height=200 \
diff --git a/tests/mipmap/invert-reference.png b/tests/mipmap/invert-reference.png
index 21d85b4..8e17eca 100644
Binary files a/tests/mipmap/invert-reference.png and b/tests/mipmap/invert-reference.png differ
diff --git a/tests/mipmap/invert.sh b/tests/mipmap/invert.sh
index 31a761a..1c0a940 100755
--- a/tests/mipmap/invert.sh
+++ b/tests/mipmap/invert.sh
@@ -8,7 +8,7 @@ if [ ! -f $abs_top_builddir/bin/gegl ]; then
   echo "Skipping invert due to lack of gegl executable"
   exit 77
 else
-  GEGL_PATH=$abs_top_builddir/operations GEGL_USE_OPENCL=no GEGL_MIPMAP_RENDERING=1 
$abs_top_builddir/bin/gegl                                       \
+  GEGL_TILE_SIZE=8x8 GEGL_PATH=$abs_top_builddir/operations GEGL_USE_OPENCL=no GEGL_MIPMAP_RENDERING=1 
$abs_top_builddir/bin/gegl                                       \
           -s 0.33 $abs_top_srcdir/tests/compositions/data/car-stack.png -o      \
           $abs_top_builddir/tests/mipmap/invert-output.png           \
           -- invert \
@@ -16,9 +16,9 @@ else
           $abs_top_srcdir/tests/mipmap/invert-reference.png \
           $abs_top_builddir/tests/mipmap/invert-output.png 10.0
   failure=$?
-  if [ $failure -eq 0 ]; then
-    rm -f $abs_top_builddir/tests/mipmap/invert-output.png
-  fi
+  #if [ $failure -eq 0 ]; then
+  #  rm -f $abs_top_builddir/tests/mipmap/invert-output.png
+  #fi
 fi
 
 exit $failure
diff --git a/tests/mipmap/unsharp-crop-reference.png b/tests/mipmap/unsharp-crop-reference.png
index 206059e..669695a 100644
Binary files a/tests/mipmap/unsharp-crop-reference.png and b/tests/mipmap/unsharp-crop-reference.png differ
diff --git a/tests/mipmap/unsharp-crop.sh b/tests/mipmap/unsharp-crop.sh
index 0c1f2b0..f4568e5 100755
--- a/tests/mipmap/unsharp-crop.sh
+++ b/tests/mipmap/unsharp-crop.sh
@@ -8,7 +8,7 @@ if [ ! -f $abs_top_builddir/bin/gegl ]; then
   echo "Skipping test-unsharp-crop due to lack of gegl executable"
   exit 77
 else
-  GEGL_PATH=$abs_top_builddir/operations GEGL_USE_OPENCL=no GEGL_MIPMAP_RENDERING=1 
$abs_top_builddir/bin/gegl                                       \
+  GEGL_TILE_SIZE=8x8 GEGL_PATH=$abs_top_builddir/operations GEGL_USE_OPENCL=no GEGL_MIPMAP_RENDERING=1 
$abs_top_builddir/bin/gegl                                       \
           -s 0.33 $abs_top_srcdir/tests/compositions/data/car-stack.png -o      \
           $abs_top_builddir/tests/mipmap/unsharp-crop-output.png           \
           -- unsharp-mask scale=10.0 crop x=147 y=66 width=200 height=200 \
diff --git a/tests/mipmap/unsharp-reference.png b/tests/mipmap/unsharp-reference.png
index e5e5df9..d3435d5 100644
Binary files a/tests/mipmap/unsharp-reference.png and b/tests/mipmap/unsharp-reference.png differ
diff --git a/tests/mipmap/unsharp.sh b/tests/mipmap/unsharp.sh
index 366b331..6f38b42 100755
--- a/tests/mipmap/unsharp.sh
+++ b/tests/mipmap/unsharp.sh
@@ -8,7 +8,7 @@ if [ ! -f $abs_top_builddir/bin/gegl ]; then
   echo "Skipping test-unsharp due to lack of gegl executable"
   exit 77
 else
-  GEGL_PATH=$abs_top_builddir/operations GEGL_USE_OPENCL=no GEGL_MIPMAP_RENDERING=1 
$abs_top_builddir/bin/gegl                                       \
+  GEGL_TILE_SIZE=8x8 GEGL_PATH=$abs_top_builddir/operations GEGL_USE_OPENCL=no GEGL_MIPMAP_RENDERING=1 
$abs_top_builddir/bin/gegl                                       \
           -s 0.33 $abs_top_srcdir/tests/compositions/data/car-stack.png -o      \
           $abs_top_builddir/tests/mipmap/unsharp-output.png           \
           -- unsharp-mask scale=10.0  \


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]