[gegl/gsoc2009-gpu] GeglBufferIterator: Introduce new buffer access methods



commit 3cd7678e58fe779b55a934e1c3a580c782cb4026
Author: Jerson Michael Perpetua <jersonperpetua gmail com>
Date:   Sun Jul 5 05:43:54 2009 +0800

    GeglBufferIterator: Introduce new buffer access methods
    
    Introduce new buffer access methods:
    GEGL_BUFFER_GPU_READ
    GEGL_BUFFER_GPU_WRITE
    GEGL_BUFFER_GPU_READWRITE
    GEGL_BUFFER_ALL_READ
    GEGL_BUFFER_ALL_WRITE
    GEGL_BUFFER_ALL
    
    Add a (currently, unused) gpu_data member to GeglBufferIterator.

 gegl/buffer/gegl-buffer-iterator.c |   60 ++++++++++++++++++------------------
 gegl/buffer/gegl-buffer-iterator.h |   29 ++++++++++++-----
 2 files changed, 50 insertions(+), 39 deletions(-)
---
diff --git a/gegl/buffer/gegl-buffer-iterator.c b/gegl/buffer/gegl-buffer-iterator.c
index 77134ba..1c09018 100644
--- a/gegl/buffer/gegl-buffer-iterator.c
+++ b/gegl/buffer/gegl-buffer-iterator.c
@@ -35,49 +35,49 @@
 
 typedef struct _GeglBufferTileIterator
 {
-  GeglBuffer    *buffer;
-  GeglRectangle  roi;     /* the rectangular region we're iterating over */
-  GeglTile      *tile;    /* current tile */
-  gpointer       data;    /* current tile's data */
-
-  gint           col;     /* the column currently provided for */
-  gint           row;     /* the row currently provided for */
-  gboolean       write;
-  GeglRectangle  subrect;    /* the subrect that intersected roi */
-  gpointer       sub_data;   /* pointer to the subdata as indicated by subrect */
-
-  gint           next_col; /* used internally */
-  gint           next_row; /* used internally */
-  gint           max_size; /* maximum data buffer needed, in bytes */
-  GeglRectangle  roi2;     /* the rectangular subregion of data
-                            * in the buffer represented by this scan.
-                            */
+  GeglBuffer   *buffer;
+  GeglRectangle roi;      /* the rectangular region we're iterating over */
+  GeglTile     *tile;     /* current tile */
+  gpointer      data;     /* current tile's data */
+
+  gint          col;      /* the column currently provided for */
+  gint          row;      /* the row currently provided for */
+  gboolean      write;
+  GeglRectangle subrect;  /* the subrect that intersected roi */
+  gpointer      sub_data; /* pointer to the subdata as indicated by subrect */
+
+  gint          next_col; /* used internally */
+  gint          next_row; /* used internally */
+  gint          max_size; /* maximum data buffer needed, in bytes */
+  GeglRectangle roi2;     /* the rectangular subregion of data
+                           * in the buffer represented by this scan.
+                           */
 } _GeglBufferTileIterator;
 
-#define GEGL_BUFFER_SCAN_COMPATIBLE   128   /* should be integrated into enum */
-#define GEGL_BUFFER_FORMAT_COMPATIBLE 256   /* should be integrated into enum */
+#define GEGL_BUFFER_SCAN_COMPATIBLE   128 /* should be integrated into enum */
+#define GEGL_BUFFER_FORMAT_COMPATIBLE 256 /* should be integrated into enum */
 
 #define DEBUG_DIRECT 0
 
 typedef struct _GeglBufferIterator
 {
   /* current region of interest */
-  gint          length;             /* length of current data in pixels */
-  gpointer      data[GEGL_BUFFER_MAX_ITERABLES]; 
-  GeglRectangle roi [GEGL_BUFFER_MAX_ITERABLES];                 
-
-  /* the following is private: */
-  gint           iterators;
-  gint           iteration_no;
-  GeglRectangle  rect       [GEGL_BUFFER_MAX_ITERABLES];
-  const Babl    *format     [GEGL_BUFFER_MAX_ITERABLES];
-  GeglBuffer    *buffer     [GEGL_BUFFER_MAX_ITERABLES];
-  guint          flags      [GEGL_BUFFER_MAX_ITERABLES];
-  gpointer       buf        [GEGL_BUFFER_MAX_ITERABLES]; 
-  _GeglBufferTileIterator  i[GEGL_BUFFER_MAX_ITERABLES]; 
+  gint            length; /* length of current data in pixels */
+  gpointer        data    [GEGL_BUFFER_MAX_ITERABLES];
+  GeglGpuTexture *gpu_data[GEGL_BUFFER_MAX_ITERABLES];
+  GeglRectangle   roi     [GEGL_BUFFER_MAX_ITERABLES];
+
+  /* the following is private */
+  gint                    iterators;
+  gint                    iteration_no;
+  GeglRectangle           rect  [GEGL_BUFFER_MAX_ITERABLES];
+  const Babl             *format[GEGL_BUFFER_MAX_ITERABLES];
+  GeglBuffer             *buffer[GEGL_BUFFER_MAX_ITERABLES];
+  guint                   flags [GEGL_BUFFER_MAX_ITERABLES];
+  gpointer                buf   [GEGL_BUFFER_MAX_ITERABLES]; 
+  _GeglBufferTileIterator i     [GEGL_BUFFER_MAX_ITERABLES]; 
 } _GeglBufferIterator;
 
