[gegl] buffer: add GEGL_BUFFER_NEAREST flag for gegl_buffer_get



commit 34e3db6b6cd7f79eef155465482380fd8e5dfc4a
Author: Øyvind Kolås <pippin gimp org>
Date:   Fri Jan 26 05:09:12 2018 +0100

    buffer: add GEGL_BUFFER_NEAREST flag for gegl_buffer_get
    
    This is a flag that is defined inside - and transmitted along with the
    repeat-mode, this makes the addition both API and ABI compatible.

 gegl/buffer/gegl-buffer-access.c |    5 ++++-
 gegl/gegl-enums.c                |    3 +++
 gegl/gegl-enums.h                |   11 ++++++-----
 perf/Makefile-tests              |    3 ++-
 perf/test-common.h               |    6 +++---
 perf/test-gegl-buffer-access.c   |    2 +-
 6 files changed, 19 insertions(+), 11 deletions(-)
---
diff --git a/gegl/buffer/gegl-buffer-access.c b/gegl/buffer/gegl-buffer-access.c
index 5fedd2c..4ef98a2 100644
--- a/gegl/buffer/gegl-buffer-access.c
+++ b/gegl/buffer/gegl-buffer-access.c
@@ -1891,6 +1891,9 @@ _gegl_buffer_get_unlocked (GeglBuffer          *buffer,
                            gint                 rowstride,
                            GeglAbyssPolicy      repeat_mode)
 {
+  gboolean do_nearest = (repeat_mode & GEGL_BUFFER_NEAREST) != 0;
+  repeat_mode &= 0x7;
+
   if (gegl_cl_is_accelerated ())
     {
       gegl_buffer_cl_cache_flush (buffer, rect);
@@ -2003,7 +2006,7 @@ _gegl_buffer_get_unlocked (GeglBuffer          *buffer,
       buf_width  = x2 - x1;
       buf_height = y2 - y1;
 
-      if (scale <= 1.99)
+      if (!do_nearest && scale <= 1.99)
         {
           buf_width  += 2;
           buf_height += 2;
diff --git a/gegl/gegl-enums.c b/gegl/gegl-enums.c
index 7a06f29..d3086d7 100644
--- a/gegl/gegl-enums.c
+++ b/gegl/gegl-enums.c
@@ -35,6 +35,9 @@ gegl_abyss_policy_get_type (void)
         { GEGL_ABYSS_LOOP,  N_("Loop"),  "loop"  },
         { GEGL_ABYSS_BLACK, N_("Black"), "black" },
         { GEGL_ABYSS_WHITE, N_("White"), "white" },
+        // we do not really want this one introspected/translated,
+        // will this bite us?
+        //{ GEGL_BUFFER_NEAREST, N_("Nearest"), "nearest" },
         { 0, NULL, NULL }
       };
       gint i;
diff --git a/gegl/gegl-enums.h b/gegl/gegl-enums.h
index 25d6fe0..d333627 100644
--- a/gegl/gegl-enums.h
+++ b/gegl/gegl-enums.h
@@ -37,11 +37,12 @@
 G_BEGIN_DECLS
 
 typedef enum {
-  GEGL_ABYSS_NONE,
-  GEGL_ABYSS_CLAMP,
-  GEGL_ABYSS_LOOP,
-  GEGL_ABYSS_BLACK,
-  GEGL_ABYSS_WHITE
+  GEGL_ABYSS_NONE  = 0,
+  GEGL_ABYSS_CLAMP = 1,
+  GEGL_ABYSS_LOOP  = 2,
+  GEGL_ABYSS_BLACK = 3,
+  GEGL_ABYSS_WHITE = 4,
+  GEGL_BUFFER_NEAREST = 32
 } GeglAbyssPolicy;
 
 GType gegl_abyss_policy_get_type (void) G_GNUC_CONST;
diff --git a/perf/Makefile-tests b/perf/Makefile-tests
index aa9b53e..aa023a8 100644
--- a/perf/Makefile-tests
+++ b/perf/Makefile-tests
@@ -1,5 +1,6 @@
 #CFILES = $(wildcard *.c)
-CFILES = test-rotate.c test-scale.c test-unsharpmask.c test-samplers.c test-gegl-buffer-access.c
+#CFILES = test-rotate.c test-scale.c test-unsharpmask.c test-samplers.c test-gegl-buffer-access.c
+CFILES = test-gegl-buffer-access.c
 bins   = $(subst ,,$(CFILES:.c=))
 
 all: $(bins)
diff --git a/perf/test-common.h b/perf/test-common.h
index 66e38e6..8f1eff8 100644
--- a/perf/test-common.h
+++ b/perf/test-common.h
@@ -7,9 +7,9 @@
 #define PERCENTILE 0.75  /* if we want to bias to the better results with
                            more noise, increase this number towards 1.0,
                            like 0.8 */
-#define BAIL_THRESHOLD 0.002
-#define BAIL_COUNT     150
-#define MIN_ITER       20
+#define BAIL_THRESHOLD 0.001
+#define BAIL_COUNT     250
+#define MIN_ITER       500
 
 static long ticks_start;
 
diff --git a/perf/test-gegl-buffer-access.c b/perf/test-gegl-buffer-access.c
index 5e10510..60e764b 100644
--- a/perf/test-gegl-buffer-access.c
+++ b/perf/test-gegl-buffer-access.c
@@ -45,6 +45,7 @@ main (gint    argc,
       g_object_unref (buffer);
      }
   test_end ("gegl_buffer_get 0.333", 1.0 * bound.width * bound.height * ITERATIONS * BPP);
+#endif
   {
 
   test_start ();
@@ -61,7 +62,6 @@ main (gint    argc,
      }
   }
   test_end ("gegl_buffer_get 8bit 0.333", 1.0 * bound.width * bound.height * ITERATIONS * 4);
-#endif
 
   {
 


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