Index: ui/gl/test/gl_image_test_template.h |
diff --git a/ui/gl/test/gl_image_test_template.h b/ui/gl/test/gl_image_test_template.h |
index e10c64c77396624d3dda5c5e1faa97e01c202787..9b8a346f79df11eccfc9661bb7c24146b0194388 100644 |
--- a/ui/gl/test/gl_image_test_template.h |
+++ b/ui/gl/test/gl_image_test_template.h |
@@ -145,6 +145,9 @@ class GLImageTest : public testing::Test { |
TYPED_TEST_CASE_P(GLImageTest); |
TYPED_TEST_P(GLImageTest, CreateAndDestroy) { |
+ if (!this->delegate_.IsSupported()) |
+ return; |
+ |
const gfx::Size small_image_size(4, 4); |
const gfx::Size large_image_size(512, 512); |
const uint8_t image_color[] = {0, 0xff, 0, 0xff}; |
@@ -183,6 +186,9 @@ class GLImageZeroInitializeTest : public GLImageTest<GLImageTestDelegate> {}; |
TYPED_TEST_CASE_P(GLImageZeroInitializeTest); |
TYPED_TEST_P(GLImageZeroInitializeTest, ZeroInitialize) { |
+ // Ozone platform knows the supported format in runtime. |
+ if (!this->delegate_.IsSupported()) |
dshwang
2016/04/08 13:16:31
reveman suggested to keep static way, while ozone
|
+ return; |
#if defined(OS_MACOSX) |
// This functionality is disabled on Mavericks because it breaks PDF |
// rendering. https://crbug.com/594343. |
@@ -235,11 +241,17 @@ class GLImageCopyTest : public GLImageTest<GLImageTestDelegate> {}; |
TYPED_TEST_CASE_P(GLImageCopyTest); |
TYPED_TEST_P(GLImageCopyTest, CopyTexImage) { |
+ if (!this->delegate_.IsSupported()) |
+ return; |
+ |
const gfx::Size image_size(256, 256); |
// These values are picked so that RGB -> YUV on the CPU converted |
// back to RGB on the GPU produces the original RGB values without |
// any error. |
- const uint8_t image_color[] = {0x10, 0x20, 0, 0xff}; |
+ uint8_t image_color[] = {0x10, 0x20, 0x00, 0xff}; |
+ // glReadPixels(.., GL_RGBA, ..) for RED texture returns (R, 0x00, 0x00, 0xff) |
+ if (gfx::BufferFormat::R_8 == this->delegate_.GetBufferFormat()) |
+ image_color[1] = 0x00; |
const uint8_t texture_color[] = {0, 0, 0xff, 0xff}; |
GLuint framebuffer = |
@@ -289,6 +301,59 @@ TYPED_TEST_P(GLImageCopyTest, CopyTexImage) { |
// handles CopyTexImage correctly. |
REGISTER_TYPED_TEST_CASE_P(GLImageCopyTest, CopyTexImage); |
+template <typename GLImageTestDelegate> |
+class GLImageBindTest : public GLImageTest<GLImageTestDelegate> {}; |
+ |
+TYPED_TEST_CASE_P(GLImageBindTest); |
+ |
+TYPED_TEST_P(GLImageBindTest, BindTexImage) { |
dshwang
2016/04/08 13:16:31
android can reuse this test also.
|
+ if (!this->delegate_.IsSupported()) |
+ return; |
+ |
+ const gfx::Size image_size(256, 256); |
+ // These values are picked so that RGB -> YUV on the CPU converted |
+ // back to RGB on the GPU produces the original RGB values without |
+ // any error. |
+ uint8_t image_color[] = {0x10, 0x20, 0x00, 0xff}; |
+ // glReadPixels(.., GL_RGBA, ..) for RED texture returns (R, 0x00, 0x00, 0xff) |
+ if (gfx::BufferFormat::R_8 == this->delegate_.GetBufferFormat()) |
+ image_color[1] = 0x00; |
+ |
+ GLuint framebuffer = |
+ GLTestHelper::SetupFramebuffer(image_size.width(), image_size.height()); |
+ ASSERT_TRUE(framebuffer); |
+ glBindFramebufferEXT(GL_FRAMEBUFFER, framebuffer); |
+ glViewport(0, 0, image_size.width(), image_size.height()); |
+ |
+ // Create a solid color green image of preferred format. This must succeed |
+ // in order for a GLImage to be conformant. |
+ scoped_refptr<gl::GLImage> image = |
+ this->delegate_.CreateSolidColorImage(image_size, image_color); |
+ ASSERT_TRUE(image); |
+ |
+ // Bind |image| to |texture|. |
+ unsigned target = this->delegate_.GetTextureTarget(); |
+ GLuint texture = GLTestHelper::CreateTexture(target); |
+ bool rv = image->BindTexImage(target); |
+ EXPECT_TRUE(rv); |
+ |
+ // Draw |texture| to viewport. |
+ DrawTextureQuad(target, image_size); |
+ |
+ // Read back pixels to check expectations. |
+ GLTestHelper::CheckPixels(0, 0, image_size.width(), image_size.height(), |
+ image_color); |
+ |
+ // Clean up. |
+ glDeleteTextures(1, &texture); |
+ glDeleteFramebuffersEXT(1, &framebuffer); |
+ image->Destroy(true /* have_context */); |
+} |
+ |
+// The GLImageBindTest test case verifies that the GLImage implementation |
+// handles BindTexImage correctly. |
+REGISTER_TYPED_TEST_CASE_P(GLImageBindTest, BindTexImage); |
+ |
} // namespace gl |
#endif // UI_GL_TEST_GL_IMAGE_TEST_TEMPLATE_H_ |