mesa: move _mesa_compressed_texture_pixel_storage_error_check()

to pixelstore.c, add const qualifier to the 'packing' parameter.
Add comments.

Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
Brian Paul 2014-08-15 16:28:59 -06:00
parent 9b4c6da7f0
commit cf8b680f40
5 changed files with 61 additions and 46 deletions

View file

@ -284,3 +284,45 @@ _mesa_init_pixelstore( struct gl_context *ctx )
_mesa_reference_buffer_object(ctx, &ctx->DefaultPacking.BufferObj,
ctx->Shared->NullBufferObj);
}
/**
* Check if the given compressed pixel storage parameters are legal.
* Record a GL error if illegal.
* \return true if legal, false if illegal
*/
bool
_mesa_compressed_pixel_storage_error_check(
struct gl_context *ctx,
GLint dimensions,
const struct gl_pixelstore_attrib *packing,
const char *caller)
{
if (!_mesa_is_desktop_gl(ctx) || !packing->CompressedBlockSize)
return true;
if (packing->CompressedBlockWidth &&
packing->SkipPixels % packing->CompressedBlockWidth) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"%s(skip-pixels %% block-width)", caller);
return false;
}
if (dimensions > 1 &&
packing->CompressedBlockHeight &&
packing->SkipRows % packing->CompressedBlockHeight) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"%s(skip-rows %% block-height)", caller);
return false;
}
if (dimensions > 2 &&
packing->CompressedBlockDepth &&
packing->SkipImages % packing->CompressedBlockDepth) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"%s(skip-images %% block-depth)", caller);
return false;
}
return true;
}

View file

@ -49,4 +49,12 @@ extern void
_mesa_init_pixelstore( struct gl_context *ctx );
extern bool
_mesa_compressed_pixel_storage_error_check(
struct gl_context *ctx,
GLint dimensions,
const struct gl_pixelstore_attrib *packing,
const char *caller);
#endif

View file

@ -40,6 +40,7 @@
#include "mtypes.h"
#include "pack.h"
#include "pbo.h"
#include "pixelstore.h"
#include "texcompress.h"
#include "texgetimage.h"
#include "teximage.h"
@ -1008,9 +1009,9 @@ getcompressedteximage_error_check(struct gl_context *ctx, GLenum target,
/* Check for invalid pixel storage modes */
dimensions = _mesa_get_texture_dimensions(texImage->TexObject->Target);
if (!_mesa_compressed_texture_pixel_storage_error_check(ctx, dimensions,
&ctx->Pack,
"glGetCompressedTexImageARB")) {
if (!_mesa_compressed_pixel_storage_error_check(ctx, dimensions,
&ctx->Pack,
"glGetCompressedTexImageARB")) {
return GL_TRUE;
}

View file

@ -41,6 +41,7 @@
#include "imports.h"
#include "macros.h"
#include "multisample.h"
#include "pixelstore.h"
#include "state.h"
#include "texcompress.h"
#include "texcompress_cpal.h"
@ -2264,36 +2265,6 @@ texture_error_check( struct gl_context *ctx,
}
bool
_mesa_compressed_texture_pixel_storage_error_check(struct gl_context *ctx,
GLint dimensions,
struct gl_pixelstore_attrib *packing,
const char *caller)
{
if (!_mesa_is_desktop_gl(ctx) || !packing->CompressedBlockSize)
return true;
if (packing->CompressedBlockWidth && packing->SkipPixels % packing->CompressedBlockWidth) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"%s(skip-pixels %% block-width)", caller);
return false;
}
if (dimensions > 1 && packing->CompressedBlockHeight && packing->SkipRows % packing->CompressedBlockHeight) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"%s(skip-rows %% block-height)", caller);
return false;
}
if (dimensions > 2 && packing->CompressedBlockDepth && packing->SkipImages % packing->CompressedBlockDepth) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"%s(skip-images %% block-depth)", caller);
return false;
}
return true;
}
/**
* Error checking for glCompressedTexImage[123]D().
* Note that the width, height and depth values are not fully error checked
@ -2403,9 +2374,9 @@ compressed_texture_error_check(struct gl_context *ctx, GLint dimensions,
}
/* Check for invalid pixel storage modes */
if (!_mesa_compressed_texture_pixel_storage_error_check(ctx, dimensions,
&ctx->Unpack,
"glCompressedTexImage")) {
if (!_mesa_compressed_pixel_storage_error_check(ctx, dimensions,
&ctx->Unpack,
"glCompressedTexImage")) {
return GL_FALSE;
}
@ -4272,13 +4243,12 @@ compressed_subtexture_error_check(struct gl_context *ctx, GLint dims,
}
/* Check for invalid pixel storage modes */
if (!_mesa_compressed_texture_pixel_storage_error_check(ctx, dims,
&ctx->Unpack,
"glCompressedTexSubImage")) {
if (!_mesa_compressed_pixel_storage_error_check(ctx, dims,
&ctx->Unpack,
"glCompressedTexSubImage")) {
return GL_FALSE;
}
expectedSize = compressed_tex_size(width, height, depth, format);
if (expectedSize != imageSize) {
_mesa_error(ctx, GL_INVALID_VALUE, "glCompressedTexSubImage%uD(size=%d)",

View file

@ -339,12 +339,6 @@ _mesa_TexStorage3DMultisample(GLenum target, GLsizei samples,
GLsizei height, GLsizei depth,
GLboolean fixedsamplelocations);
bool
_mesa_compressed_texture_pixel_storage_error_check(struct gl_context *ctx,
GLint dimensions,
struct gl_pixelstore_attrib *packing,
const char *caller);
/*@}*/
#ifdef __cplusplus