Report errors for unsupported Depth/stencil texture operations

Trac #20875 Signed-off-by: Nicolas Capens git-svn-id: https://angleproject.googlecode.com/svn/trunk@1105 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 835a95a5
...@@ -2163,6 +2163,11 @@ bool Texture2D::isCompressed(GLint level) const ...@@ -2163,6 +2163,11 @@ bool Texture2D::isCompressed(GLint level) const
return IsCompressed(getInternalFormat(level)); return IsCompressed(getInternalFormat(level));
} }
bool Texture2D::isDepth(GLint level) const
{
return IsDepthTexture(getInternalFormat(level));
}
IDirect3DBaseTexture9 *Texture2D::getBaseTexture() const IDirect3DBaseTexture9 *Texture2D::getBaseTexture() const
{ {
return mTexStorage ? mTexStorage->getBaseTexture() : NULL; return mTexStorage ? mTexStorage->getBaseTexture() : NULL;
......
...@@ -284,6 +284,7 @@ class Texture2D : public Texture ...@@ -284,6 +284,7 @@ class Texture2D : public Texture
GLenum getInternalFormat(GLint level) const; GLenum getInternalFormat(GLint level) const;
D3DFORMAT getD3DFormat(GLint level) const; D3DFORMAT getD3DFormat(GLint level) const;
bool isCompressed(GLint level) const; bool isCompressed(GLint level) const;
bool isDepth(GLint level) const;
void setImage(GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels); void setImage(GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels);
void setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels); void setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels);
......
...@@ -1297,6 +1297,19 @@ void __stdcall glCopyTexImage2D(GLenum target, GLint level, GLenum internalforma ...@@ -1297,6 +1297,19 @@ void __stdcall glCopyTexImage2D(GLenum target, GLint level, GLenum internalforma
return error(GL_INVALID_ENUM); return error(GL_INVALID_ENUM);
} }
break; break;
case GL_DEPTH_COMPONENT:
case GL_DEPTH_COMPONENT16:
case GL_DEPTH_COMPONENT32_OES:
case GL_DEPTH_STENCIL_OES:
case GL_DEPTH24_STENCIL8_OES:
if (context->supportsDepthTextures())
{
return error(GL_INVALID_OPERATION);
}
else
{
return error(GL_INVALID_ENUM);
}
default: default:
return error(GL_INVALID_ENUM); return error(GL_INVALID_ENUM);
} }
...@@ -1461,6 +1474,9 @@ void __stdcall glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GL ...@@ -1461,6 +1474,9 @@ void __stdcall glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GL
case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE: case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE:
case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE: case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE:
return error(GL_INVALID_OPERATION); return error(GL_INVALID_OPERATION);
case GL_DEPTH_COMPONENT:
case GL_DEPTH_STENCIL_OES:
return error(GL_INVALID_OPERATION);
default: default:
return error(GL_INVALID_OPERATION); return error(GL_INVALID_OPERATION);
} }
...@@ -2506,6 +2522,10 @@ void __stdcall glGenerateMipmap(GLenum target) ...@@ -2506,6 +2522,10 @@ void __stdcall glGenerateMipmap(GLenum target)
{ {
return error(GL_INVALID_OPERATION); return error(GL_INVALID_OPERATION);
} }
if (tex2d->isDepth(0))
{
return error(GL_INVALID_OPERATION);
}
tex2d->generateMipmaps(); tex2d->generateMipmaps();
break; break;
...@@ -5236,6 +5256,15 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL ...@@ -5236,6 +5256,15 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL
{ {
return error(GL_INVALID_VALUE); return error(GL_INVALID_VALUE);
} }
if (target != GL_TEXTURE_2D)
{
return error(GL_INVALID_OPERATION);
}
// OES_depth_texture supports loading depth data, but ANGLE_depth_texture does not
if (pixels != NULL)
{
return error(GL_INVALID_OPERATION);
}
break; break;
default: default:
break; break;
...@@ -5514,6 +5543,10 @@ void __stdcall glTexStorage2DEXT(GLenum target, GLsizei levels, GLenum internalf ...@@ -5514,6 +5543,10 @@ void __stdcall glTexStorage2DEXT(GLenum target, GLsizei levels, GLenum internalf
{ {
return error(GL_INVALID_ENUM); return error(GL_INVALID_ENUM);
} }
if (target != GL_TEXTURE_2D)
{
return error(GL_INVALID_OPERATION);
}
break; break;
default: default:
break; break;
...@@ -5624,6 +5657,12 @@ void __stdcall glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint ...@@ -5624,6 +5657,12 @@ void __stdcall glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint
{ {
return error(GL_INVALID_ENUM); return error(GL_INVALID_ENUM);
} }
if (target != GL_TEXTURE_2D)
{
return error(GL_INVALID_OPERATION);
}
// OES_depth_texture supports loading depth data, but ANGLE_depth_texture does not
return error(GL_INVALID_OPERATION);
} }
if (target == GL_TEXTURE_2D) if (target == GL_TEXTURE_2D)
......
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