Commit 84a44844 authored by Anuj Phogat's avatar Anuj Phogat
Browse files

mesa: Handle 3d block sizes in teximage error checks


Signed-off-by: Anuj Phogat's avatarAnuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Brian Paul's avatarBrian Paul <brianp@vmware.com>
parent ec60b3da
...@@ -1112,7 +1112,7 @@ error_check_subtexture_dimensions(struct gl_context *ctx, GLuint dims, ...@@ -1112,7 +1112,7 @@ error_check_subtexture_dimensions(struct gl_context *ctx, GLuint dims,
GLsizei subDepth, const char *func) GLsizei subDepth, const char *func)
{ {
const GLenum target = destImage->TexObject->Target; const GLenum target = destImage->TexObject->Target;
GLuint bw, bh; GLuint bw, bh, bd;
/* Check size */ /* Check size */
if (subWidth < 0) { if (subWidth < 0) {
...@@ -1185,14 +1185,14 @@ error_check_subtexture_dimensions(struct gl_context *ctx, GLuint dims, ...@@ -1185,14 +1185,14 @@ error_check_subtexture_dimensions(struct gl_context *ctx, GLuint dims,
* compressed formats supported by Mesa allow sub-textures to be updated * compressed formats supported by Mesa allow sub-textures to be updated
* along compressed block boundaries. * along compressed block boundaries.
*/ */
_mesa_get_format_block_size(destImage->TexFormat, &bw, &bh); _mesa_get_format_block_size_3d(destImage->TexFormat, &bw, &bh, &bd);
if (bw != 1 || bh != 1) { if (bw != 1 || bh != 1 || bd != 1) {
/* offset must be multiple of block size */ /* offset must be multiple of block size */
if ((xoffset % bw != 0) || (yoffset % bh != 0)) { if ((xoffset % bw != 0) || (yoffset % bh != 0) || (zoffset % bd != 0)) {
_mesa_error(ctx, GL_INVALID_OPERATION, _mesa_error(ctx, GL_INVALID_OPERATION,
"%s(xoffset = %d, yoffset = %d)", "%s(xoffset = %d, yoffset = %d, zoffset = %d)",
func, xoffset, yoffset); func, xoffset, yoffset, zoffset);
return GL_TRUE; return GL_TRUE;
} }
...@@ -1214,6 +1214,13 @@ error_check_subtexture_dimensions(struct gl_context *ctx, GLuint dims, ...@@ -1214,6 +1214,13 @@ error_check_subtexture_dimensions(struct gl_context *ctx, GLuint dims,
"%s(height = %d)", func, subHeight); "%s(height = %d)", func, subHeight);
return GL_TRUE; return GL_TRUE;
} }
if ((subDepth % bd != 0) &&
(zoffset + subDepth != (GLint) destImage->Depth)) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"%s(depth = %d)", func, subDepth);
return GL_TRUE;
}
} }
return GL_FALSE; return GL_FALSE;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment