[gegl] Many fixes in opencl path



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]