[gegl] Many fixes in opencl path
- From: Victor Matheus de Araujo Oliveira <vmaolive src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] Many fixes in opencl path
- Date: Fri, 30 Mar 2012 14:19:10 +0000 (UTC)
commit b84cbdf1826821ec116ecb8b4b5b97e1216e7425
Author: Victor Oliveira <victormatheus gmail com>
Date: Fri Mar 30 11:18:37 2012 -0300
Many fixes in opencl path
gegl/buffer/gegl-buffer-cl-cache.c | 19 +++++++++++--------
gegl/buffer/gegl-buffer-cl-iterator.c | 8 ++++++--
gegl/buffer/gegl-buffer-iterator.c | 2 +-
3 files changed, 18 insertions(+), 11 deletions(-)
---
diff --git a/gegl/buffer/gegl-buffer-cl-cache.c b/gegl/buffer/gegl-buffer-cl-cache.c
index 9c8b298..56b065a 100644
--- a/gegl/buffer/gegl-buffer-cl-cache.c
+++ b/gegl/buffer/gegl-buffer-cl-cache.c
@@ -131,17 +131,20 @@ gegl_buffer_cl_cache_flush2 (GeglTileHandlerCache *cache,
{
cl_err = gegl_clFinish (gegl_cl_get_command_queue ());
if (cl_err != CL_SUCCESS) CL_ERROR;
- }
- g_static_mutex_lock (&cache_mutex);
+ g_static_mutex_lock (&cache_mutex);
- while (cache_entry_find_invalid (&data))
- {
- g_slice_free (CacheEntry, data);
- cache_entries = g_list_remove (cache_entries, data);
- }
+ while (cache_entry_find_invalid (&data))
+ {
+ CacheEntry *entry = data;
+ memset(entry, 0x0, sizeof (CacheEntry));
- g_static_mutex_unlock (&cache_mutex);
+ g_slice_free (CacheEntry, data);
+ cache_entries = g_list_remove (cache_entries, data);
+ }
+
+ g_static_mutex_unlock (&cache_mutex);
+ }
return TRUE;
diff --git a/gegl/buffer/gegl-buffer-cl-iterator.c b/gegl/buffer/gegl-buffer-cl-iterator.c
index dae6c29..eb5bcaa 100644
--- a/gegl/buffer/gegl-buffer-cl-iterator.c
+++ b/gegl/buffer/gegl-buffer-cl-iterator.c
@@ -210,7 +210,7 @@ gegl_buffer_cl_iterator_next (GeglBufferClIterator *iterator, gboolean *err)
|| (i->flags[no] == GEGL_CL_BUFFER_READ
&& (i->area[no][0] > 0 || i->area[no][1] > 0 || i->area[no][2] > 0 || i->area[no][3] > 0)))
{
- gegl_buffer_cl_cache_invalidate (i->buffer[no], &i->rect[no]);
+ gegl_buffer_cl_cache_flush (i->buffer[no], &i->rect[no]);
}
}
}
@@ -365,12 +365,14 @@ gegl_buffer_cl_iterator_next (GeglBufferClIterator *iterator, gboolean *err)
case GEGL_CL_COLOR_EQUAL:
{
- i->tex_buf[no][j] = gegl_buffer_cl_cache_get (i->buffer[no], &i->roi[no][j]);\
+ i->tex_buf[no][j] = gegl_buffer_cl_cache_get (i->buffer[no], &i->roi[no][j]);
if (i->tex_buf[no][j])
i->tex_buf_from_cache [no][j] = TRUE; /* don't free texture from cache */
else
{
+ gegl_buffer_cl_cache_flush (i->buffer[no], &i->roi[no][j]);
+
g_assert (i->tex_buf[no][j] == NULL);
i->tex_buf[no][j] = gegl_clCreateBuffer (gegl_cl_get_context (),
CL_MEM_ALLOC_HOST_PTR | CL_MEM_READ_ONLY,
@@ -407,6 +409,8 @@ gegl_buffer_cl_iterator_next (GeglBufferClIterator *iterator, gboolean *err)
i->tex_buf_from_cache [no][j] = TRUE; /* don't free texture from cache */
else
{
+ gegl_buffer_cl_cache_flush (i->buffer[no], &i->roi[no][j]);
+
g_assert (i->tex_buf[no][j] == NULL);
i->tex_buf[no][j] = gegl_clCreateBuffer (gegl_cl_get_context (),
CL_MEM_ALLOC_HOST_PTR | CL_MEM_READ_ONLY,
diff --git a/gegl/buffer/gegl-buffer-iterator.c b/gegl/buffer/gegl-buffer-iterator.c
index a188d1f..5a08a7e 100644
--- a/gegl/buffer/gegl-buffer-iterator.c
+++ b/gegl/buffer/gegl-buffer-iterator.c
@@ -449,7 +449,7 @@ gegl_buffer_iterator_next (GeglBufferIterator *iterator)
gegl_buffer_lock (i->buffer[no]);
if (gegl_cl_is_accelerated ())
- gegl_buffer_cl_cache_invalidate (i->buffer[no], &i->rect[no]);
+ gegl_buffer_cl_cache_flush (i->buffer[no], &i->rect[no]);
}
}
else
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]