| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // This file defines tests that implementations of GLImage should pass in order | 5 // This file defines tests that implementations of GLImage should pass in order |
| 6 // to be conformant. | 6 // to be conformant. |
| 7 | 7 |
| 8 #ifndef UI_GL_TEST_GL_IMAGE_TEST_TEMPLATE_H_ | 8 #ifndef UI_GL_TEST_GL_IMAGE_TEST_TEMPLATE_H_ |
| 9 #define UI_GL_TEST_GL_IMAGE_TEST_TEMPLATE_H_ | 9 #define UI_GL_TEST_GL_IMAGE_TEST_TEMPLATE_H_ |
| 10 | 10 |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 | 139 |
| 140 protected: | 140 protected: |
| 141 scoped_refptr<gfx::GLSurface> surface_; | 141 scoped_refptr<gfx::GLSurface> surface_; |
| 142 scoped_refptr<gfx::GLContext> context_; | 142 scoped_refptr<gfx::GLContext> context_; |
| 143 GLImageTestDelegate delegate_; | 143 GLImageTestDelegate delegate_; |
| 144 }; | 144 }; |
| 145 | 145 |
| 146 TYPED_TEST_CASE_P(GLImageTest); | 146 TYPED_TEST_CASE_P(GLImageTest); |
| 147 | 147 |
| 148 TYPED_TEST_P(GLImageTest, CreateAndDestroy) { | 148 TYPED_TEST_P(GLImageTest, CreateAndDestroy) { |
| 149 if (!this->delegate_.IsSupported()) |
| 150 return; |
| 151 |
| 149 const gfx::Size small_image_size(4, 4); | 152 const gfx::Size small_image_size(4, 4); |
| 150 const gfx::Size large_image_size(512, 512); | 153 const gfx::Size large_image_size(512, 512); |
| 151 const uint8_t image_color[] = {0, 0xff, 0, 0xff}; | 154 const uint8_t image_color[] = {0, 0xff, 0, 0xff}; |
| 152 | 155 |
| 153 // Create a small solid color green image of preferred format. This must | 156 // Create a small solid color green image of preferred format. This must |
| 154 // succeed in order for a GLImage to be conformant. | 157 // succeed in order for a GLImage to be conformant. |
| 155 scoped_refptr<gl::GLImage> small_image = | 158 scoped_refptr<gl::GLImage> small_image = |
| 156 this->delegate_.CreateSolidColorImage(small_image_size, image_color); | 159 this->delegate_.CreateSolidColorImage(small_image_size, image_color); |
| 157 ASSERT_TRUE(small_image); | 160 ASSERT_TRUE(small_image); |
| 158 | 161 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 177 REGISTER_TYPED_TEST_CASE_P(GLImageTest, CreateAndDestroy); | 180 REGISTER_TYPED_TEST_CASE_P(GLImageTest, CreateAndDestroy); |
| 178 | 181 |
| 179 template <typename GLImageTestDelegate> | 182 template <typename GLImageTestDelegate> |
| 180 class GLImageZeroInitializeTest : public GLImageTest<GLImageTestDelegate> {}; | 183 class GLImageZeroInitializeTest : public GLImageTest<GLImageTestDelegate> {}; |
| 181 | 184 |
| 182 // This test verifies that if an uninitialized image is bound to a texture, the | 185 // This test verifies that if an uninitialized image is bound to a texture, the |
| 183 // result is zero-initialized. | 186 // result is zero-initialized. |
| 184 TYPED_TEST_CASE_P(GLImageZeroInitializeTest); | 187 TYPED_TEST_CASE_P(GLImageZeroInitializeTest); |
| 185 | 188 |
| 186 TYPED_TEST_P(GLImageZeroInitializeTest, ZeroInitialize) { | 189 TYPED_TEST_P(GLImageZeroInitializeTest, ZeroInitialize) { |
| 190 // Ozone platform knows the supported format in runtime. |
| 191 if (!this->delegate_.IsSupported()) |
| 192 return; |
| 187 #if defined(OS_MACOSX) | 193 #if defined(OS_MACOSX) |
| 188 // This functionality is disabled on Mavericks because it breaks PDF | 194 // This functionality is disabled on Mavericks because it breaks PDF |
| 189 // rendering. https://crbug.com/594343. | 195 // rendering. https://crbug.com/594343. |
| 190 if (base::mac::IsOSMavericks()) | 196 if (base::mac::IsOSMavericks()) |
| 191 return; | 197 return; |
| 192 #endif | 198 #endif |
| 193 | 199 |
| 194 const gfx::Size image_size(256, 256); | 200 const gfx::Size image_size(256, 256); |
| 195 | 201 |
| 196 GLuint framebuffer = | 202 GLuint framebuffer = |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 229 } | 235 } |
| 230 | 236 |
| 231 REGISTER_TYPED_TEST_CASE_P(GLImageZeroInitializeTest, ZeroInitialize); | 237 REGISTER_TYPED_TEST_CASE_P(GLImageZeroInitializeTest, ZeroInitialize); |
| 232 | 238 |
| 233 template <typename GLImageTestDelegate> | 239 template <typename GLImageTestDelegate> |
| 234 class GLImageBindTest : public GLImageTest<GLImageTestDelegate> {}; | 240 class GLImageBindTest : public GLImageTest<GLImageTestDelegate> {}; |
| 235 | 241 |
| 236 TYPED_TEST_CASE_P(GLImageBindTest); | 242 TYPED_TEST_CASE_P(GLImageBindTest); |
| 237 | 243 |
| 238 TYPED_TEST_P(GLImageBindTest, BindTexImage) { | 244 TYPED_TEST_P(GLImageBindTest, BindTexImage) { |
| 245 if (!this->delegate_.IsSupported()) |
| 246 return; |
| 247 |
| 239 const gfx::Size image_size(256, 256); | 248 const gfx::Size image_size(256, 256); |
| 240 const uint8_t image_color[] = {0x10, 0x20, 0, 0xff}; | 249 // These values are picked so that RGB -> YUV on the CPU converted |
| 250 // back to RGB on the GPU produces the original RGB values without |
| 251 // any error. |
| 252 uint8_t image_color[] = {0x10, 0x20, 0x00, 0xff}; |
| 253 // glReadPixels(.., GL_RGBA, ..) for RED texture returns (R, 0x00, 0x00, 0xff) |
| 254 if (gfx::BufferFormat::R_8 == this->delegate_.GetBufferFormat()) |
| 255 image_color[1] = 0x00; |
| 241 | 256 |
| 242 GLuint framebuffer = | 257 GLuint framebuffer = |
| 243 GLTestHelper::SetupFramebuffer(image_size.width(), image_size.height()); | 258 GLTestHelper::SetupFramebuffer(image_size.width(), image_size.height()); |
| 244 ASSERT_TRUE(framebuffer); | 259 ASSERT_TRUE(framebuffer); |
| 245 glBindFramebufferEXT(GL_FRAMEBUFFER, framebuffer); | 260 glBindFramebufferEXT(GL_FRAMEBUFFER, framebuffer); |
| 246 glViewport(0, 0, image_size.width(), image_size.height()); | 261 glViewport(0, 0, image_size.width(), image_size.height()); |
| 247 | 262 |
| 248 // Create a solid color green image of preferred format. This must succeed | 263 // Create a solid color green image of preferred format. This must succeed |
| 249 // in order for a GLImage to be conformant. | 264 // in order for a GLImage to be conformant. |
| 250 scoped_refptr<gl::GLImage> image = | 265 scoped_refptr<gl::GLImage> image = |
| (...skipping 25 matching lines...) Expand all Loading... |
| 276 } | 291 } |
| 277 | 292 |
| 278 REGISTER_TYPED_TEST_CASE_P(GLImageBindTest, BindTexImage); | 293 REGISTER_TYPED_TEST_CASE_P(GLImageBindTest, BindTexImage); |
| 279 | 294 |
| 280 template <typename GLImageTestDelegate> | 295 template <typename GLImageTestDelegate> |
| 281 class GLImageCopyTest : public GLImageTest<GLImageTestDelegate> {}; | 296 class GLImageCopyTest : public GLImageTest<GLImageTestDelegate> {}; |
| 282 | 297 |
| 283 TYPED_TEST_CASE_P(GLImageCopyTest); | 298 TYPED_TEST_CASE_P(GLImageCopyTest); |
| 284 | 299 |
| 285 TYPED_TEST_P(GLImageCopyTest, CopyTexImage) { | 300 TYPED_TEST_P(GLImageCopyTest, CopyTexImage) { |
| 301 if (!this->delegate_.IsSupported()) |
| 302 return; |
| 303 |
| 286 const gfx::Size image_size(256, 256); | 304 const gfx::Size image_size(256, 256); |
| 287 // These values are picked so that RGB -> YUV on the CPU converted | 305 // These values are picked so that RGB -> YUV on the CPU converted |
| 288 // back to RGB on the GPU produces the original RGB values without | 306 // back to RGB on the GPU produces the original RGB values without |
| 289 // any error. | 307 // any error. |
| 290 const uint8_t image_color[] = {0x10, 0x20, 0, 0xff}; | 308 uint8_t image_color[] = {0x10, 0x20, 0x00, 0xff}; |
| 309 // glReadPixels(.., GL_RGBA, ..) for RED texture returns (R, 0x00, 0x00, 0xff) |
| 310 if (gfx::BufferFormat::R_8 == this->delegate_.GetBufferFormat()) |
| 311 image_color[1] = 0x00; |
| 291 const uint8_t texture_color[] = {0, 0, 0xff, 0xff}; | 312 const uint8_t texture_color[] = {0, 0, 0xff, 0xff}; |
| 292 | 313 |
| 293 GLuint framebuffer = | 314 GLuint framebuffer = |
| 294 GLTestHelper::SetupFramebuffer(image_size.width(), image_size.height()); | 315 GLTestHelper::SetupFramebuffer(image_size.width(), image_size.height()); |
| 295 ASSERT_TRUE(framebuffer); | 316 ASSERT_TRUE(framebuffer); |
| 296 glBindFramebufferEXT(GL_FRAMEBUFFER, framebuffer); | 317 glBindFramebufferEXT(GL_FRAMEBUFFER, framebuffer); |
| 297 glViewport(0, 0, image_size.width(), image_size.height()); | 318 glViewport(0, 0, image_size.width(), image_size.height()); |
| 298 | 319 |
| 299 // Create a solid color green image of preferred format. This must succeed | 320 // Create a solid color green image of preferred format. This must succeed |
| 300 // in order for a GLImage to be conformant. | 321 // in order for a GLImage to be conformant. |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 333 image->Destroy(true /* have_context */); | 354 image->Destroy(true /* have_context */); |
| 334 } | 355 } |
| 335 | 356 |
| 336 // The GLImageCopyTest test case verifies that the GLImage implementation | 357 // The GLImageCopyTest test case verifies that the GLImage implementation |
| 337 // handles CopyTexImage correctly. | 358 // handles CopyTexImage correctly. |
| 338 REGISTER_TYPED_TEST_CASE_P(GLImageCopyTest, CopyTexImage); | 359 REGISTER_TYPED_TEST_CASE_P(GLImageCopyTest, CopyTexImage); |
| 339 | 360 |
| 340 } // namespace gl | 361 } // namespace gl |
| 341 | 362 |
| 342 #endif // UI_GL_TEST_GL_IMAGE_TEST_TEMPLATE_H_ | 363 #endif // UI_GL_TEST_GL_IMAGE_TEST_TEMPLATE_H_ |
| OLD | NEW |