Commit 63a7a9d1 authored by Anuj Phogat's avatar Anuj Phogat
Browse files

mesa: Account for block depth in _mesa_format_image_size()


Signed-off-by: Anuj Phogat's avatarAnuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Brian Paul's avatarBrian Paul <brianp@vmware.com>
parent 87bf66da
......@@ -861,20 +861,22 @@ _mesa_format_image_size(mesa_format format, GLsizei width,
GLsizei height, GLsizei depth)
{
const struct gl_format_info *info = _mesa_get_format_info(format);
GLuint sz;
/* Strictly speaking, a conditional isn't needed here */
if (info->BlockWidth > 1 || info->BlockHeight > 1) {
if (info->BlockWidth > 1 || info->BlockHeight > 1 || info->BlockDepth > 1) {
/* compressed format (2D only for now) */
const GLuint bw = info->BlockWidth, bh = info->BlockHeight;
const GLuint bw = info->BlockWidth;
const GLuint bh = info->BlockHeight;
const GLuint bd = info->BlockDepth;
const GLuint wblocks = (width + bw - 1) / bw;
const GLuint hblocks = (height + bh - 1) / bh;
const GLuint sz = wblocks * hblocks * info->BytesPerBlock;
return sz * depth;
}
else {
const GLuint dblocks = (depth + bd - 1) / bd;
sz = wblocks * hblocks * dblocks * info->BytesPerBlock;
} else
/* non-compressed */
const GLuint sz = width * height * depth * info->BytesPerBlock;
sz = width * height * depth * info->BytesPerBlock;
return sz;
}
}
......@@ -887,23 +889,23 @@ _mesa_format_image_size64(mesa_format format, GLsizei width,
GLsizei height, GLsizei depth)
{
const struct gl_format_info *info = _mesa_get_format_info(format);
uint64_t sz;
/* Strictly speaking, a conditional isn't needed here */
if (info->BlockWidth > 1 || info->BlockHeight > 1) {
if (info->BlockWidth > 1 || info->BlockHeight > 1 || info->BlockDepth > 1) {
/* compressed format (2D only for now) */
const uint64_t bw = info->BlockWidth, bh = info->BlockHeight;
const uint64_t bw = info->BlockWidth;
const uint64_t bh = info->BlockHeight;
const uint64_t bd = info->BlockDepth;
const uint64_t wblocks = (width + bw - 1) / bw;
const uint64_t hblocks = (height + bh - 1) / bh;
const uint64_t sz = wblocks * hblocks * info->BytesPerBlock;
return sz * depth;
}
else {
const uint64_t dblocks = (depth + bd - 1) / bd;
sz = wblocks * hblocks * dblocks * info->BytesPerBlock;
} else
/* non-compressed */
const uint64_t sz = ((uint64_t) width *
(uint64_t) height *
(uint64_t) depth *
info->BytesPerBlock);
sz = ((uint64_t) width * (uint64_t) height *
(uint64_t) depth * info->BytesPerBlock);
return sz;
}
}
......
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