st/python: Move surface read/write methods to context.
This commit is contained in:
parent
012fabca72
commit
69492c3aca
|
@ -362,10 +362,253 @@ error1:
|
||||||
pipe_surface_reference(&_dst, NULL);
|
pipe_surface_reference(&_dst, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void clear(unsigned buffers, const float *rgba, double depth = 0.0f,
|
%cstring_output_allocate_size(char **STRING, int *LENGTH, free(*$1));
|
||||||
unsigned stencil = 0)
|
void
|
||||||
|
surface_read_raw(struct st_surface *surface,
|
||||||
|
unsigned x, unsigned y, unsigned w, unsigned h,
|
||||||
|
char **STRING, int *LENGTH)
|
||||||
{
|
{
|
||||||
$self->pipe->clear($self->pipe, buffers, rgba, depth, stencil);
|
struct pipe_texture *texture = surface->texture;
|
||||||
|
struct pipe_context *pipe = $self->pipe;
|
||||||
|
struct pipe_transfer *transfer;
|
||||||
|
unsigned stride;
|
||||||
|
|
||||||
|
stride = util_format_get_stride(texture->format, w);
|
||||||
|
*LENGTH = util_format_get_nblocksy(texture->format, h) * stride;
|
||||||
|
*STRING = (char *) malloc(*LENGTH);
|
||||||
|
if(!*STRING)
|
||||||
|
return;
|
||||||
|
|
||||||
|
transfer = pipe->get_tex_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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
%cstring_input_binary(const char *STRING, unsigned LENGTH);
|
||||||
|
void
|
||||||
|
surface_write_raw(struct st_surface *surface,
|
||||||
|
unsigned x, unsigned y, unsigned w, unsigned h,
|
||||||
|
const char *STRING, unsigned LENGTH, unsigned stride = 0)
|
||||||
|
{
|
||||||
|
struct pipe_texture *texture = surface->texture;
|
||||||
|
struct pipe_context *pipe = $self->pipe;
|
||||||
|
struct pipe_transfer *transfer;
|
||||||
|
|
||||||
|
if(stride == 0)
|
||||||
|
stride = util_format_get_stride(texture->format, w);
|
||||||
|
|
||||||
|
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);
|
||||||
|
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);
|
||||||
|
|
||||||
|
fail:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
surface_read_rgba(struct st_surface *surface,
|
||||||
|
unsigned x, unsigned y, unsigned w, unsigned h,
|
||||||
|
float *rgba)
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
if(transfer) {
|
||||||
|
pipe_get_tile_rgba(pipe, transfer, 0, 0, w, h, rgba);
|
||||||
|
pipe->tex_transfer_destroy(pipe, transfer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
surface_write_rgba(struct st_surface *surface,
|
||||||
|
unsigned x, unsigned y, unsigned w, unsigned h,
|
||||||
|
const float *rgba)
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
if(transfer) {
|
||||||
|
pipe_put_tile_rgba(pipe, transfer, 0, 0, w, h, rgba);
|
||||||
|
pipe->tex_transfer_destroy(pipe, transfer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
%cstring_output_allocate_size(char **STRING, int *LENGTH, free(*$1));
|
||||||
|
void
|
||||||
|
surface_read_rgba8(struct st_surface *surface,
|
||||||
|
unsigned x, unsigned y, unsigned w, unsigned h,
|
||||||
|
char **STRING, int *LENGTH)
|
||||||
|
{
|
||||||
|
struct pipe_context *pipe = $self->pipe;
|
||||||
|
struct pipe_transfer *transfer;
|
||||||
|
float *rgba;
|
||||||
|
unsigned char *rgba8;
|
||||||
|
unsigned i, j, k;
|
||||||
|
|
||||||
|
*LENGTH = 0;
|
||||||
|
*STRING = NULL;
|
||||||
|
|
||||||
|
if (!surface)
|
||||||
|
return;
|
||||||
|
|
||||||
|
*LENGTH = h*w*4;
|
||||||
|
*STRING = (char *) malloc(*LENGTH);
|
||||||
|
if(!*STRING)
|
||||||
|
return;
|
||||||
|
|
||||||
|
rgba = malloc(h*w*4*sizeof(float));
|
||||||
|
if(!rgba)
|
||||||
|
return;
|
||||||
|
|
||||||
|
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);
|
||||||
|
if(transfer) {
|
||||||
|
pipe_get_tile_rgba(pipe, 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[j*w*4 + i*4 + k]);
|
||||||
|
}
|
||||||
|
pipe->tex_transfer_destroy(pipe, transfer);
|
||||||
|
}
|
||||||
|
|
||||||
|
free(rgba);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
surface_read_z(struct st_surface *surface,
|
||||||
|
unsigned x, unsigned y, unsigned w, unsigned h,
|
||||||
|
unsigned *z)
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
if(transfer) {
|
||||||
|
pipe_get_tile_z(pipe, transfer, 0, 0, w, h, z);
|
||||||
|
pipe->tex_transfer_destroy(pipe, transfer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
surface_write_z(struct st_surface *surface,
|
||||||
|
unsigned x, unsigned y, unsigned w, unsigned h,
|
||||||
|
const unsigned *z)
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
if(transfer) {
|
||||||
|
pipe_put_tile_z(pipe, transfer, 0, 0, w, h, z);
|
||||||
|
pipe->tex_transfer_destroy(pipe, transfer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
surface_sample_rgba(struct st_surface *surface,
|
||||||
|
float *rgba)
|
||||||
|
{
|
||||||
|
st_sample_surface($self->pipe, surface, rgba);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned
|
||||||
|
surface_compare_rgba(struct st_surface *surface,
|
||||||
|
unsigned x, unsigned y, unsigned w, unsigned h,
|
||||||
|
const float *rgba, float tol = 0.0)
|
||||||
|
{
|
||||||
|
struct pipe_context *pipe = $self->pipe;
|
||||||
|
struct pipe_transfer *transfer;
|
||||||
|
float *rgba2;
|
||||||
|
const float *p1;
|
||||||
|
const float *p2;
|
||||||
|
unsigned i, j, n;
|
||||||
|
|
||||||
|
rgba2 = MALLOC(h*w*4*sizeof(float));
|
||||||
|
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);
|
||||||
|
if(!transfer) {
|
||||||
|
FREE(rgba2);
|
||||||
|
return ~0;
|
||||||
|
}
|
||||||
|
|
||||||
|
pipe_get_tile_rgba(pipe, transfer, 0, 0, w, h, rgba2);
|
||||||
|
pipe->tex_transfer_destroy(pipe, transfer);
|
||||||
|
|
||||||
|
p1 = rgba;
|
||||||
|
p2 = rgba2;
|
||||||
|
n = 0;
|
||||||
|
for(i = h*w; i; --i) {
|
||||||
|
unsigned differs = 0;
|
||||||
|
for(j = 4; j; --j) {
|
||||||
|
float delta = *p2++ - *p1++;
|
||||||
|
if (delta < -tol || delta > tol)
|
||||||
|
differs = 1;
|
||||||
|
}
|
||||||
|
n += differs;
|
||||||
|
}
|
||||||
|
|
||||||
|
FREE(rgba2);
|
||||||
|
|
||||||
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -124,232 +124,6 @@ struct st_surface
|
||||||
FREE($self);
|
FREE($self);
|
||||||
}
|
}
|
||||||
|
|
||||||
%cstring_output_allocate_size(char **STRING, int *LENGTH, free(*$1));
|
|
||||||
void get_tile_raw(struct st_context *ctx, unsigned x, unsigned y, unsigned w, unsigned h, char **STRING, int *LENGTH)
|
|
||||||
{
|
|
||||||
struct pipe_texture *texture = $self->texture;
|
|
||||||
struct pipe_context *pipe = ctx->pipe;
|
|
||||||
struct pipe_transfer *transfer;
|
|
||||||
unsigned stride;
|
|
||||||
|
|
||||||
stride = util_format_get_stride(texture->format, w);
|
|
||||||
*LENGTH = util_format_get_nblocksy(texture->format, h) * stride;
|
|
||||||
*STRING = (char *) malloc(*LENGTH);
|
|
||||||
if(!*STRING)
|
|
||||||
return;
|
|
||||||
|
|
||||||
transfer = pipe->get_tex_transfer(pipe,
|
|
||||||
$self->texture,
|
|
||||||
$self->face,
|
|
||||||
$self->level,
|
|
||||||
$self->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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
%cstring_input_binary(const char *STRING, unsigned LENGTH);
|
|
||||||
void put_tile_raw(struct st_context *ctx, unsigned x, unsigned y, unsigned w, unsigned h, const char *STRING, unsigned LENGTH, unsigned stride = 0)
|
|
||||||
{
|
|
||||||
struct pipe_texture *texture = $self->texture;
|
|
||||||
struct pipe_context *pipe = ctx->pipe;
|
|
||||||
struct pipe_transfer *transfer;
|
|
||||||
|
|
||||||
if(stride == 0)
|
|
||||||
stride = util_format_get_stride(texture->format, w);
|
|
||||||
|
|
||||||
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,
|
|
||||||
$self->texture,
|
|
||||||
$self->face,
|
|
||||||
$self->level,
|
|
||||||
$self->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);
|
|
||||||
|
|
||||||
fail:
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
void get_tile_rgba(struct st_context *ctx, unsigned x, unsigned y, unsigned w, unsigned h, float *rgba)
|
|
||||||
{
|
|
||||||
struct pipe_context *pipe = ctx->pipe;
|
|
||||||
struct pipe_transfer *transfer;
|
|
||||||
transfer = pipe->get_tex_transfer(pipe,
|
|
||||||
$self->texture,
|
|
||||||
$self->face,
|
|
||||||
$self->level,
|
|
||||||
$self->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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
put_tile_rgba(struct st_context *ctx, unsigned x, unsigned y, unsigned w, unsigned h, const float *rgba)
|
|
||||||
{
|
|
||||||
struct pipe_context *pipe = ctx->pipe;
|
|
||||||
struct pipe_transfer *transfer;
|
|
||||||
transfer = pipe->get_tex_transfer(pipe,
|
|
||||||
$self->texture,
|
|
||||||
$self->face,
|
|
||||||
$self->level,
|
|
||||||
$self->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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
%cstring_output_allocate_size(char **STRING, int *LENGTH, free(*$1));
|
|
||||||
void
|
|
||||||
get_tile_rgba8(struct st_context *ctx, unsigned x, unsigned y, unsigned w, unsigned h, char **STRING, int *LENGTH)
|
|
||||||
{
|
|
||||||
struct pipe_context *pipe = ctx->pipe;
|
|
||||||
struct pipe_transfer *transfer;
|
|
||||||
float *rgba;
|
|
||||||
unsigned char *rgba8;
|
|
||||||
unsigned i, j, k;
|
|
||||||
|
|
||||||
*LENGTH = 0;
|
|
||||||
*STRING = NULL;
|
|
||||||
|
|
||||||
if (!$self)
|
|
||||||
return;
|
|
||||||
|
|
||||||
*LENGTH = h*w*4;
|
|
||||||
*STRING = (char *) malloc(*LENGTH);
|
|
||||||
if(!*STRING)
|
|
||||||
return;
|
|
||||||
|
|
||||||
rgba = malloc(h*w*4*sizeof(float));
|
|
||||||
if(!rgba)
|
|
||||||
return;
|
|
||||||
|
|
||||||
rgba8 = (unsigned char *) *STRING;
|
|
||||||
|
|
||||||
transfer = pipe->get_tex_transfer(pipe,
|
|
||||||
$self->texture,
|
|
||||||
$self->face,
|
|
||||||
$self->level,
|
|
||||||
$self->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) {
|
|
||||||
for(i = 0; i < w; ++i)
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
free(rgba);
|
|
||||||
}
|
|
||||||
|
|
||||||
void get_tile_z(struct st_context *ctx, unsigned x, unsigned y, unsigned w, unsigned h, unsigned *z)
|
|
||||||
{
|
|
||||||
struct pipe_context *pipe = ctx->pipe;
|
|
||||||
struct pipe_transfer *transfer;
|
|
||||||
transfer = pipe->get_tex_transfer(pipe,
|
|
||||||
$self->texture,
|
|
||||||
$self->face,
|
|
||||||
$self->level,
|
|
||||||
$self->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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void put_tile_z(struct st_context *ctx, unsigned x, unsigned y, unsigned w, unsigned h, const unsigned *z)
|
|
||||||
{
|
|
||||||
struct pipe_context *pipe = ctx->pipe;
|
|
||||||
struct pipe_transfer *transfer;
|
|
||||||
transfer = pipe->get_tex_transfer(pipe,
|
|
||||||
$self->texture,
|
|
||||||
$self->face,
|
|
||||||
$self->level,
|
|
||||||
$self->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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
void
|
|
||||||
sample_rgba(float *rgba) {
|
|
||||||
st_sample_surface($self, rgba);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
unsigned compare_tile_rgba(struct st_context *ctx, unsigned x, unsigned y, unsigned w, unsigned h, const float *rgba, float tol = 0.0)
|
|
||||||
{
|
|
||||||
struct pipe_context *pipe = ctx->pipe;
|
|
||||||
struct pipe_transfer *transfer;
|
|
||||||
float *rgba2;
|
|
||||||
const float *p1;
|
|
||||||
const float *p2;
|
|
||||||
unsigned i, j, n;
|
|
||||||
|
|
||||||
rgba2 = MALLOC(h*w*4*sizeof(float));
|
|
||||||
if(!rgba2)
|
|
||||||
return ~0;
|
|
||||||
|
|
||||||
transfer = pipe->get_tex_transfer(pipe,
|
|
||||||
$self->texture,
|
|
||||||
$self->face,
|
|
||||||
$self->level,
|
|
||||||
$self->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);
|
|
||||||
|
|
||||||
p1 = rgba;
|
|
||||||
p2 = rgba2;
|
|
||||||
n = 0;
|
|
||||||
for(i = h*w; i; --i) {
|
|
||||||
unsigned differs = 0;
|
|
||||||
for(j = 4; j; --j) {
|
|
||||||
float delta = *p2++ - *p1++;
|
|
||||||
if (delta < -tol || delta > tol)
|
|
||||||
differs = 1;
|
|
||||||
}
|
|
||||||
n += differs;
|
|
||||||
}
|
|
||||||
|
|
||||||
FREE(rgba2);
|
|
||||||
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -521,12 +521,13 @@ st_sample_pixel_block(enum pipe_format format,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
void
|
void
|
||||||
st_sample_surface(struct st_surface *surface, float *rgba)
|
st_sample_surface(struct pipe_context *pipe,
|
||||||
|
struct st_surface *surface,
|
||||||
|
float *rgba)
|
||||||
{
|
{
|
||||||
struct pipe_texture *texture = surface->texture;
|
struct pipe_texture *texture = surface->texture;
|
||||||
struct pipe_screen *screen = texture->screen;
|
|
||||||
unsigned width = u_minify(texture->width0, surface->level);
|
unsigned width = u_minify(texture->width0, surface->level);
|
||||||
unsigned height = u_minify(texture->height0, surface->level);
|
unsigned height = u_minify(texture->height0, surface->level);
|
||||||
uint rgba_stride = width * 4;
|
uint rgba_stride = width * 4;
|
||||||
|
@ -534,18 +535,18 @@ st_sample_surface(struct st_surface *surface, float *rgba)
|
||||||
void *raw;
|
void *raw;
|
||||||
|
|
||||||
transfer = pipe->get_tex_transfer(pipe,
|
transfer = pipe->get_tex_transfer(pipe,
|
||||||
surface->texture,
|
surface->texture,
|
||||||
surface->face,
|
surface->face,
|
||||||
surface->level,
|
surface->level,
|
||||||
surface->zslice,
|
surface->zslice,
|
||||||
PIPE_TRANSFER_WRITE,
|
PIPE_TRANSFER_WRITE,
|
||||||
0, 0,
|
0, 0,
|
||||||
width,
|
width,
|
||||||
height);
|
height);
|
||||||
if (!transfer)
|
if (!transfer)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
raw = screen->transfer_map(screen, transfer);
|
raw = pipe->transfer_map(pipe, transfer);
|
||||||
if (raw) {
|
if (raw) {
|
||||||
enum pipe_format format = texture->format;
|
enum pipe_format format = texture->format;
|
||||||
uint x, y;
|
uint x, y;
|
||||||
|
@ -567,9 +568,8 @@ st_sample_surface(struct st_surface *surface, float *rgba)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
screen->transfer_unmap(screen, transfer);
|
pipe->transfer_unmap(pipe, transfer);
|
||||||
}
|
}
|
||||||
|
|
||||||
screen->tex_transfer_destroy(transfer);
|
pipe->tex_transfer_destroy(pipe, transfer);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
|
@ -32,6 +32,9 @@
|
||||||
|
|
||||||
#include "pipe/p_format.h"
|
#include "pipe/p_format.h"
|
||||||
|
|
||||||
|
struct pipe_context;
|
||||||
|
struct st_surface;
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
st_sample_pixel_block(enum pipe_format format,
|
st_sample_pixel_block(enum pipe_format format,
|
||||||
|
@ -40,7 +43,9 @@ st_sample_pixel_block(enum pipe_format format,
|
||||||
unsigned w, unsigned h);
|
unsigned w, unsigned h);
|
||||||
|
|
||||||
void
|
void
|
||||||
st_sample_surface(struct st_surface *surface, float *rgba);
|
st_sample_surface(struct pipe_context *pipe,
|
||||||
|
struct st_surface *surface,
|
||||||
|
float *rgba);
|
||||||
|
|
||||||
|
|
||||||
#endif /* ST_SAMPLE_H_ */
|
#endif /* ST_SAMPLE_H_ */
|
||||||
|
|
Loading…
Reference in New Issue