|
|
@@ -162,6 +162,39 @@ softpipe_texture_create(struct pipe_screen *screen, |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static struct pipe_texture * |
|
|
|
softpipe_texture_blanket(struct pipe_screen * screen, |
|
|
|
const struct pipe_texture *base, |
|
|
|
const unsigned *stride, |
|
|
|
struct pipe_buffer *buffer) |
|
|
|
{ |
|
|
|
struct softpipe_texture *spt; |
|
|
|
assert(screen); |
|
|
|
|
|
|
|
/* Only supports one type */ |
|
|
|
if (base->target != PIPE_TEXTURE_2D || |
|
|
|
base->last_level != 0 || |
|
|
|
base->depth[0] != 1) { |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
|
|
|
|
spt = CALLOC_STRUCT(softpipe_texture); |
|
|
|
if (!spt) |
|
|
|
return NULL; |
|
|
|
|
|
|
|
spt->base = *base; |
|
|
|
spt->base.refcount = 1; |
|
|
|
spt->base.screen = screen; |
|
|
|
spt->base.nblocksx[0] = pf_get_nblocksx(&spt->base.block, spt->base.width[0]); |
|
|
|
spt->base.nblocksy[0] = pf_get_nblocksy(&spt->base.block, spt->base.height[0]); |
|
|
|
spt->stride[0] = stride[0]; |
|
|
|
|
|
|
|
pipe_buffer_reference(screen->winsys, &spt->buffer, buffer); |
|
|
|
|
|
|
|
return &spt->base; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static void |
|
|
|
softpipe_texture_release(struct pipe_screen *screen, |
|
|
|
struct pipe_texture **pt) |
|
|
@@ -309,6 +342,7 @@ void |
|
|
|
softpipe_init_screen_texture_funcs(struct pipe_screen *screen) |
|
|
|
{ |
|
|
|
screen->texture_create = softpipe_texture_create; |
|
|
|
screen->texture_blanket = softpipe_texture_blanket; |
|
|
|
screen->texture_release = softpipe_texture_release; |
|
|
|
|
|
|
|
screen->get_tex_surface = softpipe_get_tex_surface; |