i915: update to new display target allocation
This commit is contained in:
@@ -105,6 +105,50 @@ i915_miptree_set_image_offset(struct i915_texture *tex,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Hack it up to use the old winsys->surface_alloc_storage()
|
||||||
|
* method for now:
|
||||||
|
*/
|
||||||
|
static boolean
|
||||||
|
i915_displaytarget_layout(struct pipe_screen *screen,
|
||||||
|
struct i915_texture *tex)
|
||||||
|
{
|
||||||
|
struct pipe_winsys *ws = screen->winsys;
|
||||||
|
struct pipe_surface surf;
|
||||||
|
unsigned flags = (PIPE_BUFFER_USAGE_CPU_READ |
|
||||||
|
PIPE_BUFFER_USAGE_CPU_WRITE |
|
||||||
|
PIPE_BUFFER_USAGE_GPU_READ |
|
||||||
|
PIPE_BUFFER_USAGE_GPU_WRITE);
|
||||||
|
|
||||||
|
|
||||||
|
memset(&surf, 0, sizeof(surf));
|
||||||
|
|
||||||
|
ws->surface_alloc_storage( ws,
|
||||||
|
&surf,
|
||||||
|
tex->base.width[0],
|
||||||
|
tex->base.height[0],
|
||||||
|
tex->base.format,
|
||||||
|
flags);
|
||||||
|
|
||||||
|
/* Now extract the goodies:
|
||||||
|
*/
|
||||||
|
i915_miptree_set_image_offset( tex, 0, 0, 0, 0 );
|
||||||
|
i915_miptree_set_level_info( tex, 0, 0, 0, 0,
|
||||||
|
tex->base.width[0],
|
||||||
|
tex->base.height[0],
|
||||||
|
1 );
|
||||||
|
|
||||||
|
tex->buffer = surf.buffer;
|
||||||
|
tex->pitch = surf.pitch;
|
||||||
|
tex->total_height = 0;
|
||||||
|
|
||||||
|
|
||||||
|
return tex->buffer != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
i945_miptree_layout_2d( struct i915_texture *tex )
|
i945_miptree_layout_2d( struct i915_texture *tex )
|
||||||
{
|
{
|
||||||
@@ -483,30 +527,45 @@ static struct pipe_texture *
|
|||||||
i915_texture_create_screen(struct pipe_screen *screen,
|
i915_texture_create_screen(struct pipe_screen *screen,
|
||||||
const struct pipe_texture *templat)
|
const struct pipe_texture *templat)
|
||||||
{
|
{
|
||||||
|
struct i915_screen *i915screen = i915_screen(screen);
|
||||||
|
struct pipe_winsys *ws = screen->winsys;
|
||||||
struct i915_texture *tex = CALLOC_STRUCT(i915_texture);
|
struct i915_texture *tex = CALLOC_STRUCT(i915_texture);
|
||||||
|
|
||||||
if (tex) {
|
if (!tex)
|
||||||
struct i915_screen *i915screen = i915_screen(screen);
|
return NULL;
|
||||||
struct pipe_winsys *ws = screen->winsys;
|
|
||||||
|
|
||||||
tex->base = *templat;
|
tex->base = *templat;
|
||||||
tex->base.refcount = 1;
|
tex->base.refcount = 1;
|
||||||
tex->base.screen = screen;
|
tex->base.screen = screen;
|
||||||
|
|
||||||
if (i915screen->is_i945 ? i945_miptree_layout(tex) :
|
if (tex->base.tex_usage & PIPE_TEXTURE_USAGE_DISPLAY_TARGET) {
|
||||||
i915_miptree_layout(tex))
|
if (!i915_displaytarget_layout(screen, tex))
|
||||||
tex->buffer = ws->buffer_create(ws, 64,
|
goto fail;
|
||||||
PIPE_BUFFER_USAGE_PIXEL,
|
}
|
||||||
tex->pitch * tex->base.cpp *
|
else {
|
||||||
tex->total_height);
|
if (i915screen->is_i945) {
|
||||||
|
if (!i945_miptree_layout(tex))
|
||||||
if (!tex->buffer) {
|
goto fail;
|
||||||
FREE(tex);
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
if (!i915_miptree_layout(tex))
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
tex->buffer = ws->buffer_create(ws, 64,
|
||||||
|
PIPE_BUFFER_USAGE_PIXEL,
|
||||||
|
tex->pitch * tex->base.cpp *
|
||||||
|
tex->total_height);
|
||||||
|
|
||||||
|
if (!tex->buffer)
|
||||||
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
return &tex->base;
|
return &tex->base;
|
||||||
|
|
||||||
|
fail:
|
||||||
|
FREE(tex);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user