[gegl] buffer: flush opencl caches before sampling
- From: Øyvind Kolås <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] buffer: flush opencl caches before sampling
- Date: Thu, 19 Jun 2014 05:28:29 +0000 (UTC)
commit 390214ca03ea0c973037a2b84fd77ccb592f093c
Author: Øyvind Kolås <pippin gimp org>
Date: Thu Jun 19 07:18:36 2014 +0200
buffer: flush opencl caches before sampling
gegl/buffer/gegl-sampler.c | 27 +++++++++++++++++++++++++--
1 files changed, 25 insertions(+), 2 deletions(-)
---
diff --git a/gegl/buffer/gegl-sampler.c b/gegl/buffer/gegl-sampler.c
index aeddae9..77ca2a5 100644
--- a/gegl/buffer/gegl-sampler.c
+++ b/gegl/buffer/gegl-sampler.c
@@ -28,9 +28,8 @@
#include "gegl-types-internal.h"
#include "gegl-buffer-types.h"
#include "gegl-buffer.h"
-
#include "gegl-buffer-private.h"
-
+#include "gegl-buffer-cl-cache.h"
#include "gegl-sampler-nearest.h"
#include "gegl-sampler-linear.h"
@@ -135,6 +134,11 @@ gegl_sampler_get (GeglSampler *self,
void *output,
GeglAbyssPolicy repeat_mode)
{
+ if (gegl_cl_is_accelerated ())
+ {
+ GeglRectangle rect={x,y,1,1};
+ gegl_buffer_cl_cache_flush (self->buffer, &rect);
+ }
self->get (self, x, y, scale, output, repeat_mode);
}
@@ -318,6 +322,13 @@ gegl_sampler_get_from_mipmap (GeglSampler *sampler,
const gint maximum_width = GEGL_SAMPLER_MAXIMUM_WIDTH;
const gint maximum_height = GEGL_SAMPLER_MAXIMUM_HEIGHT;
+
+ if (gegl_cl_is_accelerated ())
+ {
+ GeglRectangle rect={x,y,1,1};
+ gegl_buffer_cl_cache_flush (sampler->buffer, &rect);
+ }
+
g_assert (level_no >= 0 && level_no < GEGL_SAMPLER_MIPMAP_LEVELS);
g_assert (level->context_rect.width <= maximum_width);
g_assert (level->context_rect.height <= maximum_height);
@@ -475,6 +486,12 @@ gegl_buffer_sample (GeglBuffer *buffer,
if (!format)
format = buffer->soft_format;
+ if (gegl_cl_is_accelerated ())
+ {
+ GeglRectangle rect = {floorf (x), floorf(y), 1, 1};
+ gegl_buffer_cl_cache_flush (buffer, &rect);
+ }
+
desired_type = gegl_sampler_gtype_from_enum (sampler_type);
/* unset the cached sampler if it dosn't match the needs */
@@ -553,5 +570,11 @@ buffer_contents_changed (GeglBuffer *buffer,
GeglSamplerGetFun gegl_sampler_get_fun (GeglSampler *sampler)
{
+ /* this flushes the buffer in preparation for the use of the sampler,
+ * thus one can consider the handed out sampler function only temporarily
+ * available*/
+ if (gegl_cl_is_accelerated ())
+ gegl_buffer_cl_cache_flush (sampler->buffer, NULL);
return sampler->get;
}
+
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]