-
 static void      gegl_buffer_tile_iterator_init (_GeglBufferTileIterator *i,
                                                  GeglBuffer              *buffer,
                                                  GeglRectangle            roi,
diff --git a/gegl/buffer/gegl-buffer-iterator.h b/gegl/buffer/gegl-buffer-iterator.h
index d922de0..3cd5583 100644
--- a/gegl/buffer/gegl-buffer-iterator.h
+++ b/gegl/buffer/gegl-buffer-iterator.h
@@ -21,27 +21,38 @@
 #define __GEGL_BUFFER_ITERATOR_H__
 
 #include "gegl-buffer.h"
+#include "gegl-gpu-types.h"
 
 #define GEGL_BUFFER_MAX_ITERABLES 6
 
-#define GEGL_BUFFER_READ      1
-#define GEGL_BUFFER_WRITE     2
-#define GEGL_BUFFER_READWRITE (GEGL_BUFFER_READ|GEGL_BUFFER_WRITE)
+#define GEGL_BUFFER_READ           1
+#define GEGL_BUFFER_WRITE         (1 << 1)
+#define GEGL_BUFFER_READWRITE     (GEGL_BUFFER_READ | GEGL_BUFFER_WRITE)
+#define GEGL_BUFFER_GPU_READ      (1 << 2)
+#define GEGL_BUFFER_GPU_WRITE     (1 << 3)
+#define GEGL_BUFFER_GPU_READWRITE (GEGL_BUFFER_GPU_READ | GEGL_BUFFER_GPU_WRITE)
+#define GEGL_BUFFER_ALL_READ      (GEGL_BUFFER_READ | GEGL_BUFFER_GPU_READ)
+#define GEGL_BUFFER_ALL_WRITE     (GEGL_BUFFER_WRITE | GEGL_BUFFER_GPU_WRITE)
+#define GEGL_BUFFER_ALL           (GEGL_BUFFER_READ_ALL | GEGL_BUFFER_WRITE_ALL)
 
 typedef struct GeglBufferIterator
 {
-  gint          length;
-  gpointer      data[GEGL_BUFFER_MAX_ITERABLES];
-  GeglRectangle roi[GEGL_BUFFER_MAX_ITERABLES];
+  gint            length;
+  gpointer        data    [GEGL_BUFFER_MAX_ITERABLES];
+  GeglGpuTexture *gpu_data[GEGL_BUFFER_MAX_ITERABLES];
+  GeglRectangle   roi     [GEGL_BUFFER_MAX_ITERABLES];
 } GeglBufferIterator;
 
-
 /**
  * gegl_buffer_iterator_new:
  * @buffer: a #GeglBuffer
  * @roi: the rectangle to iterate over
- * @format: the format we want to process this buffers data in, pass 0 to use the buffers format.
- * @flags: whether we need reading or writing to this buffer one of GEGL_BUFFER_READ, GEGL_BUFFER_WRITE and GEGL_BUFFER_READWRITE.
+ * @format: the format we want to process this buffers data in, pass 0 to use
+ * the buffers format.
+ * @flags: whether we need reading or writing to this buffer. One of
+ * GEGL_BUFFER_READ, GEGL_BUFFER_WRITE, GEGL_BUFFER_READWRITE,
+ * GEGL_BUFFER_GPU_READ, GEGL_BUFFER_GPU_WRITE, GEGL_BUFFER_GPU_READWRITE,
+ * GEGL_BUFFER_ALL_READ, GEGL_BUFFER_ALL_WRITE and GEGL_BUFFER_ALL.
  *
  * Create a new buffer iterator, this buffer will be iterated through
  * in linear chunks, some chunks might be full tiles the coordinates, see



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