mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 06:48:06 +02:00
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 <charmainel@vmware.com>
This commit is contained in:
parent
95d5c48f68
commit
f215f42f1b
1 changed files with 33 additions and 0 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue