From 28de69d6819eab289a400482d15797b662e4d633 Mon Sep 17 00:00:00 2001 From: José Fonseca Date: Mon, 30 Mar 2009 16:02:21 +0100 Subject: python: Set the surface GPU access flags. Make python surface just a dumb (texture, face, level, zslice) tuple. --- src/gallium/state_trackers/python/st_sample.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'src/gallium/state_trackers/python/st_sample.c') diff --git a/src/gallium/state_trackers/python/st_sample.c b/src/gallium/state_trackers/python/st_sample.c index c2ffe9fce1..70ca16c23d 100644 --- a/src/gallium/state_trackers/python/st_sample.c +++ b/src/gallium/state_trackers/python/st_sample.c @@ -34,6 +34,7 @@ #include "util/u_math.h" #include "util/u_memory.h" +#include "st_device.h" #include "st_sample.h" @@ -523,10 +524,13 @@ st_sample_pixel_block(enum pipe_format format, void -st_sample_surface(struct pipe_surface *surface, float *rgba) +st_sample_surface(struct st_surface *surface, float *rgba) { - struct pipe_screen *screen = surface->texture->screen; - uint rgba_stride = surface->width * 4; + struct pipe_texture *texture = surface->texture; + struct pipe_screen *screen = texture->screen; + unsigned width = texture->width[surface->level]; + unsigned height = texture->height[surface->level]; + uint rgba_stride = width * 4; struct pipe_transfer *transfer; void *raw; @@ -537,25 +541,25 @@ st_sample_surface(struct pipe_surface *surface, float *rgba) surface->zslice, PIPE_TRANSFER_READ, 0, 0, - surface->width, - surface->height); + width, + height); if (!transfer) return; raw = screen->transfer_map(screen, transfer); if (raw) { - const struct pipe_format_block *block = &transfer->block; + const struct pipe_format_block *block = &texture->block; uint x, y; for (y = 0; y < transfer->nblocksy; ++y) { for (x = 0; x < transfer->nblocksx; ++x) { - st_sample_pixel_block(surface->format, + st_sample_pixel_block(texture->format, block, (uint8_t *) raw + y * transfer->stride + x * block->size, rgba + y * block->height * rgba_stride + x * block->width * 4, rgba_stride, - MIN2(block->width, surface->width - x*block->width), - MIN2(block->height, surface->height - y*block->height)); + MIN2(block->width, width - x*block->width), + MIN2(block->height, height - y*block->height)); } } -- cgit v1.2.3 From 844868048f404ab941cc2e75358b77463ee67482 Mon Sep 17 00:00:00 2001 From: José Fonseca Date: Mon, 30 Mar 2009 17:08:23 +0100 Subject: python: Set correct transfer mode. --- src/gallium/state_trackers/python/p_texture.i | 2 +- src/gallium/state_trackers/python/st_sample.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src/gallium/state_trackers/python/st_sample.c') diff --git a/src/gallium/state_trackers/python/p_texture.i b/src/gallium/state_trackers/python/p_texture.i index 543a0cf33f..b97d188973 100644 --- a/src/gallium/state_trackers/python/p_texture.i +++ b/src/gallium/state_trackers/python/p_texture.i @@ -315,7 +315,7 @@ struct st_surface $self->face, $self->level, $self->zslice, - PIPE_TRANSFER_WRITE, + PIPE_TRANSFER_READ, x, y, w, h); if(!transfer) { FREE(rgba2); diff --git a/src/gallium/state_trackers/python/st_sample.c b/src/gallium/state_trackers/python/st_sample.c index 70ca16c23d..53a01891e1 100644 --- a/src/gallium/state_trackers/python/st_sample.c +++ b/src/gallium/state_trackers/python/st_sample.c @@ -539,7 +539,7 @@ st_sample_surface(struct st_surface *surface, float *rgba) surface->face, surface->level, surface->zslice, - PIPE_TRANSFER_READ, + PIPE_TRANSFER_WRITE, 0, 0, width, height); -- cgit v1.2.3