Mesa (gallium-resources): python: fixes for resource changes

Roland Scheidegger sroland at kemper.freedesktop.org
Thu Apr 1 16:47:07 UTC 2010


Module: Mesa
Branch: gallium-resources
Commit: c64285aea45997a276fb141d7badc8a04f617c7c
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=c64285aea45997a276fb141d7badc8a04f617c7c

Author: Roland Scheidegger <sroland at vmware.com>
Date:   Thu Apr  1 18:45:54 2010 +0200

python: fixes for resource changes

doesn't look quite ok yet, but sort of compiles.

---

 src/gallium/state_trackers/python/gallium.i   |    3 +-
 src/gallium/state_trackers/python/p_context.i |  156 ++++++++++++------------
 src/gallium/state_trackers/python/p_device.i  |   16 ++--
 src/gallium/state_trackers/python/p_texture.i |  157 ++++++++++++-------------
 src/gallium/state_trackers/python/st_device.c |    2 +-
 src/gallium/state_trackers/python/st_sample.c |   18 ++--
 6 files changed, 173 insertions(+), 179 deletions(-)

diff --git a/src/gallium/state_trackers/python/gallium.i b/src/gallium/state_trackers/python/gallium.i
index aeed1cd..c6084f7 100644
--- a/src/gallium/state_trackers/python/gallium.i
+++ b/src/gallium/state_trackers/python/gallium.i
@@ -72,9 +72,8 @@
 
 %rename(Device) st_device;
 %rename(Context) st_context;
-%rename(Texture) pipe_texture;
+%rename(Resource) pipe_resource;
 %rename(Surface) st_surface;
-%rename(Buffer) pipe_buffer;
 
 %rename(BlendColor) pipe_blend_color;
 %rename(Blend) pipe_blend_state;
diff --git a/src/gallium/state_trackers/python/p_context.i b/src/gallium/state_trackers/python/p_context.i
index 8df0480..5ccc0ca 100644
--- a/src/gallium/state_trackers/python/p_context.i
+++ b/src/gallium/state_trackers/python/p_context.i
@@ -144,7 +144,7 @@ struct st_context {
    }
 
    void set_constant_buffer(unsigned shader, unsigned index,
-                            struct pipe_buffer *buffer ) 
+                            struct pipe_resource *buffer ) 
    {
       $self->pipe->set_constant_buffer($self->pipe, shader, index, buffer);
    }
