mesa: validate size parameters for glTexStorage*Multisample

v2: code cleanup
v3: check only dimensions, samples is checked separately later

Signed-off-by: Tapani Pälli <tapani.palli@intel.com>
Reviewed-by: Timothy Arceri <t_arceri@yahoo.com.au>
This commit is contained in:
Tapani Pälli 2015-08-17 10:14:35 +03:00
parent a342becc49
commit 6a8e08cb89

View file

@ -5794,6 +5794,20 @@ _mesa_TexImage3DMultisample(GLenum target, GLsizei samples,
"glTexImage3DMultisample");
}
static bool
valid_texstorage_ms_parameters(GLsizei width, GLsizei height, GLsizei depth,
GLsizei samples, unsigned dims)
{
GET_CURRENT_CONTEXT(ctx);
if (!_mesa_valid_tex_storage_dim(width, height, depth)) {
_mesa_error(ctx, GL_INVALID_VALUE,
"glTexStorage%uDMultisample(width=%d,height=%d,depth=%d)",
dims, width, height, depth);
return false;
}
return true;
}
void GLAPIENTRY
_mesa_TexStorage2DMultisample(GLenum target, GLsizei samples,
@ -5807,6 +5821,9 @@ _mesa_TexStorage2DMultisample(GLenum target, GLsizei samples,
if (!texObj)
return;
if (!valid_texstorage_ms_parameters(width, height, 1, samples, 2))
return;
texture_image_multisample(ctx, 2, texObj, target, samples,
internalformat, width, height, 1,
fixedsamplelocations, GL_TRUE,
@ -5826,6 +5843,9 @@ _mesa_TexStorage3DMultisample(GLenum target, GLsizei samples,
if (!texObj)
return;
if (!valid_texstorage_ms_parameters(width, height, depth, samples, 3))
return;
texture_image_multisample(ctx, 3, texObj, target, samples,
internalformat, width, height, depth,
fixedsamplelocations, GL_TRUE,
@ -5846,6 +5866,9 @@ _mesa_TextureStorage2DMultisample(GLuint texture, GLsizei samples,
if (!texObj)
return;
if (!valid_texstorage_ms_parameters(width, height, 1, samples, 2))
return;
texture_image_multisample(ctx, 2, texObj, texObj->Target, samples,
internalformat, width, height, 1,
fixedsamplelocations, GL_TRUE,
@ -5867,6 +5890,9 @@ _mesa_TextureStorage3DMultisample(GLuint texture, GLsizei samples,
if (!texObj)
return;
if (!valid_texstorage_ms_parameters(width, height, depth, samples, 3))
return;
texture_image_multisample(ctx, 3, texObj, texObj->Target, samples,
internalformat, width, height, depth,
fixedsamplelocations, GL_TRUE,