Add a ValidateAttachmentTarget helper method.
This helper returns the appropriate error with the user specifies
an attachment that is invalid or out-of-range (for indexed color
attachments).
BUG=angle:571
Change-Id: I80ed347e3540579110e40e742fbacb0467cb85fd
Reviewed-on: https://chromium-review.googlesource.com/205604
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libGLESv2/validationES.cpp b/src/libGLESv2/validationES.cpp
index f334ea1..cda2bc8 100644
--- a/src/libGLESv2/validationES.cpp
+++ b/src/libGLESv2/validationES.cpp
@@ -246,6 +246,40 @@
}
}
+bool ValidateAttachmentTarget(const gl::Context *context, GLenum attachment)
+{
+ if (attachment >= GL_COLOR_ATTACHMENT0_EXT && attachment <= GL_COLOR_ATTACHMENT15_EXT)
+ {
+ const unsigned int colorAttachment = (attachment - GL_COLOR_ATTACHMENT0_EXT);
+
+ if (colorAttachment >= context->getMaximumRenderTargets())
+ {
+ return gl::error(GL_INVALID_VALUE, false);
+ }
+ }
+ else
+ {
+ switch (attachment)
+ {
+ case GL_DEPTH_ATTACHMENT:
+ case GL_STENCIL_ATTACHMENT:
+ break;
+
+ case GL_DEPTH_STENCIL_ATTACHMENT:
+ if (context->getClientVersion() < 3)
+ {
+ return gl::error(GL_INVALID_ENUM, false);
+ }
+ break;
+
+ default:
+ return gl::error(GL_INVALID_ENUM, false);
+ }
+ }
+
+ return true;
+}
+
bool ValidateRenderbufferStorageParameters(const gl::Context *context, GLenum target, GLsizei samples,
GLenum internalformat, GLsizei width, GLsizei height,
bool angleExtension)
@@ -334,32 +368,9 @@
return gl::error(GL_INVALID_OPERATION, false);
}
- if (attachment >= GL_COLOR_ATTACHMENT0_EXT && attachment <= GL_COLOR_ATTACHMENT15_EXT)
+ if (!ValidateAttachmentTarget(context, attachment))
{
- const unsigned int colorAttachment = (attachment - GL_COLOR_ATTACHMENT0_EXT);
-
- if (colorAttachment >= context->getMaximumRenderTargets())
- {
- return gl::error(GL_INVALID_VALUE, false);
- }
- }
- else
- {
- switch (attachment)
- {
- case GL_DEPTH_ATTACHMENT:
- break;
- case GL_STENCIL_ATTACHMENT:
- break;
- case GL_DEPTH_STENCIL_ATTACHMENT:
- if (context->getClientVersion() < 3)
- {
- return gl::error(GL_INVALID_ENUM, false);
- }
- break;
- default:
- return gl::error(GL_INVALID_ENUM, false);
- }
+ return false;
}
// [OpenGL ES 2.0.25] Section 4.4.3 page 112