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>
This commit is contained in:

committed by
Eduardo Lima Mitev

parent
467f462c75
commit
aed633bb97
@@ -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 */
|
||||
|
Reference in New Issue
Block a user