mesa: Handle 3d block sizes in getteximage error checks

Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
Anuj Phogat
2016-03-09 16:39:34 -08:00
parent 5713461ae7
commit ec60b3da69
+17 -4
View File
@@ -1037,9 +1037,9 @@ dimensions_error_check(struct gl_context *ctx,
/* Extra checks for compressed textures */
{
GLuint bw, bh;
_mesa_get_format_block_size(texImage->TexFormat, &bw, &bh);
if (bw > 1 || bh > 1) {
GLuint bw, bh, bd;
_mesa_get_format_block_size_3d(texImage->TexFormat, &bw, &bh, &bd);
if (bw > 1 || bh > 1 || bd > 1) {
/* offset must be multiple of block size */
if (xoffset % bw != 0) {
_mesa_error(ctx, GL_INVALID_VALUE,
@@ -1054,7 +1054,13 @@ dimensions_error_check(struct gl_context *ctx,
}
}
/* The size must be a multiple of bw x bh, or we must be using a
if (zoffset % bd != 0) {
_mesa_error(ctx, GL_INVALID_VALUE,
"%s(zoffset = %d)", caller, zoffset);
return true;
}
/* The size must be a multiple of bw x bh x bd, or we must be using a
* offset+size that exactly hits the edge of the image.
*/
if ((width % bw != 0) &&
@@ -1070,6 +1076,13 @@ dimensions_error_check(struct gl_context *ctx,
"%s(height = %d)", caller, height);
return true;
}
if ((depth % bd != 0) &&
(zoffset + depth != (GLint) texImage->Depth)) {
_mesa_error(ctx, GL_INVALID_VALUE,
"%s(depth = %d)", caller, depth);
return true;
}
}
}