Mesa (master): python: Read rgba8 with a single transfer.

Jose Fonseca jrfonseca at kemper.freedesktop.org
Mon Mar 30 19:11:52 UTC 2009


Module: Mesa
Branch: master
Commit: b4de7c4c5fc1a6b103fea1139c7a01f0d6a401ad
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b4de7c4c5fc1a6b103fea1139c7a01f0d6a401ad

Author: José Fonseca <jfonseca at vmware.com>
Date:   Mon Mar 30 19:48:30 2009 +0100

python: Read rgba8 with a single transfer.

---

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

diff --git a/src/gallium/state_trackers/python/p_texture.i b/src/gallium/state_trackers/python/p_texture.i
index 47bcd4b..db7a135 100644
--- a/src/gallium/state_trackers/python/p_texture.i
+++ b/src/gallium/state_trackers/python/p_texture.i
@@ -225,31 +225,28 @@ struct st_surface
       if(!*STRING)
          return;
       
-      rgba = malloc(w*4*sizeof(float));
+      rgba = malloc(h*w*4*sizeof(float));
       if(!rgba)
          return;
       
       rgba8 = (unsigned char *) *STRING;
 
-      for(j = 0; j < h; ++j) {
-         transfer = screen->get_tex_transfer(screen,
-                                             $self->texture,
-                                             $self->face,
-                                             $self->level,
-                                             $self->zslice,
-                                             PIPE_TRANSFER_READ,
-                                             x, y + j,
-                                             w,
-                                             1);
-         if(transfer) {
-            pipe_get_tile_rgba(transfer,
-                               0, 0, w, 1,
-                               rgba);
+      transfer = screen->get_tex_transfer(screen,
+                                          $self->texture,
+                                          $self->face,
+                                          $self->level,
+                                          $self->zslice,
+                                          PIPE_TRANSFER_READ,
+                                          x, y,
+                                          w, h);
+      if(transfer) {
+         pipe_get_tile_rgba(transfer, 0, 0, w, h, rgba);
+         for(j = 0; j < h; ++j) {
             for(i = 0; i < w; ++i)
                for(k = 0; k <4; ++k)
-                  rgba8[j*w*4 + i*4 + k] = float_to_ubyte(rgba[i*4 + k]);
-            screen->tex_transfer_destroy(transfer);
+                  rgba8[j*w*4 + i*4 + k] = float_to_ubyte(rgba[j*w*4 + i*4 + k]);
          }
+         screen->tex_transfer_destroy(transfer);
       }
       
       free(rgba);




More information about the mesa-commit mailing list