Improve glCopyTexSubImage2D and glReadPixels validation
glCopyTexSubImage2d and glReadPixels should generate a
GL_INVALID_OPERATION when GL_NONE is specified as a color buffer.
There are two tests added which cover glCopyTexSubImage2D and
glReadPixels.
BUG=angleproject:1445
TEST=angle_end2end_tests
Change-Id: I3ab1428aad7eee96ca2330909e2b6f765f539705
Reviewed-on: https://chromium-review.googlesource.com/360860
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
diff --git a/src/libANGLE/validationES.cpp b/src/libANGLE/validationES.cpp
index 2a8c61b..f574e22 100644
--- a/src/libANGLE/validationES.cpp
+++ b/src/libANGLE/validationES.cpp
@@ -1103,6 +1103,13 @@
const Framebuffer *framebuffer = context->getGLState().getReadFramebuffer();
ASSERT(framebuffer);
+
+ if (framebuffer->getReadBufferState() == GL_NONE)
+ {
+ context->handleError(Error(GL_INVALID_OPERATION, "Read buffer is GL_NONE"));
+ return false;
+ }
+
const FramebufferAttachment *readBuffer = framebuffer->getReadColorbuffer();
if (!readBuffer)
{
@@ -1599,6 +1606,13 @@
const Framebuffer *framebuffer = context->getGLState().getReadFramebuffer();
ASSERT(framebuffer);
+
+ if (framebuffer->getReadBufferState() == GL_NONE)
+ {
+ context->handleError(Error(GL_INVALID_OPERATION, "Read buffer is GL_NONE"));
+ return false;
+ }
+
const FramebufferAttachment *attachment = framebuffer->getReadColorbuffer();
if (!attachment)
{
@@ -1674,6 +1688,12 @@
return false;
}
+ if (readFramebuffer->getReadBufferState() == GL_NONE)
+ {
+ context->handleError(Error(GL_INVALID_OPERATION, "Read buffer is GL_NONE"));
+ return false;
+ }
+
const gl::Caps &caps = context->getCaps();
GLuint maxDimension = 0;