mesa: Validate the layer selection of an array texture too

Previously only the slice of a 3D texture was validated in the FBO
completeness check.  This fixes the failure in the 'invalid layer of an
array texture' subtest of piglit's fbo-incomplete test.

v2: 1D_ARRAY textures have Depth == 1.  Instead, compare against Height.

v3: Handle CUBE_MAP_ARRAY textures too.  Noticed by Marek.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Cc: "9.1 9.2" mesa-stable@lists.freedesktop.org
This commit is contained in:
Ian Romanick 2013-07-27 12:27:45 -07:00
parent 41485fea7c
commit 25281fef0f
1 changed files with 30 additions and 4 deletions

View File

@ -729,10 +729,36 @@ test_attachment_completeness(const struct gl_context *ctx, GLenum format,
att->Complete = GL_FALSE;
return;
}
if (texObj->Target == GL_TEXTURE_3D && att->Zoffset >= texImage->Depth) {
att_incomplete("bad z offset");
att->Complete = GL_FALSE;
return;
switch (texObj->Target) {
case GL_TEXTURE_3D:
if (att->Zoffset >= texImage->Depth) {
att_incomplete("bad z offset");
att->Complete = GL_FALSE;
return;
}
break;
case GL_TEXTURE_1D_ARRAY:
if (att->Zoffset >= texImage->Height) {
att_incomplete("bad 1D-array layer");
att->Complete = GL_FALSE;
return;
}
break;
case GL_TEXTURE_2D_ARRAY:
if (att->Zoffset >= texImage->Depth) {
att_incomplete("bad 2D-array layer");
att->Complete = GL_FALSE;
return;
}
break;
case GL_TEXTURE_CUBE_MAP_ARRAY:
if (att->Zoffset >= texImage->Depth) {
att_incomplete("bad cube-array layer");
att->Complete = GL_FALSE;
return;
}
break;
}
baseFormat = _mesa_get_format_base_format(texImage->TexFormat);