Make PBO and map buffer extensions enableable.
BUG=angleproject:1523
Change-Id: Ia934a186ce490083f93b59eedd3bdf48e0fcb727
Reviewed-on: https://chromium-review.googlesource.com/685799
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
diff --git a/src/tests/gl_tests/WebGLCompatibilityTest.cpp b/src/tests/gl_tests/WebGLCompatibilityTest.cpp
index 85d1861..ff14a04 100644
--- a/src/tests/gl_tests/WebGLCompatibilityTest.cpp
+++ b/src/tests/gl_tests/WebGLCompatibilityTest.cpp
@@ -447,6 +447,80 @@
glDeleteProgram(program);
}
+// Test enabling the GL_NV_pixel_buffer_object extension
+TEST_P(WebGLCompatibilityTest, EnablePixelBufferObjectExtensions)
+{
+ EXPECT_FALSE(extensionEnabled("GL_NV_pixel_buffer_object"));
+ EXPECT_FALSE(extensionEnabled("GL_OES_mapbuffer"));
+ EXPECT_FALSE(extensionEnabled("GL_EXT_map_buffer_range"));
+
+ // These extensions become core in in ES3/WebGL2.
+ ANGLE_SKIP_TEST_IF(getClientMajorVersion() >= 3);
+
+ GLBuffer buffer;
+ glBindBuffer(GL_PIXEL_PACK_BUFFER, buffer);
+ EXPECT_GL_ERROR(GL_INVALID_ENUM);
+
+ if (extensionRequestable("GL_NV_pixel_buffer_object"))
+ {
+ glRequestExtensionANGLE("GL_NV_pixel_buffer_object");
+ EXPECT_GL_NO_ERROR();
+
+ glBindBuffer(GL_PIXEL_PACK_BUFFER, buffer);
+ EXPECT_GL_NO_ERROR();
+
+ glBufferData(GL_PIXEL_PACK_BUFFER, 4, nullptr, GL_STATIC_DRAW);
+ glReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
+ EXPECT_GL_NO_ERROR();
+ }
+}
+
+// Test enabling the GL_OES_mapbuffer and GL_EXT_map_buffer_range extensions
+TEST_P(WebGLCompatibilityTest, EnableMapBufferExtensions)
+{
+ EXPECT_FALSE(extensionEnabled("GL_OES_mapbuffer"));
+ EXPECT_FALSE(extensionEnabled("GL_EXT_map_buffer_range"));
+
+ // These extensions become core in in ES3/WebGL2.
+ ANGLE_SKIP_TEST_IF(getClientMajorVersion() >= 3);
+
+ GLBuffer buffer;
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffer);
+ glBufferData(GL_ELEMENT_ARRAY_BUFFER, 4, nullptr, GL_STATIC_DRAW);
+
+ glMapBufferOES(GL_ELEMENT_ARRAY_BUFFER, GL_WRITE_ONLY_OES);
+ EXPECT_GL_ERROR(GL_INVALID_OPERATION);
+
+ glMapBufferRangeEXT(GL_ELEMENT_ARRAY_BUFFER, 0, 4, GL_MAP_WRITE_BIT);
+ EXPECT_GL_ERROR(GL_INVALID_OPERATION);
+
+ GLint access = 0;
+ glGetBufferParameteriv(GL_ELEMENT_ARRAY_BUFFER, GL_BUFFER_ACCESS_OES, &access);
+ EXPECT_GL_ERROR(GL_INVALID_ENUM);
+
+ if (extensionRequestable("GL_OES_mapbuffer"))
+ {
+ glRequestExtensionANGLE("GL_OES_mapbuffer");
+ EXPECT_GL_NO_ERROR();
+
+ glMapBufferOES(GL_ELEMENT_ARRAY_BUFFER, GL_WRITE_ONLY_OES);
+ glUnmapBufferOES(GL_ELEMENT_ARRAY_BUFFER);
+ glGetBufferParameteriv(GL_ELEMENT_ARRAY_BUFFER, GL_BUFFER_ACCESS_OES, &access);
+ EXPECT_GL_NO_ERROR();
+ }
+
+ if (extensionRequestable("GL_EXT_map_buffer_range"))
+ {
+ glRequestExtensionANGLE("GL_EXT_map_buffer_range");
+ EXPECT_GL_NO_ERROR();
+
+ glMapBufferRangeEXT(GL_ELEMENT_ARRAY_BUFFER, 0, 4, GL_MAP_WRITE_BIT);
+ glUnmapBufferOES(GL_ELEMENT_ARRAY_BUFFER);
+ glGetBufferParameteriv(GL_ELEMENT_ARRAY_BUFFER, GL_BUFFER_ACCESS_OES, &access);
+ EXPECT_GL_NO_ERROR();
+ }
+}
+
// Verify that the context generates the correct error when the framebuffer attachments are
// different sizes
TEST_P(WebGLCompatibilityTest, FramebufferAttachmentSizeMissmatch)