Add additional ES2 and WebGL 1.0 Validation
Adds validation for various cases.
Adds corresponding unit tests.
Change-Id: I9451d286bcf2d6fa32de495e5d0bdec1eb5c955d
Reviewed-on: https://chromium-review.googlesource.com/633157
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
diff --git a/src/tests/gl_tests/WebGLCompatibilityTest.cpp b/src/tests/gl_tests/WebGLCompatibilityTest.cpp
index 4ebafb7..a46bac8 100644
--- a/src/tests/gl_tests/WebGLCompatibilityTest.cpp
+++ b/src/tests/gl_tests/WebGLCompatibilityTest.cpp
@@ -978,6 +978,21 @@
glDeleteShader(shader);
}
+// Tests bindAttribLocations for reserved prefixes and length limits
+TEST_P(WebGLCompatibilityTest, BindAttribLocationLimitation)
+{
+ constexpr int maxLocStringLength = 256;
+ const std::string tooLongString(maxLocStringLength + 1, '_');
+
+ glBindAttribLocation(0, 0, "_webgl_var");
+
+ EXPECT_GL_ERROR(GL_INVALID_OPERATION);
+
+ glBindAttribLocation(0, 0, static_cast<const GLchar *>(tooLongString.c_str()));
+
+ EXPECT_GL_ERROR(GL_INVALID_VALUE);
+}
+
// Test the checks for OOB reads in the vertex buffers, instanced version
TEST_P(WebGL2CompatibilityTest, DrawArraysBufferOutOfBoundsInstanced)
{
@@ -1306,7 +1321,7 @@
glEnableVertexAttribArray(posLocation);
GLBuffer indexBuffer;
- const GLubyte indices[] = {0, 0, 0, 0, 0, 0, 0};
+ const GLubyte indices[] = {0, 0, 0, 0, 0, 0, 0, 0};
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer.get());
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
@@ -1317,10 +1332,10 @@
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_BYTE, zeroIndices);
ASSERT_GL_NO_ERROR();
- glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, zeroIndices);
+ glDrawElements(GL_TRIANGLES, 4, GL_UNSIGNED_SHORT, zeroIndices);
ASSERT_GL_NO_ERROR();
- glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, zeroIndices + 1);
+ glDrawElements(GL_TRIANGLES, 4, GL_UNSIGNED_SHORT, zeroIndices + 1);
EXPECT_GL_ERROR(GL_INVALID_OPERATION);
}
@@ -2990,6 +3005,17 @@
EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::green);
}
+// Tests bindAttribLocations for length limit
+TEST_P(WebGL2CompatibilityTest, BindAttribLocationLimitation)
+{
+ constexpr int maxLocStringLength = 1024;
+ const std::string tooLongString(maxLocStringLength + 1, '_');
+
+ glBindAttribLocation(0, 0, static_cast<const GLchar *>(tooLongString.c_str()));
+
+ EXPECT_GL_ERROR(GL_INVALID_VALUE);
+}
+
// Use this to select which configurations (e.g. which renderer, which GLES major version) these
// tests should be run against.
ANGLE_INSTANTIATE_TEST(WebGLCompatibilityTest,