summaryrefslogtreecommitdiffstats
path: root/src/mesa/main/texgetimage.c
diff options
context:
space:
mode:
authorAnuj Phogat <[email protected]>2016-03-09 16:39:34 -0800
committerAnuj Phogat <[email protected]>2016-05-03 03:43:18 -0700
commitec60b3da695f7a80b0efd1335aa34d0aa4ddbe9a (patch)
treec140ad48ef5ab398d5e79f88d4f5eb68992b4349 /src/mesa/main/texgetimage.c
parent5713461ae7e24d5392c45e130f10c719e61efa79 (diff)
mesa: Handle 3d block sizes in getteximage error checks
Signed-off-by: Anuj Phogat <[email protected]> Reviewed-by: Brian Paul <[email protected]>
Diffstat (limited to 'src/mesa/main/texgetimage.c')
-rw-r--r--src/mesa/main/texgetimage.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/mesa/main/texgetimage.c b/src/mesa/main/texgetimage.c
index 06bc8f1ba15..4ac0ad4b7f5 100644
--- a/src/mesa/main/texgetimage.c
+++ b/src/mesa/main/texgetimage.c
@@ -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;
+ }
}
}