[gegl] buffer: add GEGL_BUFFER_NEAREST flag for gegl_buffer_get
- From: Øyvind Kolås <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] buffer: add GEGL_BUFFER_NEAREST flag for gegl_buffer_get
- Date: Sun, 28 Jan 2018 20:58:36 +0000 (UTC)
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]