Commit 7d624799 authored by Brian Paul's avatar Brian Paul

softpipe: implement the new can_create_resource() function

And define a SP_MAX_TEXTURE_SIZE value as we do in llvmpipe.
Reviewed-by: Jose Fonseca's avatarJose Fonseca <jfonseca@vmware.com>
parent b9e88c55
......@@ -29,7 +29,7 @@
#define SP_LIMITS_H
#define SP_MAX_TEXTURE_SIZE (1 * 1024 * 1024 * 1024ULL) /* 1GB for now */
#define SP_MAX_TEXTURE_2D_LEVELS 15 /* 16K x 16K */
#define SP_MAX_TEXTURE_3D_LEVELS 9 /* 256 x 256 x 256 */
#define SP_MAX_TEXTURE_CUBE_LEVELS 13 /* 4K x 4K */
......
......@@ -52,7 +52,8 @@
*/
static boolean
softpipe_resource_layout(struct pipe_screen *screen,
struct softpipe_resource *spr)
struct softpipe_resource *spr,
boolean allocate)
{
struct pipe_resource *pt = &spr->base;
unsigned level;
......@@ -83,9 +84,31 @@ softpipe_resource_layout(struct pipe_screen *screen,
depth = u_minify(depth, 1);
}
spr->data = align_malloc(buffer_size, 16);
if (buffer_size > SP_MAX_TEXTURE_SIZE)
return FALSE;
if (allocate) {
spr->data = align_malloc(buffer_size, 16);
return spr->data != NULL;
}
else {
return TRUE;
}
}
return spr->data != NULL;
/**
* Check the size of the texture specified by 'res'.
* \return TRUE if OK, FALSE if too large.
*/
static boolean
softpipe_can_create_resource(struct pipe_screen *screen,
const struct pipe_resource *res)
{
struct softpipe_resource spr;
memset(&spr, 0, sizeof(spr));
spr.base = *res;
return softpipe_resource_layout(screen, &spr, FALSE);
}
......@@ -140,7 +163,7 @@ softpipe_resource_create(struct pipe_screen *screen,
goto fail;
}
else {
if (!softpipe_resource_layout(screen, spr))
if (!softpipe_resource_layout(screen, spr, TRUE))
goto fail;
}
......@@ -506,4 +529,5 @@ softpipe_init_screen_texture_funcs(struct pipe_screen *screen)
screen->resource_destroy = softpipe_resource_destroy;
screen->resource_from_handle = softpipe_resource_from_handle;
screen->resource_get_handle = softpipe_resource_get_handle;
screen->can_create_resource = softpipe_can_create_resource;
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment