OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 // Tests for GLES2Implementation. | 5 // Tests for GLES2Implementation. |
6 | 6 |
7 #include "gpu/command_buffer/client/gles2_implementation.h" | 7 #include "gpu/command_buffer/client/gles2_implementation.h" |
8 | 8 |
9 #include <GLES2/gl2.h> | 9 #include <GLES2/gl2.h> |
10 #include <GLES2/gl2ext.h> | 10 #include <GLES2/gl2ext.h> |
(...skipping 2484 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2495 | 2495 |
2496 gl_->TexImage2D( | 2496 gl_->TexImage2D( |
2497 kTarget, kLevel, kFormat, kWidth, kHeight, kBorder, kFormat, kType, | 2497 kTarget, kLevel, kFormat, kWidth, kHeight, kBorder, kFormat, kType, |
2498 pixels.get()); | 2498 pixels.get()); |
2499 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); | 2499 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); |
2500 EXPECT_TRUE(CheckRect( | 2500 EXPECT_TRUE(CheckRect( |
2501 kWidth, kHeight / 2, kFormat, kType, kPixelStoreUnpackAlignment, | 2501 kWidth, kHeight / 2, kFormat, kType, kPixelStoreUnpackAlignment, |
2502 pixels.get() + kHeight / 2 * padded_row_size, mem2.ptr)); | 2502 pixels.get() + kHeight / 2 * padded_row_size, mem2.ptr)); |
2503 } | 2503 } |
2504 | 2504 |
2505 TEST_F(GLES2ImplementationTest, SubImageUnpack) { | 2505 TEST_F(GLES2ImplementationTest, SubImage2DUnpack) { |
2506 static const GLint unpack_alignments[] = { 1, 2, 4, 8 }; | 2506 static const GLint unpack_alignments[] = { 1, 2, 4, 8 }; |
2507 | 2507 |
2508 static const GLenum kFormat = GL_RGB; | 2508 static const GLenum kFormat = GL_RGB; |
2509 static const GLenum kType = GL_UNSIGNED_BYTE; | 2509 static const GLenum kType = GL_UNSIGNED_BYTE; |
2510 static const GLint kLevel = 0; | 2510 static const GLint kLevel = 0; |
2511 static const GLint kBorder = 0; | 2511 static const GLint kBorder = 0; |
2512 // We're testing using the unpack params to pull a subimage out of a larger | 2512 // We're testing using the unpack params to pull a subimage out of a larger |
2513 // source of pixels. Here we specify the subimage by its border rows / | 2513 // source of pixels. Here we specify the subimage by its border rows / |
2514 // columns. | 2514 // columns. |
2515 static const GLint kSrcWidth = 33; | 2515 static const GLint kSrcWidth = 33; |
2516 static const GLint kSrcSubImageX0 = 11; | 2516 static const GLint kSrcSubImageX0 = 11; |
2517 static const GLint kSrcSubImageX1 = 20; | 2517 static const GLint kSrcSubImageX1 = 20; |
2518 static const GLint kSrcSubImageY0 = 18; | 2518 static const GLint kSrcSubImageY0 = 18; |
2519 static const GLint kSrcSubImageY1 = 23; | 2519 static const GLint kSrcSubImageY1 = 23; |
2520 static const GLint kSrcSubImageWidth = kSrcSubImageX1 - kSrcSubImageX0; | 2520 static const GLint kSrcSubImageWidth = kSrcSubImageX1 - kSrcSubImageX0; |
2521 static const GLint kSrcSubImageHeight = kSrcSubImageY1 - kSrcSubImageY0; | 2521 static const GLint kSrcSubImageHeight = kSrcSubImageY1 - kSrcSubImageY0; |
2522 | 2522 |
2523 // these are only used in the texsubimage tests | 2523 // these are only used in the texsubimage tests |
2524 static const GLint kTexWidth = 1023; | 2524 static const GLint kTexWidth = 1023; |
2525 static const GLint kTexHeight = 511; | 2525 static const GLint kTexHeight = 511; |
2526 static const GLint kTexSubXOffset = 419; | 2526 static const GLint kTexSubXOffset = 419; |
2527 static const GLint kTexSubYOffset = 103; | 2527 static const GLint kTexSubYOffset = 103; |
2528 | 2528 |
2529 struct { | 2529 struct { |
2530 cmds::PixelStorei pixel_store_i[4]; | 2530 cmds::PixelStorei pixel_store_i; |
2531 cmds::TexImage2D tex_image_2d; | 2531 cmds::TexImage2D tex_image_2d; |
2532 } texImageExpected; | 2532 } texImageExpected; |
2533 | 2533 |
2534 struct { | 2534 struct { |
2535 cmds::PixelStorei pixel_store_i[4]; | 2535 cmds::PixelStorei pixel_store_i; |
2536 cmds::TexImage2D tex_image_2d; | 2536 cmds::TexImage2D tex_image_2d; |
2537 cmds::TexSubImage2D tex_sub_image_2d; | 2537 cmds::TexSubImage2D tex_sub_image_2d; |
2538 } texSubImageExpected; | 2538 } texSubImageExpected; |
2539 | 2539 |
2540 uint32_t src_size; | 2540 uint32_t pixel_size; |
2541 ASSERT_TRUE(GLES2Util::ComputeImageDataSizes( | 2541 PixelStoreParams pixel_params; |
2542 kSrcWidth, kSrcSubImageY1, 1, kFormat, kType, 8, &src_size, NULL, NULL)); | 2542 // Makes sure the pixels size is large enough for all tests. |
| 2543 pixel_params.alignment = 8; |
| 2544 ASSERT_TRUE(GLES2Util::ComputeImageDataSizesES3( |
| 2545 kSrcWidth, kSrcSubImageY1, 1, kFormat, kType, |
| 2546 pixel_params, &pixel_size, nullptr, nullptr, nullptr, nullptr)); |
2543 scoped_ptr<uint8_t[]> src_pixels; | 2547 scoped_ptr<uint8_t[]> src_pixels; |
2544 src_pixels.reset(new uint8_t[src_size]); | 2548 src_pixels.reset(new uint8_t[pixel_size]); |
2545 for (size_t i = 0; i < src_size; ++i) { | 2549 for (size_t i = 0; i < pixel_size; ++i) { |
2546 src_pixels[i] = static_cast<int8_t>(i); | 2550 src_pixels[i] = static_cast<uint8_t>(i % 255); |
2547 } | 2551 } |
2548 | 2552 |
2549 for (int sub = 0; sub < 2; ++sub) { | 2553 for (int sub = 0; sub < 2; ++sub) { |
2550 for (size_t a = 0; a < arraysize(unpack_alignments); ++a) { | 2554 for (size_t a = 0; a < arraysize(unpack_alignments); ++a) { |
| 2555 const void* commands = GetPut(); |
| 2556 |
2551 GLint alignment = unpack_alignments[a]; | 2557 GLint alignment = unpack_alignments[a]; |
2552 uint32_t size; | 2558 gl_->PixelStorei(GL_UNPACK_ALIGNMENT, alignment); |
2553 uint32_t unpadded_row_size; | 2559 gl_->PixelStorei(GL_UNPACK_ROW_LENGTH, kSrcWidth); |
2554 uint32_t padded_row_size; | 2560 gl_->PixelStorei(GL_UNPACK_SKIP_PIXELS, kSrcSubImageX0); |
2555 ASSERT_TRUE(GLES2Util::ComputeImageDataSizes( | 2561 gl_->PixelStorei(GL_UNPACK_SKIP_ROWS, kSrcSubImageY0); |
2556 kSrcSubImageWidth, kSrcSubImageHeight, 1, kFormat, kType, alignment, | |
2557 &size, &unpadded_row_size, &padded_row_size)); | |
2558 ASSERT_TRUE(size <= MaxTransferBufferSize()); | |
2559 ExpectedMemoryInfo mem = GetExpectedMemory(size); | |
2560 | 2562 |
2561 const void* commands = GetPut(); | 2563 uint32_t client_size; |
2562 gl_->PixelStorei(GL_UNPACK_ALIGNMENT, alignment); | 2564 uint32_t client_unpadded_row_size; |
2563 gl_->PixelStorei(GL_UNPACK_ROW_LENGTH_EXT, kSrcWidth); | 2565 uint32_t client_padded_row_size; |
2564 gl_->PixelStorei(GL_UNPACK_SKIP_PIXELS_EXT, kSrcSubImageX0); | 2566 uint32_t client_skip_size; |
2565 gl_->PixelStorei(GL_UNPACK_SKIP_ROWS_EXT, kSrcSubImageY0); | 2567 { |
| 2568 PixelStoreParams params; |
| 2569 params.alignment = alignment; |
| 2570 params.row_length = kSrcWidth; |
| 2571 params.skip_pixels = kSrcSubImageX0; |
| 2572 params.skip_rows = kSrcSubImageY0; |
| 2573 ASSERT_TRUE(GLES2Util::ComputeImageDataSizesES3( |
| 2574 kSrcSubImageWidth, kSrcSubImageHeight, 1, kFormat, kType, params, |
| 2575 &client_size, &client_unpadded_row_size, &client_padded_row_size, |
| 2576 &client_skip_size, nullptr)); |
| 2577 ASSERT_TRUE(client_size + client_skip_size <= pixel_size); |
| 2578 } |
| 2579 |
| 2580 uint32_t service_size; |
| 2581 uint32_t service_unpadded_row_size; |
| 2582 uint32_t service_padded_row_size; |
| 2583 uint32_t service_skip_size; |
| 2584 { |
| 2585 PixelStoreParams params; |
| 2586 // For pixels we send to service side, we already applied all unpack |
| 2587 // parameters except for UNPACK_ALIGNMENT. |
| 2588 params.alignment = alignment; |
| 2589 ASSERT_TRUE(GLES2Util::ComputeImageDataSizesES3( |
| 2590 kSrcSubImageWidth, kSrcSubImageHeight, 1, kFormat, kType, params, |
| 2591 &service_size, &service_unpadded_row_size, &service_padded_row_size, |
| 2592 &service_skip_size, nullptr)); |
| 2593 ASSERT_TRUE(service_size <= MaxTransferBufferSize()); |
| 2594 ASSERT_TRUE(service_skip_size == 0); |
| 2595 ASSERT_TRUE(client_unpadded_row_size == service_unpadded_row_size); |
| 2596 } |
| 2597 |
| 2598 ExpectedMemoryInfo mem = GetExpectedMemory(service_size); |
2566 if (sub) { | 2599 if (sub) { |
2567 gl_->TexImage2D( | 2600 gl_->TexImage2D( |
2568 GL_TEXTURE_2D, kLevel, kFormat, kTexWidth, kTexHeight, kBorder, | 2601 GL_TEXTURE_2D, kLevel, kFormat, kTexWidth, kTexHeight, kBorder, |
2569 kFormat, kType, NULL); | 2602 kFormat, kType, nullptr); |
2570 gl_->TexSubImage2D( | 2603 gl_->TexSubImage2D( |
2571 GL_TEXTURE_2D, kLevel, kTexSubXOffset, kTexSubYOffset, | 2604 GL_TEXTURE_2D, kLevel, kTexSubXOffset, kTexSubYOffset, |
2572 kSrcSubImageWidth, kSrcSubImageHeight, kFormat, kType, | 2605 kSrcSubImageWidth, kSrcSubImageHeight, kFormat, kType, |
2573 src_pixels.get()); | 2606 src_pixels.get()); |
2574 texSubImageExpected.pixel_store_i[0].Init( | 2607 texSubImageExpected.pixel_store_i.Init(GL_UNPACK_ALIGNMENT, alignment); |
2575 GL_UNPACK_ALIGNMENT, alignment); | |
2576 texSubImageExpected.pixel_store_i[1].Init( | |
2577 GL_UNPACK_ROW_LENGTH_EXT, kSrcWidth); | |
2578 texSubImageExpected.pixel_store_i[2].Init( | |
2579 GL_UNPACK_SKIP_PIXELS_EXT, kSrcSubImageX0); | |
2580 texSubImageExpected.pixel_store_i[3].Init( | |
2581 GL_UNPACK_SKIP_ROWS_EXT, kSrcSubImageY0); | |
2582 texSubImageExpected.tex_image_2d.Init( | 2608 texSubImageExpected.tex_image_2d.Init( |
2583 GL_TEXTURE_2D, kLevel, kFormat, kTexWidth, kTexHeight, | 2609 GL_TEXTURE_2D, kLevel, kFormat, kTexWidth, kTexHeight, |
2584 kFormat, kType, 0, 0); | 2610 kFormat, kType, 0, 0); |
2585 texSubImageExpected.tex_sub_image_2d.Init( | 2611 texSubImageExpected.tex_sub_image_2d.Init( |
2586 GL_TEXTURE_2D, kLevel, kTexSubXOffset, kTexSubYOffset, | 2612 GL_TEXTURE_2D, kLevel, kTexSubXOffset, kTexSubYOffset, |
2587 kSrcSubImageWidth, kSrcSubImageHeight, kFormat, kType, mem.id, | 2613 kSrcSubImageWidth, kSrcSubImageHeight, kFormat, kType, mem.id, |
2588 mem.offset, GL_FALSE); | 2614 mem.offset, GL_FALSE); |
2589 EXPECT_EQ(0, memcmp( | 2615 EXPECT_EQ(0, memcmp(&texSubImageExpected, commands, |
2590 &texSubImageExpected, commands, sizeof(texSubImageExpected))); | 2616 sizeof(texSubImageExpected))); |
2591 } else { | 2617 } else { |
2592 gl_->TexImage2D( | 2618 gl_->TexImage2D( |
2593 GL_TEXTURE_2D, kLevel, kFormat, | 2619 GL_TEXTURE_2D, kLevel, kFormat, |
2594 kSrcSubImageWidth, kSrcSubImageHeight, kBorder, kFormat, kType, | 2620 kSrcSubImageWidth, kSrcSubImageHeight, kBorder, kFormat, kType, |
2595 src_pixels.get()); | 2621 src_pixels.get()); |
2596 texImageExpected.pixel_store_i[0].Init(GL_UNPACK_ALIGNMENT, alignment); | 2622 texImageExpected.pixel_store_i.Init(GL_UNPACK_ALIGNMENT, alignment); |
2597 texImageExpected.pixel_store_i[1].Init( | |
2598 GL_UNPACK_ROW_LENGTH_EXT, kSrcWidth); | |
2599 texImageExpected.pixel_store_i[2].Init( | |
2600 GL_UNPACK_SKIP_PIXELS_EXT, kSrcSubImageX0); | |
2601 texImageExpected.pixel_store_i[3].Init( | |
2602 GL_UNPACK_SKIP_ROWS_EXT, kSrcSubImageY0); | |
2603 texImageExpected.tex_image_2d.Init( | 2623 texImageExpected.tex_image_2d.Init( |
2604 GL_TEXTURE_2D, kLevel, kFormat, kSrcSubImageWidth, | 2624 GL_TEXTURE_2D, kLevel, kFormat, kSrcSubImageWidth, |
2605 kSrcSubImageHeight, kFormat, kType, mem.id, mem.offset); | 2625 kSrcSubImageHeight, kFormat, kType, mem.id, mem.offset); |
2606 EXPECT_EQ(0, memcmp( | 2626 EXPECT_EQ(0, memcmp(&texImageExpected, commands, |
2607 &texImageExpected, commands, sizeof(texImageExpected))); | 2627 sizeof(texImageExpected))); |
2608 } | 2628 } |
2609 uint32_t src_padded_row_size; | |
2610 ASSERT_TRUE(GLES2Util::ComputeImagePaddedRowSize( | |
2611 kSrcWidth, kFormat, kType, alignment, &src_padded_row_size)); | |
2612 uint32_t bytes_per_group = | |
2613 GLES2Util::ComputeImageGroupSize(kFormat, kType); | |
2614 for (int y = 0; y < kSrcSubImageHeight; ++y) { | 2629 for (int y = 0; y < kSrcSubImageHeight; ++y) { |
2615 const uint8_t* src_row = src_pixels.get() + | 2630 const uint8_t* src_row = |
2616 (kSrcSubImageY0 + y) * src_padded_row_size + | 2631 src_pixels.get() + client_skip_size + y * client_padded_row_size; |
2617 bytes_per_group * kSrcSubImageX0; | 2632 const uint8_t* dst_row = mem.ptr + y * service_padded_row_size; |
2618 const uint8_t* dst_row = mem.ptr + y * padded_row_size; | 2633 EXPECT_EQ(0, memcmp(src_row, dst_row, service_unpadded_row_size)); |
2619 EXPECT_EQ(0, memcmp(src_row, dst_row, unpadded_row_size)); | |
2620 } | 2634 } |
2621 ClearCommands(); | 2635 ClearCommands(); |
2622 } | 2636 } |
2623 } | 2637 } |
2624 } | 2638 } |
2625 | 2639 |
2626 // Test texture related calls with invalid arguments. | 2640 // Test texture related calls with invalid arguments. |
2627 TEST_F(GLES2ImplementationTest, TextureInvalidArguments) { | 2641 TEST_F(GLES2ImplementationTest, TextureInvalidArguments) { |
2628 struct Cmds { | 2642 struct Cmds { |
2629 cmds::TexImage2D tex_image_2d; | 2643 cmds::TexImage2D tex_image_2d; |
(...skipping 1671 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4301 ContextInitOptions init_options; | 4315 ContextInitOptions init_options; |
4302 init_options.transfer_buffer_initialize_fail = true; | 4316 init_options.transfer_buffer_initialize_fail = true; |
4303 EXPECT_FALSE(Initialize(init_options)); | 4317 EXPECT_FALSE(Initialize(init_options)); |
4304 } | 4318 } |
4305 | 4319 |
4306 #include "base/macros.h" | 4320 #include "base/macros.h" |
4307 #include "gpu/command_buffer/client/gles2_implementation_unittest_autogen.h" | 4321 #include "gpu/command_buffer/client/gles2_implementation_unittest_autogen.h" |
4308 | 4322 |
4309 } // namespace gles2 | 4323 } // namespace gles2 |
4310 } // namespace gpu | 4324 } // namespace gpu |
OLD | NEW |