Mesa (gallium-0.1): python: Allow to read from buffers.

Jose Fonseca jrfonseca at kemper.freedesktop.org
Wed Nov 19 16:02:03 UTC 2008


Module: Mesa
Branch: gallium-0.1
Commit: 2f153b5487459f04941bbbf35fd531adbf7535a2
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=2f153b5487459f04941bbbf35fd531adbf7535a2

Author: José Fonseca <jrfonseca at tungstengraphics.com>
Date:   Thu Nov 20 01:01:48 2008 +0900

python: Allow to read from buffers.

---

 src/gallium/state_trackers/python/gallium.i   |    2 +
 src/gallium/state_trackers/python/p_texture.i |   30 ++++++++++++++++++++++++-
 2 files changed, 31 insertions(+), 1 deletions(-)

diff --git a/src/gallium/state_trackers/python/gallium.i b/src/gallium/state_trackers/python/gallium.i
index 68d2db3..f4c4b36 100644
--- a/src/gallium/state_trackers/python/gallium.i
+++ b/src/gallium/state_trackers/python/gallium.i
@@ -57,6 +57,8 @@
 
 %include "typemaps.i"
 
+%include "cstring.i"
+
 %include "carrays.i"
 %array_class(unsigned char, ByteArray);
 %array_class(int, IntArray);
diff --git a/src/gallium/state_trackers/python/p_texture.i b/src/gallium/state_trackers/python/p_texture.i
index 33fb374..08ba0eb 100644
--- a/src/gallium/state_trackers/python/p_texture.i
+++ b/src/gallium/state_trackers/python/p_texture.i
@@ -179,7 +179,35 @@ struct st_buffer {
       st_buffer_destroy($self);
    }
    
-   void write( const char *STRING, unsigned LENGTH, unsigned offset = 0) {
+   unsigned __len__(void) 
+   {
+      assert($self->buffer->refcount);
+      return $self->buffer->size;
+   }
+   
+   %cstring_output_allocate_size(char **STRING, int *LENGTH, free(*$1));
+   void read(char **STRING, int *LENGTH)
+   {
+      struct pipe_screen *screen = $self->st_dev->screen;
+      const char *map;
+      
+      assert($self->buffer->refcount);
+      
+      *LENGTH = $self->buffer->size;
+      *STRING = (char *) malloc($self->buffer->size);
+      if(!*STRING)
+         return;
+      
+      map = pipe_buffer_map(screen, $self->buffer, PIPE_BUFFER_USAGE_CPU_READ);
+      if(map) {
+         memcpy(*STRING, map, $self->buffer->size);
+         pipe_buffer_unmap(screen, $self->buffer);
+      }
+   }
+   
+   %cstring_input_binary(const char *STRING, unsigned LENGTH);
+   void write(const char *STRING, unsigned LENGTH, unsigned offset = 0) 
+   {
       struct pipe_screen *screen = $self->st_dev->screen;
       char *map;
       




More information about the mesa-commit mailing list