@@ -168,7 +168,7 @@ struct st_context {
    }
 
    void set_fragment_sampler_texture(unsigned index,
-                                     struct pipe_texture *texture) {
+                                     struct pipe_resource *texture) {
       struct pipe_sampler_view templ;
 
       if(!texture)
@@ -186,7 +186,7 @@ struct st_context {
    }
 
    void set_vertex_sampler_texture(unsigned index,
-                                   struct pipe_texture *texture) {
+                                   struct pipe_resource *texture) {
       struct pipe_sampler_view templ;
 
       if(!texture)
@@ -208,7 +208,7 @@ struct st_context {
                           unsigned stride, 
                           unsigned max_index,
                           unsigned buffer_offset,
-                          struct pipe_buffer *buffer)
+                          struct pipe_resource *buffer)
    {
       unsigned i;
       struct pipe_vertex_buffer state;
@@ -252,7 +252,7 @@ struct st_context {
       $self->pipe->draw_arrays($self->pipe, mode, start, count);
    }
 
-   void draw_elements( struct pipe_buffer *indexBuffer,
+   void draw_elements( struct pipe_resource *indexBuffer,
                        unsigned indexSize,
                        unsigned mode, unsigned start, unsigned count) 
    {
@@ -262,7 +262,7 @@ struct st_context {
                                  mode, start, count);
    }
 
-   void draw_range_elements( struct pipe_buffer *indexBuffer,
+   void draw_range_elements( struct pipe_resource *indexBuffer,
                              unsigned indexSize, unsigned minIndex, unsigned maxIndex,
                              unsigned mode, unsigned start, unsigned count)
    {
@@ -279,7 +279,8 @@ struct st_context {
    {
       struct pipe_context *pipe = $self->pipe;
       struct pipe_screen *screen = pipe->screen;
-      struct pipe_buffer *vbuf;
+      struct pipe_resource *vbuf;
+      struct pipe_transfer *transfer;
       struct pipe_vertex_element velements[PIPE_MAX_ATTRIBS];
       struct pipe_vertex_buffer vbuffer;
       float *map;
@@ -293,12 +294,12 @@ struct st_context {
                                 size);
       if(!vbuf)
          goto error1;
-      
-      map = pipe_buffer_map(screen, vbuf, PIPE_TRANSFER_WRITE);
+
+      map = pipe_buffer_map(pipe, vbuf, PIPE_TRANSFER_WRITE, &transfer);
       if (!map)
          goto error2;
       memcpy(map, vertices, size);
-      pipe_buffer_unmap(screen, vbuf);
+      pipe_buffer_unmap(pipe, vbuf, transfer);
 
       cso_save_vertex_elements($self->cso);
 
@@ -325,7 +326,7 @@ struct st_context {
       cso_restore_vertex_elements($self->cso);
 
 error2:
-      pipe_buffer_reference(&vbuf, NULL);
+      pipe_resource_reference(&vbuf, NULL);
 error1:
       ;
    }
@@ -399,7 +400,7 @@ error1:
                     unsigned x, unsigned y, unsigned w, unsigned h,
                     char **STRING, int *LENGTH)
    {
-      struct pipe_texture *texture = surface->texture;
+      struct pipe_resource *texture = surface->texture;
       struct pipe_context *pipe = $self->pipe;
       struct pipe_transfer *transfer;
       unsigned stride;
@@ -410,16 +411,16 @@ error1:
       if(!*STRING)
          return;
 
-      transfer = pipe->get_tex_transfer(pipe,
-                                          surface->texture,
-                                          surface->face,
-                                          surface->level,
-                                          surface->zslice,
-                                          PIPE_TRANSFER_READ,
-                                          x, y, w, h);
+      transfer = pipe_get_transfer(pipe,
+                                   surface->texture,
+                                   surface->face,
+                                   surface->level,
+                                   surface->zslice,
+                                   PIPE_TRANSFER_READ,
+                                   x, y, w, h);
       if(transfer) {
          pipe_get_tile_raw(pipe, transfer, 0, 0, w, h, *STRING, stride);
-         pipe->tex_transfer_destroy(pipe, transfer);
+         pipe->transfer_destroy(pipe, transfer);
       }
    }
 
@@ -429,7 +430,7 @@ error1:
                      unsigned x, unsigned y, unsigned w, unsigned h,
                      const char *STRING, unsigned LENGTH, unsigned stride = 0)
    {
-      struct pipe_texture *texture = surface->texture;
+      struct pipe_resource *texture = surface->texture;
       struct pipe_context *pipe = $self->pipe;
       struct pipe_transfer *transfer;
 
@@ -439,18 +440,18 @@ error1:
       if(LENGTH < util_format_get_nblocksy(texture->format, h) * stride)
          SWIG_exception(SWIG_ValueError, "offset must be smaller than buffer size");
 
-      transfer = pipe->get_tex_transfer(pipe,
-                                          surface->texture,
-                                          surface->face,
-                                          surface->level,
-                                          surface->zslice,
-                                          PIPE_TRANSFER_WRITE,
-                                          x, y, w, h);
+      transfer = pipe_get_transfer(pipe,
+                                   surface->texture,
+                                   surface->face,
+                                   surface->level,
+                                   surface->zslice,
+                                   PIPE_TRANSFER_WRITE,
+                                   x, y, w, h);
       if(!transfer)
          SWIG_exception(SWIG_MemoryError, "couldn't initiate transfer");
 
       pipe_put_tile_raw(pipe, transfer, 0, 0, w, h, STRING, stride);
-      pipe->tex_transfer_destroy(pipe, transfer);
+      pipe->transfer_destroy(pipe, transfer);
 
    fail:
       return;
@@ -463,16 +464,16 @@ error1:
    {
       struct pipe_context *pipe = $self->pipe;
       struct pipe_transfer *transfer;
-      transfer = pipe->get_tex_transfer(pipe,
-                                          surface->texture,
-                                          surface->face,
-                                          surface->level,
-                                          surface->zslice,
-                                          PIPE_TRANSFER_READ,
-                                          x, y, w, h);
+      transfer = pipe_get_transfer(pipe,
+                                   surface->texture,
+                                   surface->face,
+                                   surface->level,
+                                   surface->zslice,
+                                   PIPE_TRANSFER_READ,
+                                   x, y, w, h);
       if(transfer) {
          pipe_get_tile_rgba(pipe, transfer, 0, 0, w, h, rgba);
-         pipe->tex_transfer_destroy(pipe, transfer);
+         pipe->transfer_destroy(pipe, transfer);
       }
    }
 
@@ -483,16 +484,16 @@ error1:
    {
       struct pipe_context *pipe = $self->pipe;
       struct pipe_transfer *transfer;
-      transfer = pipe->get_tex_transfer(pipe,
-                                          surface->texture,
-                                          surface->face,
-                                          surface->level,
-                                          surface->zslice,
-                                          PIPE_TRANSFER_WRITE,
-                                          x, y, w, h);
+      transfer = pipe_get_transfer(pipe,
+                                   surface->texture,
+                                   surface->face,
+                                   surface->level,
+                                   surface->zslice,
+                                   PIPE_TRANSFER_WRITE,
+                                   x, y, w, h);
       if(transfer) {
          pipe_put_tile_rgba(pipe, transfer, 0, 0, w, h, rgba);
-         pipe->tex_transfer_destroy(pipe, transfer);
+         pipe->transfer_destroy(pipe, transfer);
       }
    }
 
@@ -525,14 +526,13 @@ error1:
 
       rgba8 = (unsigned char *) *STRING;
 
-      transfer = pipe->get_tex_transfer(pipe,
-                                          surface->texture,
-                                          surface->face,
-                                          surface->level,
-                                          surface->zslice,
-                                          PIPE_TRANSFER_READ,
-                                          x, y,
-                                          w, h);
+      transfer = pipe_get_transfer(pipe,
+                                   surface->texture,
+                                   surface->face,
+                                   surface->level,
+                                   surface->zslice,
+                                   PIPE_TRANSFER_READ,
+                                   x, y, w, h);
       if(transfer) {
          pipe_get_tile_rgba(pipe, transfer, 0, 0, w, h, rgba);
          for(j = 0; j < h; ++j) {
@@ -540,7 +540,7 @@ error1:
                for(k = 0; k <4; ++k)
                   rgba8[j*w*4 + i*4 + k] = float_to_ubyte(rgba[j*w*4 + i*4 + k]);
          }
-         pipe->tex_transfer_destroy(pipe, transfer);
+         pipe->transfer_destroy(pipe, transfer);
       }
 
       free(rgba);
@@ -553,16 +553,16 @@ error1:
    {
       struct pipe_context *pipe = $self->pipe;
       struct pipe_transfer *transfer;
-      transfer = pipe->get_tex_transfer(pipe,
-                                          surface->texture,
-                                          surface->face,
-                                          surface->level,
-                                          surface->zslice,
-                                          PIPE_TRANSFER_READ,
-                                          x, y, w, h);
+      transfer = pipe_get_transfer(pipe,
+                                   surface->texture,
+                                   surface->face,
+                                   surface->level,
+                                   surface->zslice,
+                                   PIPE_TRANSFER_READ,
+                                   x, y, w, h);
       if(transfer) {
          pipe_get_tile_z(pipe, transfer, 0, 0, w, h, z);
-         pipe->tex_transfer_destroy(pipe, transfer);
+         pipe->transfer_destroy(pipe, transfer);
       }
    }
 
@@ -573,16 +573,16 @@ error1:
    {
       struct pipe_context *pipe = $self->pipe;
       struct pipe_transfer *transfer;
-      transfer = pipe->get_tex_transfer(pipe,
-                                          surface->texture,
-                                          surface->face,
-                                          surface->level,
-                                          surface->zslice,
-                                          PIPE_TRANSFER_WRITE,
-                                          x, y, w, h);
+      transfer = pipe_get_transfer(pipe,
+                                   surface->texture,
+                                   surface->face,
+                                   surface->level,
+                                   surface->zslice,
+                                   PIPE_TRANSFER_WRITE,
+                                   x, y, w, h);
       if(transfer) {
          pipe_put_tile_z(pipe, transfer, 0, 0, w, h, z);
-         pipe->tex_transfer_destroy(pipe, transfer);
+         pipe->transfer_destroy(pipe, transfer);
       }
    }
 
@@ -609,20 +609,20 @@ error1:
       if(!rgba2)
          return ~0;
 
-      transfer = pipe->get_tex_transfer(pipe,
-                                          surface->texture,
-                                          surface->face,
-                                          surface->level,
-                                          surface->zslice,
-                                          PIPE_TRANSFER_READ,
-                                          x, y, w, h);
+      transfer = pipe_get_transfer(pipe,
+                                   surface->texture,
+                                   surface->face,
+                                   surface->level,
+                                   surface->zslice,
+                                   PIPE_TRANSFER_READ,
+                                   x, y, w, h);
       if(!transfer) {
          FREE(rgba2);
          return ~0;
       }
 
       pipe_get_tile_rgba(pipe, transfer, 0, 0, w, h, rgba2);
-      pipe->tex_transfer_destroy(pipe, transfer);
+      pipe->transfer_destroy(pipe, transfer);
 
       p1 = rgba;
       p2 = rgba2;
diff --git a/src/gallium/state_trackers/python/p_device.i b/src/gallium/state_trackers/python/p_device.i
index 7d0f1b9..18d5efc 100644
--- a/src/gallium/state_trackers/python/p_device.i
+++ b/src/gallium/state_trackers/python/p_device.i
@@ -81,7 +81,7 @@ struct st_device {
    /**
     * Check if the given pipe_format is supported as a texture or
     * drawing surface.
-    * \param type  one of PIPE_TEXTURE, PIPE_SURFACE
+    * \param tex_usage bitmask of PIPE_BIND flags
     */
    int is_format_supported( enum pipe_format format, 
                             enum pipe_texture_target target,
@@ -103,7 +103,7 @@ struct st_device {
       return st_context_create($self);
    }
 
-   struct pipe_texture * 
+   struct pipe_resource * 
    texture_create(
          enum pipe_format format,
          unsigned width,
@@ -113,7 +113,7 @@ struct st_device {
          enum pipe_texture_target target = PIPE_TEXTURE_2D,
          unsigned tex_usage = 0
       ) {
-      struct pipe_texture templat;
+      struct pipe_resource templat;
 
       /* We can't really display surfaces with the python statetracker so mask
        * out that usage */
@@ -128,12 +128,12 @@ struct st_device {
       templat.target = target;
       templat.bind = tex_usage;
 
-      return $self->screen->texture_create($self->screen, &templat);
+      return $self->screen->resource_create($self->screen, &templat);
    }
-   
-   struct pipe_buffer *
-   buffer_create(unsigned size, unsigned alignment = 0, unsigned usage = 0) {
-      return pipe_buffer_create($self->screen, alignment, usage, size);
+
+   struct pipe_resource *
+   buffer_create(unsigned size, unsigned bind = 0) {
+      return pipe_buffer_create($self->screen, bind, size);
    }
 
 };
diff --git a/src/gallium/state_trackers/python/p_texture.i b/src/gallium/state_trackers/python/p_texture.i
index 923a628..1208976 100644
--- a/src/gallium/state_trackers/python/p_texture.i
+++ b/src/gallium/state_trackers/python/p_texture.i
@@ -33,97 +33,144 @@
  */
 
 
-%nodefaultctor pipe_texture;
+%nodefaultctor pipe_resource;
 %nodefaultctor st_surface;
-%nodefaultctor pipe_buffer;
 
-%nodefaultdtor pipe_texture;
+%nodefaultdtor pipe_resource;
 %nodefaultdtor st_surface;
-%nodefaultdtor pipe_buffer;
 
-%ignore pipe_texture::screen;
+%ignore pipe_resource::screen;
 
 %immutable st_surface::texture;
 %immutable st_surface::face;
 %immutable st_surface::level;
 %immutable st_surface::zslice;
 
-%newobject pipe_texture::get_surface;
+%newobject pipe_resource::get_surface;
 
+/* Avoid naming conflict with p_inlines.h's pipe_buffer_read/write */ 
+%rename(read) read_; 
+%rename(write) write_; 
 
-%extend pipe_texture {
-   
-   ~pipe_texture() {
-      struct pipe_texture *ptr = $self;
-      pipe_texture_reference(&ptr, NULL);
+%extend pipe_resource {
+
+   ~pipe_resource() {
+      struct pipe_resource *ptr = $self;
+      pipe_resource_reference(&ptr, NULL);
    }
-   
+
    unsigned get_width(unsigned level=0) {
       return u_minify($self->width0, level);
    }
-   
+
    unsigned get_height(unsigned level=0) {
       return u_minify($self->height0, level);
    }
-   
+
    unsigned get_depth(unsigned level=0) {
       return u_minify($self->depth0, level);
    }
-  
+
    /** Get a surface which is a "view" into a texture */
    struct st_surface *
    get_surface(unsigned face=0, unsigned level=0, unsigned zslice=0)
    {
       struct st_surface *surface;
-      
+
       if(face >= ($self->target == PIPE_TEXTURE_CUBE ? 6U : 1U))
          SWIG_exception(SWIG_ValueError, "face out of bounds");
       if(level > $self->last_level)
          SWIG_exception(SWIG_ValueError, "level out of bounds");
       if(zslice >= u_minify($self->depth0, level))
          SWIG_exception(SWIG_ValueError, "zslice out of bounds");
-      
+
       surface = CALLOC_STRUCT(st_surface);
       if(!surface)
          return NULL;
-      
-      pipe_texture_reference(&surface->texture, $self);
+
+      pipe_resource_reference(&surface->texture, $self);
       surface->face = face;
       surface->level = level;
       surface->zslice = zslice;
-      
+
       return surface;
 
    fail:
       return NULL;
    }
-   
+
+   unsigned __len__(void) 
+   {
+      assert($self->target == PIPE_BUFFER);
+      assert(p_atomic_read(&$self->reference.count) > 0);
+      return $self->width0;
+   }
+
+   %cstring_output_allocate_size(char **STRING, int *LENGTH, free(*$1));
+   void read_(char **STRING, int *LENGTH)
+   {
+      struct pipe_screen *screen = $self->screen;
+      /* XXX need context here not screen */
+
+      assert($self->target == PIPE_BUFFER);
+      assert(p_atomic_read(&$self->reference.count) > 0);
+
+      *LENGTH = $self->width0;
+      *STRING = (char *) malloc($self->width0);
+      if(!*STRING)
+         return;
+
+      pipe_buffer_read(screen, $self, 0, $self->width0, *STRING);
+   }
+
+   %cstring_input_binary(const char *STRING, unsigned LENGTH);
+   void write_(const char *STRING, unsigned LENGTH, unsigned offset = 0) 
+   {
+      struct pipe_screen *screen = $self->screen;
+      /* XXX need context here not screen */
+
+      assert($self->target == PIPE_BUFFER);
+      assert(p_atomic_read(&$self->reference.count) > 0);
+
+      if(offset > $self->width0)
+         SWIG_exception(SWIG_ValueError, "offset must be smaller than buffer size");
+
+      if(offset + LENGTH > $self->width0)
+         SWIG_exception(SWIG_ValueError, "data length must fit inside the buffer");
+
+      pipe_buffer_write(screen, $self, offset, LENGTH, STRING);
+
+fail:
+      return;
+   }
+
+
 };
 
 struct st_surface
 {
    %immutable;
-   
-   struct pipe_texture *texture;
+
+   struct pipe_resource *texture;
    unsigned face;
    unsigned level;
    unsigned zslice;
-   
+
 };
 
 %extend st_surface {
-   
+
    %immutable;
-   
+
    unsigned format;
    unsigned width;
    unsigned height;
-   
+
    ~st_surface() {
-      pipe_texture_reference(&$self->texture, NULL);
+      pipe_resource_reference(&$self->texture, NULL);
       FREE($self);
    }
-   
+
 
 };
 
@@ -146,55 +193,3 @@ struct st_surface
       return u_minify(surface->texture->height0, surface->level);
    }
 %}
-
-/* Avoid naming conflict with p_inlines.h's pipe_buffer_read/write */ 
-%rename(read) read_; 
-%rename(write) write_; 
-
-%extend pipe_buffer {
-   
-   ~pipe_buffer() {
-      struct pipe_buffer *ptr = $self;
-      pipe_buffer_reference(&ptr, NULL);
-   }
-   
-   unsigned __len__(void) 
-   {
-      assert(p_atomic_read(&$self->reference.count) > 0);
-      return $self->size;
-   }
-   
-   %cstring_output_allocate_size(char **STRING, int *LENGTH, free(*$1));
-   void read_(char **STRING, int *LENGTH)
-   {
-      struct pipe_screen *screen = $self->screen;
-      
-      assert(p_atomic_read(&$self->reference.count) > 0);
-      
-      *LENGTH = $self->size;
-      *STRING = (char *) malloc($self->size);
-      if(!*STRING)
-         return;
-      
-      pipe_buffer_read(screen, $self, 0, $self->size, *STRING);
-   }
-   
-   %cstring_input_binary(const char *STRING, unsigned LENGTH);
-   void write_(const char *STRING, unsigned LENGTH, unsigned offset = 0) 
-   {
-      struct pipe_screen *screen = $self->screen;
-      
-      assert(p_atomic_read(&$self->reference.count) > 0);
-      
-      if(offset > $self->size)
-         SWIG_exception(SWIG_ValueError, "offset must be smaller than buffer size");
-
-      if(offset + LENGTH > $self->size)
-         SWIG_exception(SWIG_ValueError, "data length must fit inside the buffer");
-
-      pipe_buffer_write(screen, $self, offset, LENGTH, STRING);
-
-fail:
-      return;
-   }
-};
diff --git a/src/gallium/state_trackers/python/st_device.c b/src/gallium/state_trackers/python/st_device.c
index 11848c6..5a7959c 100644
--- a/src/gallium/state_trackers/python/st_device.c
+++ b/src/gallium/state_trackers/python/st_device.c
@@ -249,7 +249,7 @@ st_context_create(struct st_device *st_dev)
 	 struct pipe_box box;
 	 uint32_t zero = 0;
 	 
-	 u_box_wh( 1, 1, &box );
+	 u_box_origin_2d( 1, 1, &box );
 
 	 pipe->transfer_inline_write(pipe,
 				     st_ctx->default_texture,
diff --git a/src/gallium/state_trackers/python/st_sample.c b/src/gallium/state_trackers/python/st_sample.c
index cd34fdd..8782d82 100644
--- a/src/gallium/state_trackers/python/st_sample.c
+++ b/src/gallium/state_trackers/python/st_sample.c
@@ -534,15 +534,15 @@ st_sample_surface(struct pipe_context *pipe,
    struct pipe_transfer *transfer;
    void *raw;
 
-   transfer = pipe->get_transfer(pipe,
-                                 surface->texture,
-                                 surface->face,
-                                 surface->level,
-                                 surface->zslice,
-                                 PIPE_TRANSFER_WRITE,
-                                 0, 0,
-                                 width,
-                                 height);
+   transfer = pipe_get_transfer(pipe,
+                                surface->texture,
+                                surface->face,
+                                surface->level,
+                                surface->zslice,
+                                PIPE_TRANSFER_WRITE,
+                                0, 0,
+                                width,
+                                height);
    if (!transfer)
       return;
 




More information about the mesa-commit mailing list