From ec60b3da695f7a80b0efd1335aa34d0aa4ddbe9a Mon Sep 17 00:00:00 2001 From: Anuj Phogat Date: Wed, 9 Mar 2016 16:39:34 -0800 Subject: [PATCH] mesa: Handle 3d block sizes in getteximage error checks Signed-off-by: Anuj Phogat Reviewed-by: Brian Paul --- src/mesa/main/texgetimage.c | 21 +++++++++++++++++---- 1 file 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; + } } } -- 2.30.2