summaryrefslogtreecommitdiffstats
path: root/src/mesa/main/formatquery.c
diff options
context:
space:
mode:
authorAntia Puentes <apuentes@igalia.com>2015-12-19 20:23:29 +0100
committerEduardo Lima Mitev <elima@igalia.com>2016-03-03 15:14:07 +0100
commitaed633bb97443749f250951553287cde021a1aaa (patch)
tree8c18fab5472396b69fe02393c8e6571225f7877f /src/mesa/main/formatquery.c
parent467f462c75281083f91846f176d6fd4a5d1afbbd (diff)
downloadexternal_mesa3d-aed633bb97443749f250951553287cde021a1aaa.zip
external_mesa3d-aed633bb97443749f250951553287cde021a1aaa.tar.gz
external_mesa3d-aed633bb97443749f250951553287cde021a1aaa.tar.bz2
mesa/formatquery: Added compressed texture related queries
From the ARB_internalformat_query2 specification: "- TEXTURE_COMPRESSED: If <internalformat> is a compressed format that is supported for this type of resource, TRUE is returned in <params>. If the internal format is not compressed, or the type of resource is not supported, FALSE is returned. - TEXTURE_COMPRESSED_BLOCK_WIDTH: If the resource contains a compressed format, the width of a compressed block (in bytes) is returned in <params>. If the internal format is not compressed, or the resource is not supported, 0 is returned. - TEXTURE_COMPRESSED_BLOCK_HEIGHT: If the resource contains a compressed format, the height of a compressed block (in bytes) is returned in <params>. If the internal format is not compressed, or the resource is not supported, 0 is returned. - TEXTURE_COMPRESSED_BLOCK_SIZE: If the resource contains a compressed format the number of bytes per block is returned in <params>. If the internal format is not compressed, or the resource is not supported, 0 is returned. (combined with the above, allows the bitrate to be computed, and may be useful in conjunction with ARB_compressed_texture_pixel_storage)." Reviewed-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'src/mesa/main/formatquery.c')
-rw-r--r--src/mesa/main/formatquery.c35
1 files changed, 27 insertions, 8 deletions
diff --git a/src/mesa/main/formatquery.c b/src/mesa/main/formatquery.c
index c2b896c..a921566 100644
--- a/src/mesa/main/formatquery.c
+++ b/src/mesa/main/formatquery.c
@@ -34,6 +34,7 @@
#include "get.h"
#include "genmipmap.h"
#include "shaderimage.h"
+#include "texcompress.h"
static bool
_is_renderable(struct gl_context *ctx, GLenum internalformat)
@@ -1332,20 +1333,38 @@ _mesa_GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname,
break;
case GL_TEXTURE_COMPRESSED:
- /* @TODO */
+ buffer[0] = _mesa_is_compressed_format(ctx, internalformat);
break;
case GL_TEXTURE_COMPRESSED_BLOCK_WIDTH:
- /* @TODO */
- break;
-
case GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT:
- /* @TODO */
- break;
+ case GL_TEXTURE_COMPRESSED_BLOCK_SIZE: {
+ mesa_format mesaformat;
+ GLint block_size;
- case GL_TEXTURE_COMPRESSED_BLOCK_SIZE:
- /* @TODO */
+ mesaformat = _mesa_glenum_to_compressed_format(internalformat);
+ if (mesaformat == MESA_FORMAT_NONE)
+ goto end;
+
+ block_size = _mesa_get_format_bytes(mesaformat);
+ assert(block_size > 0);
+
+ if (pname == GL_TEXTURE_COMPRESSED_BLOCK_SIZE) {
+ buffer[0] = block_size;
+ } else {
+ GLuint bwidth, bheight;
+
+ /* Returns the width and height in pixels. We return bytes */
+ _mesa_get_format_block_size(mesaformat, &bwidth, &bheight);
+ assert(bwidth > 0 && bheight > 0);
+
+ if (pname == GL_TEXTURE_COMPRESSED_BLOCK_WIDTH)
+ buffer[0] = block_size / bheight;
+ else
+ buffer[0] = block_size / bwidth;
+ }
break;
+ }
case GL_CLEAR_BUFFER:
/* @TODO */