diff options
author | Brian Paul <[email protected]> | 2017-06-27 09:51:25 -0600 |
---|---|---|
committer | Brian Paul <[email protected]> | 2017-06-30 13:37:10 -0600 |
commit | f215f42f1b325c7e15d03b1cc0c889a4b8f84cdd (patch) | |
tree | cc3133b7cf11fbec5d7d821da3a98d9766887561 /src/gallium/drivers/svga/svga_resource_texture.c | |
parent | 95d5c48f68b598cfa6db25f44aac52b3e11403cc (diff) |
svga: add texture size/levels sanity check code in svga_texture_create()
The state tracker should never ask us to create a texture with invalid
dimensions / mipmap levels. Do some assertions to check that.
No Piglit regressions.
Reviewed-by: Charmaine Lee <[email protected]>
Diffstat (limited to 'src/gallium/drivers/svga/svga_resource_texture.c')
-rw-r--r-- | src/gallium/drivers/svga/svga_resource_texture.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/gallium/drivers/svga/svga_resource_texture.c b/src/gallium/drivers/svga/svga_resource_texture.c index 670100cb568..84441d116dd 100644 --- a/src/gallium/drivers/svga/svga_resource_texture.c +++ b/src/gallium/drivers/svga/svga_resource_texture.c @@ -916,6 +916,39 @@ svga_texture_create(struct pipe_screen *screen, goto fail_notex; } + /* Verify the number of mipmap levels isn't impossibly large. For example, + * if the base 2D image is 16x16, we can't have 8 mipmap levels. + * The state tracker should never ask us to create a resource with invalid + * parameters. + */ + { + unsigned max_dim = template->width0; + + switch (template->target) { + case PIPE_TEXTURE_1D: + case PIPE_TEXTURE_1D_ARRAY: + // nothing + break; + case PIPE_TEXTURE_2D: + case PIPE_TEXTURE_CUBE: + case PIPE_TEXTURE_CUBE_ARRAY: + case PIPE_TEXTURE_2D_ARRAY: + max_dim = MAX2(max_dim, template->height0); + break; + case PIPE_TEXTURE_3D: + max_dim = MAX3(max_dim, template->height0, template->depth0); + break; + case PIPE_TEXTURE_RECT: + case PIPE_BUFFER: + assert(template->last_level == 0); + /* the assertion below should always pass */ + break; + default: + debug_printf("Unexpected texture target type\n"); + } + assert(1 << template->last_level <= max_dim); + } + tex = CALLOC_STRUCT(svga_texture); if (!tex) { goto fail_notex; |