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, ...@@ -861,20 +861,22 @@ _mesa_format_image_size(mesa_format format, GLsizei width,
GLsizei height, GLsizei depth) GLsizei height, GLsizei depth)
{ {
const struct gl_format_info *info = _mesa_get_format_info(format); const struct gl_format_info *info = _mesa_get_format_info(format);
GLuint sz;
/* Strictly speaking, a conditional isn't needed here */ /* 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) */ /* 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 wblocks = (width + bw - 1) / bw;
const GLuint hblocks = (height + bh - 1) / bh; const GLuint hblocks = (height + bh - 1) / bh;
const GLuint sz = wblocks * hblocks * info->BytesPerBlock; const GLuint dblocks = (depth + bd - 1) / bd;
return sz * depth; sz = wblocks * hblocks * dblocks * info->BytesPerBlock;
} } else
else {
/* non-compressed */ /* non-compressed */
const GLuint sz = width * height * depth * info->BytesPerBlock; sz = width * height * depth * info->BytesPerBlock;
return sz;
} return sz;
} }
...@@ -887,23 +889,23 @@ _mesa_format_image_size64(mesa_format format, GLsizei width, ...@@ -887,23 +889,23 @@ _mesa_format_image_size64(mesa_format format, GLsizei width,
GLsizei height, GLsizei depth) GLsizei height, GLsizei depth)
{ {
const struct gl_format_info *info = _mesa_get_format_info(format); const struct gl_format_info *info = _mesa_get_format_info(format);
uint64_t sz;
/* Strictly speaking, a conditional isn't needed here */ /* 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) */ /* 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 wblocks = (width + bw - 1) / bw;
const uint64_t hblocks = (height + bh - 1) / bh; const uint64_t hblocks = (height + bh - 1) / bh;
const uint64_t sz = wblocks * hblocks * info->BytesPerBlock; const uint64_t dblocks = (depth + bd - 1) / bd;
return sz * depth; sz = wblocks * hblocks * dblocks * info->BytesPerBlock;
} } else
else {
/* non-compressed */ /* non-compressed */
const uint64_t sz = ((uint64_t) width * sz = ((uint64_t) width * (uint64_t) height *
(uint64_t) height * (uint64_t) depth * info->BytesPerBlock);
(uint64_t) depth *
info->BytesPerBlock); return sz;
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