Reorganized the parameters to validateES3CopyTexImageParameters and fixed a bug…

Reorganized the parameters to validateES3CopyTexImageParameters and fixed a bug with compressed destination textures. TRAC #22956 Signed-off-by: Jamie Madill Signed-off-by: Shannon Woods Author: Geoff Lang git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2353 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 155377cd
...@@ -223,9 +223,9 @@ bool validateSubImageParamsCube(bool compressed, GLsizei width, GLsizei height, ...@@ -223,9 +223,9 @@ bool validateSubImageParamsCube(bool compressed, GLsizei width, GLsizei height,
return true; return true;
} }
bool validateES3TexImageFormat(gl::Context *context, GLenum target, GLint level, GLint internalformat, bool isCompressed, bool isSubImage, bool validateES3TexImageParameters(gl::Context *context, GLenum target, GLint level, GLint internalformat, bool isCompressed, bool isSubImage,
GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
GLint border, GLenum format, GLenum type) GLint border, GLenum format, GLenum type)
{ {
// Validate image size // Validate image size
if (level < 0 || width < 0 || height < 0 || depth < 0 ) if (level < 0 || width < 0 || height < 0 || depth < 0 )
...@@ -464,9 +464,9 @@ bool validateES3TexImageFormat(gl::Context *context, GLenum target, GLint level, ...@@ -464,9 +464,9 @@ bool validateES3TexImageFormat(gl::Context *context, GLenum target, GLint level,
return true; return true;
} }
bool validateCopyTexImageParameters(gl::Context *context, GLenum target, bool isCompressed, GLint level, bool validateES3CopyTexImageParameters(gl::Context *context, GLenum target, GLint level, GLenum internalformat,
GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, bool isSubImage, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y,
GLsizei width, GLsizei height) GLsizei width, GLsizei height, GLint border)
{ {
if (level < 0 || xoffset < 0 || yoffset < 0 || zoffset < 0 || width < 0 || height < 0) if (level < 0 || xoffset < 0 || yoffset < 0 || zoffset < 0 || width < 0 || height < 0)
{ {
...@@ -483,6 +483,11 @@ bool validateCopyTexImageParameters(gl::Context *context, GLenum target, bool is ...@@ -483,6 +483,11 @@ bool validateCopyTexImageParameters(gl::Context *context, GLenum target, bool is
return false; return false;
} }
if (border != 0)
{
return gl::error(GL_INVALID_VALUE, false);
}
if (level > context->getMaximumTextureLevel()) if (level > context->getMaximumTextureLevel())
{ {
return gl::error(GL_INVALID_VALUE, false); return gl::error(GL_INVALID_VALUE, false);
...@@ -569,12 +574,12 @@ bool validateCopyTexImageParameters(gl::Context *context, GLenum target, bool is ...@@ -569,12 +574,12 @@ bool validateCopyTexImageParameters(gl::Context *context, GLenum target, bool is
return gl::error(GL_INVALID_OPERATION, false); return gl::error(GL_INVALID_OPERATION, false);
} }
if (isCompressed != textureCompressed) if (texture->isImmutable() && !isSubImage)
{ {
return gl::error(GL_INVALID_OPERATION, false); return gl::error(GL_INVALID_OPERATION, false);
} }
if (isCompressed) if (textureCompressed)
{ {
if ((width % 4 != 0 && width != textureLevelWidth) || if ((width % 4 != 0 && width != textureLevelWidth) ||
(height % 4 != 0 && height != textureLevelHeight)) (height % 4 != 0 && height != textureLevelHeight))
...@@ -7683,7 +7688,7 @@ void __stdcall glTexImage3D(GLenum target, GLint level, GLint internalformat, GL ...@@ -7683,7 +7688,7 @@ void __stdcall glTexImage3D(GLenum target, GLint level, GLint internalformat, GL
} }
// validateES3TexImageFormat sets the error code if there is an error // validateES3TexImageFormat sets the error code if there is an error
if (!validateES3TexImageFormat(context, target, level, internalformat, false, false, if (!validateES3TexImageParameters(context, target, level, internalformat, false, false,
0, 0, 0, width, height, depth, border, format, type)) 0, 0, 0, width, height, depth, border, format, type))
{ {
return; return;
...@@ -7740,7 +7745,7 @@ void __stdcall glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint ...@@ -7740,7 +7745,7 @@ void __stdcall glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint
} }
// validateES3TexImageFormat sets the error code if there is an error // validateES3TexImageFormat sets the error code if there is an error
if (!validateES3TexImageFormat(context, target, level, GL_NONE, false, true, if (!validateES3TexImageParameters(context, target, level, GL_NONE, false, true,
xoffset, yoffset, zoffset, width, height, depth, 0, xoffset, yoffset, zoffset, width, height, depth, 0,
format, type)) format, type))
{ {
...@@ -7791,8 +7796,8 @@ void __stdcall glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GL ...@@ -7791,8 +7796,8 @@ void __stdcall glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GL
return gl::error(GL_INVALID_OPERATION); return gl::error(GL_INVALID_OPERATION);
} }
if (!validateCopyTexImageParameters(context, target, false, level, xoffset, yoffset, zoffset, if (!validateES3CopyTexImageParameters(context, target, level, GL_NONE, false, xoffset, yoffset, zoffset,
x, y, width, height)) x, y, width, height, 0))
{ {
return; return;
} }
...@@ -7846,8 +7851,8 @@ void __stdcall glCompressedTexImage3D(GLenum target, GLint level, GLenum interna ...@@ -7846,8 +7851,8 @@ void __stdcall glCompressedTexImage3D(GLenum target, GLint level, GLenum interna
} }
// validateES3TexImageFormat sets the error code if there is an error // validateES3TexImageFormat sets the error code if there is an error
if (!validateES3TexImageFormat(context, target, level, internalformat, true, false, if (!validateES3TexImageParameters(context, target, level, internalformat, true, false,
0, 0, 0, width, height, depth, border, GL_NONE, GL_NONE)) 0, 0, 0, width, height, depth, border, GL_NONE, GL_NONE))
{ {
return; return;
} }
...@@ -7908,8 +7913,8 @@ void __stdcall glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffs ...@@ -7908,8 +7913,8 @@ void __stdcall glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffs
} }
// validateES3TexImageFormat sets the error code if there is an error // validateES3TexImageFormat sets the error code if there is an error
if (!validateES3TexImageFormat(context, target, level, GL_NONE, true, true, if (!validateES3TexImageParameters(context, target, level, GL_NONE, true, true,
0, 0, 0, width, height, depth, 0, GL_NONE, GL_NONE)) 0, 0, 0, width, height, depth, 0, GL_NONE, GL_NONE))
{ {
return; return;
} }
......
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