[gegl/gsoc2009-gpu] GeglBufferIterator: Introduce new buffer access methods
- From: Jerson Michael Perpetua <jperpetua src gnome org>
- To: svn-commits-list gnome org
- Subject: [gegl/gsoc2009-gpu] GeglBufferIterator: Introduce new buffer access methods
- Date: Tue, 7 Jul 2009 17:46:48 +0000 (UTC)
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]