From: José Fonseca Date: Mon, 30 Mar 2009 18:48:30 +0000 (+0100) Subject: python: Read rgba8 with a single transfer. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b4de7c4c5fc1a6b103fea1139c7a01f0d6a401ad;p=mesa.git python: Read rgba8 with a single transfer. --- diff --git a/src/gallium/state_trackers/python/p_texture.i b/src/gallium/state_trackers/python/p_texture.i index 47bcd4ba3c6..db7a1358e14 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);