Browse Source

llvmpipe: Partially fix resource texture from_handle

tags/mesa-7.9-rc1
Jakob Bornecrantz 15 years ago
parent
commit
2299ff4c6b
1 changed files with 35 additions and 1 deletions
  1. 35
    1
      src/gallium/drivers/llvmpipe/lp_texture.c

+ 35
- 1
src/gallium/drivers/llvmpipe/lp_texture.c View File

@@ -56,6 +56,7 @@
#ifdef DEBUG
static struct llvmpipe_resource resource_list;
#endif
static unsigned id_counter = 0;


static INLINE boolean
@@ -210,7 +211,6 @@ static struct pipe_resource *
llvmpipe_resource_create(struct pipe_screen *_screen,
const struct pipe_resource *templat)
{
static unsigned id_counter = 0;
struct llvmpipe_screen *screen = llvmpipe_screen(_screen);
struct llvmpipe_resource *lpr = CALLOC_STRUCT(llvmpipe_resource);
if (!lpr)
@@ -446,6 +446,10 @@ llvmpipe_resource_from_handle(struct pipe_screen *screen,
{
struct sw_winsys *winsys = llvmpipe_screen(screen)->winsys;
struct llvmpipe_resource *lpr = CALLOC_STRUCT(llvmpipe_resource);
unsigned width, height, width_t, height_t;

/* XXX Seems like from_handled depth textures doesn't work that well */

if (!lpr)
return NULL;

@@ -453,6 +457,25 @@ llvmpipe_resource_from_handle(struct pipe_screen *screen,
pipe_reference_init(&lpr->base.reference, 1);
lpr->base.screen = screen;

width = align(lpr->base.width0, TILE_SIZE);
height = align(lpr->base.height0, TILE_SIZE);
width_t = width / TILE_SIZE;
height_t = height / TILE_SIZE;

/*
* Looks like unaligned displaytargets work just fine,
* at least sampler/render ones.
*/
#if 0
assert(lpr->base.width0 == width);
assert(lpr->base.height0 == height);
#endif

lpr->tiles_per_row[0] = width_t;
lpr->tiles_per_image[0] = width_t * height_t;
lpr->num_slices_faces[0] = 1;
lpr->img_stride[0] = 0;

lpr->dt = winsys->displaytarget_from_handle(winsys,
template,
whandle,
@@ -460,6 +483,17 @@ llvmpipe_resource_from_handle(struct pipe_screen *screen,
if (!lpr->dt)
goto fail;

lpr->layout[0] = alloc_layout_array(1, lpr->base.width0, lpr->base.height0);

assert(lpr->layout[0]);
assert(lpr->layout[0][0] == LP_TEX_LAYOUT_NONE);

lpr->id = id_counter++;

#ifdef DEBUG
insert_at_tail(&resource_list, lpr);
#endif

return &lpr->base;

fail:

Loading…
Cancel
Save