| Index: gpu/command_buffer/service/buffer_manager_unittest.cc
|
| diff --git a/gpu/command_buffer/service/buffer_manager_unittest.cc b/gpu/command_buffer/service/buffer_manager_unittest.cc
|
| index 4c6707a18a3b53430508af3e14e7b56f00090cd2..45e08c80fccc02ebe40feec40a996ed293248454 100644
|
| --- a/gpu/command_buffer/service/buffer_manager_unittest.cc
|
| +++ b/gpu/command_buffer/service/buffer_manager_unittest.cc
|
| @@ -74,6 +74,158 @@ class BufferManagerTestBase : public GpuServiceTest {
|
| return success;
|
| }
|
|
|
| + void RunGetMaxValueForRangeUint8Test(bool enable_primitive_restart)
|
| + {
|
| + const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER;
|
| + const GLuint kClientBufferId = 1;
|
| + const GLuint kServiceBufferId = 11;
|
| + const uint8_t data[] = {10, 9, 8, 7, 6, 0xFFu, 4, 3, 2, 1};
|
| + const uint8_t new_data[] = {100, 120, 110};
|
| + manager_->CreateBuffer(kClientBufferId, kServiceBufferId);
|
| + Buffer* buffer = manager_->GetBuffer(kClientBufferId);
|
| + ASSERT_TRUE(buffer != NULL);
|
| + manager_->SetTarget(buffer, kTarget);
|
| + DoBufferData(
|
| + buffer, kTarget, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR);
|
| + EXPECT_TRUE(DoBufferSubData(buffer, kTarget, 0, sizeof(data), data));
|
| + GLuint max_value;
|
| + // Check entire range succeeds.
|
| + EXPECT_TRUE(buffer->GetMaxValueForRange(
|
| + 0, 10, GL_UNSIGNED_BYTE, enable_primitive_restart, &max_value));
|
| + if (enable_primitive_restart) {
|
| + EXPECT_EQ(10u, max_value);
|
| + } else {
|
| + EXPECT_EQ(0xFFu, max_value);
|
| + }
|
| + // Check sub range succeeds.
|
| + EXPECT_TRUE(buffer->GetMaxValueForRange(
|
| + 4, 3, GL_UNSIGNED_BYTE, enable_primitive_restart, &max_value));
|
| + if (enable_primitive_restart) {
|
| + EXPECT_EQ(6u, max_value);
|
| + } else {
|
| + EXPECT_EQ(0xFFu, max_value);
|
| + }
|
| + // Check changing sub range succeeds.
|
| + EXPECT_TRUE(DoBufferSubData(buffer, kTarget, 4, sizeof(new_data),
|
| + new_data));
|
| + EXPECT_TRUE(buffer->GetMaxValueForRange(
|
| + 4, 3, GL_UNSIGNED_BYTE, enable_primitive_restart, &max_value));
|
| + EXPECT_EQ(120u, max_value);
|
| + max_value = 0;
|
| + EXPECT_TRUE(buffer->GetMaxValueForRange(
|
| + 0, 10, GL_UNSIGNED_BYTE, enable_primitive_restart, &max_value));
|
| + EXPECT_EQ(120u, max_value);
|
| + // Check out of range fails.
|
| + EXPECT_FALSE(buffer->GetMaxValueForRange(
|
| + 0, 11, GL_UNSIGNED_BYTE, enable_primitive_restart, &max_value));
|
| + EXPECT_FALSE(buffer->GetMaxValueForRange(
|
| + 10, 1, GL_UNSIGNED_BYTE, enable_primitive_restart, &max_value));
|
| + }
|
| +
|
| + void RunGetMaxValueForRangeUint16Test(bool enable_primitive_restart) {
|
| + const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER;
|
| + const GLuint kClientBufferId = 1;
|
| + const GLuint kServiceBufferId = 11;
|
| + const uint16_t data[] = {10, 9, 8, 7, 6, 0xFFFF, 4, 3, 2, 1};
|
| + const uint16_t new_data[] = {100, 120, 110};
|
| + manager_->CreateBuffer(kClientBufferId, kServiceBufferId);
|
| + Buffer* buffer = manager_->GetBuffer(kClientBufferId);
|
| + ASSERT_TRUE(buffer != NULL);
|
| + manager_->SetTarget(buffer, kTarget);
|
| + DoBufferData(
|
| + buffer, kTarget, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR);
|
| + EXPECT_TRUE(DoBufferSubData(buffer, kTarget, 0, sizeof(data), data));
|
| + GLuint max_value;
|
| + // Check entire range succeeds.
|
| + EXPECT_TRUE(buffer->GetMaxValueForRange(
|
| + 0, 10, GL_UNSIGNED_SHORT, enable_primitive_restart, &max_value));
|
| + if (enable_primitive_restart) {
|
| + EXPECT_EQ(10u, max_value);
|
| + } else {
|
| + EXPECT_EQ(0xFFFFu, max_value);
|
| + }
|
| + // Check odd offset fails for GL_UNSIGNED_SHORT.
|
| + EXPECT_FALSE(buffer->GetMaxValueForRange(
|
| + 1, 10, GL_UNSIGNED_SHORT, enable_primitive_restart, &max_value));
|
| + // Check sub range succeeds.
|
| + EXPECT_TRUE(buffer->GetMaxValueForRange(
|
| + 8, 3, GL_UNSIGNED_SHORT, enable_primitive_restart, &max_value));
|
| + if (enable_primitive_restart) {
|
| + EXPECT_EQ(6u, max_value);
|
| + } else {
|
| + EXPECT_EQ(0xFFFFu, max_value);
|
| + }
|
| + // Check changing sub range succeeds.
|
| + EXPECT_TRUE(DoBufferSubData(buffer, kTarget, 8, sizeof(new_data),
|
| + new_data));
|
| + EXPECT_TRUE(buffer->GetMaxValueForRange(
|
| + 8, 3, GL_UNSIGNED_SHORT, enable_primitive_restart, &max_value));
|
| + EXPECT_EQ(120u, max_value);
|
| + max_value = 0;
|
| + EXPECT_TRUE(buffer->GetMaxValueForRange(
|
| + 0, 10, GL_UNSIGNED_SHORT, enable_primitive_restart, &max_value));
|
| + EXPECT_EQ(120u, max_value);
|
| + // Check out of range fails.
|
| + EXPECT_FALSE(buffer->GetMaxValueForRange(
|
| + 0, 11, GL_UNSIGNED_SHORT, enable_primitive_restart, &max_value));
|
| + EXPECT_FALSE(buffer->GetMaxValueForRange(
|
| + 20, 1, GL_UNSIGNED_SHORT, enable_primitive_restart, &max_value));
|
| + }
|
| +
|
| + void RunGetMaxValueForRangeUint32Test(bool enable_primitive_restart) {
|
| + const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER;
|
| + const GLuint kClientBufferId = 1;
|
| + const GLuint kServiceBufferId = 11;
|
| + const uint32_t data[] = {10, 9, 8, 7, 6, 0xFFFFFFFFu, 4, 3, 2, 1};
|
| + const uint32_t new_data[] = {100, 120, 110};
|
| + manager_->CreateBuffer(kClientBufferId, kServiceBufferId);
|
| + Buffer* buffer = manager_->GetBuffer(kClientBufferId);
|
| + ASSERT_TRUE(buffer != NULL);
|
| + manager_->SetTarget(buffer, kTarget);
|
| + DoBufferData(
|
| + buffer, kTarget, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR);
|
| + EXPECT_TRUE(DoBufferSubData(buffer, kTarget, 0, sizeof(data), data));
|
| + GLuint max_value;
|
| + // Check entire range succeeds.
|
| + EXPECT_TRUE(buffer->GetMaxValueForRange(
|
| + 0, 10, GL_UNSIGNED_INT, enable_primitive_restart, &max_value));
|
| + if (enable_primitive_restart) {
|
| + EXPECT_EQ(10u, max_value);
|
| + } else {
|
| + EXPECT_EQ(0xFFFFFFFFu, max_value);
|
| + }
|
| + // Check non aligned offsets fails for GL_UNSIGNED_INT.
|
| + EXPECT_FALSE(buffer->GetMaxValueForRange(
|
| + 1, 10, GL_UNSIGNED_INT, enable_primitive_restart, &max_value));
|
| + EXPECT_FALSE(buffer->GetMaxValueForRange(
|
| + 2, 10, GL_UNSIGNED_INT, enable_primitive_restart, &max_value));
|
| + EXPECT_FALSE(buffer->GetMaxValueForRange(
|
| + 3, 10, GL_UNSIGNED_INT, enable_primitive_restart, &max_value));
|
| + // Check sub range succeeds.
|
| + EXPECT_TRUE(buffer->GetMaxValueForRange(
|
| + 16, 3, GL_UNSIGNED_INT, enable_primitive_restart, &max_value));
|
| + if (enable_primitive_restart) {
|
| + EXPECT_EQ(6u, max_value);
|
| + } else {
|
| + EXPECT_EQ(0xFFFFFFFFu, max_value);
|
| + }
|
| + // Check changing sub range succeeds.
|
| + EXPECT_TRUE(DoBufferSubData(buffer, kTarget, 16, sizeof(new_data),
|
| + new_data));
|
| + EXPECT_TRUE(buffer->GetMaxValueForRange(
|
| + 16, 3, GL_UNSIGNED_INT, enable_primitive_restart, &max_value));
|
| + EXPECT_EQ(120u, max_value);
|
| + max_value = 0;
|
| + EXPECT_TRUE(buffer->GetMaxValueForRange(
|
| + 0, 10, GL_UNSIGNED_INT, enable_primitive_restart, &max_value));
|
| + EXPECT_EQ(120u, max_value);
|
| + // Check out of range fails.
|
| + EXPECT_FALSE(buffer->GetMaxValueForRange(
|
| + 0, 11, GL_UNSIGNED_INT, enable_primitive_restart, &max_value));
|
| + EXPECT_FALSE(buffer->GetMaxValueForRange(
|
| + 40, 1, GL_UNSIGNED_INT, enable_primitive_restart, &max_value));
|
| + }
|
| +
|
| scoped_ptr<BufferManager> manager_;
|
| scoped_ptr<MockErrorState> error_state_;
|
| };
|
| @@ -243,124 +395,27 @@ TEST_F(BufferManagerTest, GetRange) {
|
| }
|
|
|
| TEST_F(BufferManagerTest, GetMaxValueForRangeUint8) {
|
| - const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER;
|
| - const GLuint kClientBufferId = 1;
|
| - const GLuint kServiceBufferId = 11;
|
| - const uint8_t data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
|
| - const uint8_t new_data[] = {100, 120, 110};
|
| - manager_->CreateBuffer(kClientBufferId, kServiceBufferId);
|
| - Buffer* buffer = manager_->GetBuffer(kClientBufferId);
|
| - ASSERT_TRUE(buffer != NULL);
|
| - manager_->SetTarget(buffer, kTarget);
|
| - DoBufferData(
|
| - buffer, kTarget, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR);
|
| - EXPECT_TRUE(DoBufferSubData(buffer, kTarget, 0, sizeof(data), data));
|
| - GLuint max_value;
|
| - // Check entire range succeeds.
|
| - EXPECT_TRUE(buffer->GetMaxValueForRange(
|
| - 0, 10, GL_UNSIGNED_BYTE, &max_value));
|
| - EXPECT_EQ(10u, max_value);
|
| - // Check sub range succeeds.
|
| - EXPECT_TRUE(buffer->GetMaxValueForRange(
|
| - 4, 3, GL_UNSIGNED_BYTE, &max_value));
|
| - EXPECT_EQ(6u, max_value);
|
| - // Check changing sub range succeeds.
|
| - EXPECT_TRUE(DoBufferSubData(buffer, kTarget, 4, sizeof(new_data), new_data));
|
| - EXPECT_TRUE(buffer->GetMaxValueForRange(
|
| - 4, 3, GL_UNSIGNED_BYTE, &max_value));
|
| - EXPECT_EQ(120u, max_value);
|
| - max_value = 0;
|
| - EXPECT_TRUE(buffer->GetMaxValueForRange(
|
| - 0, 10, GL_UNSIGNED_BYTE, &max_value));
|
| - EXPECT_EQ(120u, max_value);
|
| - // Check out of range fails.
|
| - EXPECT_FALSE(buffer->GetMaxValueForRange(
|
| - 0, 11, GL_UNSIGNED_BYTE, &max_value));
|
| - EXPECT_FALSE(buffer->GetMaxValueForRange(
|
| - 10, 1, GL_UNSIGNED_BYTE, &max_value));
|
| + RunGetMaxValueForRangeUint8Test(false);
|
| +}
|
| +
|
| +TEST_F(BufferManagerTest, GetMaxValueForRangeUint8PrimitiveRestart) {
|
| + RunGetMaxValueForRangeUint8Test(true);
|
| }
|
|
|
| TEST_F(BufferManagerTest, GetMaxValueForRangeUint16) {
|
| - const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER;
|
| - const GLuint kClientBufferId = 1;
|
| - const GLuint kServiceBufferId = 11;
|
| - const uint16_t data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
|
| - const uint16_t new_data[] = {100, 120, 110};
|
| - manager_->CreateBuffer(kClientBufferId, kServiceBufferId);
|
| - Buffer* buffer = manager_->GetBuffer(kClientBufferId);
|
| - ASSERT_TRUE(buffer != NULL);
|
| - manager_->SetTarget(buffer, kTarget);
|
| - DoBufferData(
|
| - buffer, kTarget, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR);
|
| - EXPECT_TRUE(DoBufferSubData(buffer, kTarget, 0, sizeof(data), data));
|
| - GLuint max_value;
|
| - // Check entire range succeeds.
|
| - EXPECT_TRUE(buffer->GetMaxValueForRange(
|
| - 0, 10, GL_UNSIGNED_SHORT, &max_value));
|
| - EXPECT_EQ(10u, max_value);
|
| - // Check odd offset fails for GL_UNSIGNED_SHORT.
|
| - EXPECT_FALSE(buffer->GetMaxValueForRange(
|
| - 1, 10, GL_UNSIGNED_SHORT, &max_value));
|
| - // Check sub range succeeds.
|
| - EXPECT_TRUE(buffer->GetMaxValueForRange(
|
| - 8, 3, GL_UNSIGNED_SHORT, &max_value));
|
| - EXPECT_EQ(6u, max_value);
|
| - // Check changing sub range succeeds.
|
| - EXPECT_TRUE(DoBufferSubData(buffer, kTarget, 8, sizeof(new_data), new_data));
|
| - EXPECT_TRUE(buffer->GetMaxValueForRange(
|
| - 8, 3, GL_UNSIGNED_SHORT, &max_value));
|
| - EXPECT_EQ(120u, max_value);
|
| - max_value = 0;
|
| - EXPECT_TRUE(buffer->GetMaxValueForRange(
|
| - 0, 10, GL_UNSIGNED_SHORT, &max_value));
|
| - EXPECT_EQ(120u, max_value);
|
| - // Check out of range fails.
|
| - EXPECT_FALSE(buffer->GetMaxValueForRange(
|
| - 0, 11, GL_UNSIGNED_SHORT, &max_value));
|
| - EXPECT_FALSE(buffer->GetMaxValueForRange(
|
| - 20, 1, GL_UNSIGNED_SHORT, &max_value));
|
| + RunGetMaxValueForRangeUint16Test(false);
|
| +}
|
| +
|
| +TEST_F(BufferManagerTest, GetMaxValueForRangeUint16PrimitiveRestart) {
|
| + RunGetMaxValueForRangeUint16Test(true);
|
| }
|
|
|
| TEST_F(BufferManagerTest, GetMaxValueForRangeUint32) {
|
| - const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER;
|
| - const GLuint kClientBufferId = 1;
|
| - const GLuint kServiceBufferId = 11;
|
| - const uint32_t data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
|
| - const uint32_t new_data[] = {100, 120, 110};
|
| - manager_->CreateBuffer(kClientBufferId, kServiceBufferId);
|
| - Buffer* buffer = manager_->GetBuffer(kClientBufferId);
|
| - ASSERT_TRUE(buffer != NULL);
|
| - manager_->SetTarget(buffer, kTarget);
|
| - DoBufferData(
|
| - buffer, kTarget, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR);
|
| - EXPECT_TRUE(DoBufferSubData(buffer, kTarget, 0, sizeof(data), data));
|
| - GLuint max_value;
|
| - // Check entire range succeeds.
|
| - EXPECT_TRUE(
|
| - buffer->GetMaxValueForRange(0, 10, GL_UNSIGNED_INT, &max_value));
|
| - EXPECT_EQ(10u, max_value);
|
| - // Check non aligned offsets fails for GL_UNSIGNED_INT.
|
| - EXPECT_FALSE(
|
| - buffer->GetMaxValueForRange(1, 10, GL_UNSIGNED_INT, &max_value));
|
| - EXPECT_FALSE(
|
| - buffer->GetMaxValueForRange(2, 10, GL_UNSIGNED_INT, &max_value));
|
| - EXPECT_FALSE(
|
| - buffer->GetMaxValueForRange(3, 10, GL_UNSIGNED_INT, &max_value));
|
| - // Check sub range succeeds.
|
| - EXPECT_TRUE(buffer->GetMaxValueForRange(16, 3, GL_UNSIGNED_INT, &max_value));
|
| - EXPECT_EQ(6u, max_value);
|
| - // Check changing sub range succeeds.
|
| - EXPECT_TRUE(DoBufferSubData(buffer, kTarget, 16, sizeof(new_data), new_data));
|
| - EXPECT_TRUE(buffer->GetMaxValueForRange(16, 3, GL_UNSIGNED_INT, &max_value));
|
| - EXPECT_EQ(120u, max_value);
|
| - max_value = 0;
|
| - EXPECT_TRUE(buffer->GetMaxValueForRange(0, 10, GL_UNSIGNED_INT, &max_value));
|
| - EXPECT_EQ(120u, max_value);
|
| - // Check out of range fails.
|
| - EXPECT_FALSE(
|
| - buffer->GetMaxValueForRange(0, 11, GL_UNSIGNED_INT, &max_value));
|
| - EXPECT_FALSE(
|
| - buffer->GetMaxValueForRange(40, 1, GL_UNSIGNED_INT, &max_value));
|
| + RunGetMaxValueForRangeUint32Test(false);
|
| +}
|
| +
|
| +TEST_F(BufferManagerTest, GetMaxValueForRangeUint32PrimitiveRestart) {
|
| + RunGetMaxValueForRangeUint32Test(true);
|
| }
|
|
|
| TEST_F(BufferManagerTest, UseDeletedBuffer) {
|
| @@ -420,7 +475,7 @@ TEST_F(BufferManagerTest, MaxValueCacheClearedCorrectly) {
|
| DoBufferData(
|
| buffer, kTarget, sizeof(data1), GL_STATIC_DRAW, data1, GL_NO_ERROR);
|
| EXPECT_TRUE(
|
| - buffer->GetMaxValueForRange(0, 10, GL_UNSIGNED_INT, &max_value));
|
| + buffer->GetMaxValueForRange(0, 10, GL_UNSIGNED_INT, false, &max_value));
|
| EXPECT_EQ(10u, max_value);
|
| // Check that any cached values are invalidated if the buffer is reloaded
|
| // with the same amount of data (but different content)
|
| @@ -428,7 +483,7 @@ TEST_F(BufferManagerTest, MaxValueCacheClearedCorrectly) {
|
| DoBufferData(
|
| buffer, kTarget, sizeof(data2), GL_STATIC_DRAW, data2, GL_NO_ERROR);
|
| EXPECT_TRUE(
|
| - buffer->GetMaxValueForRange(0, 10, GL_UNSIGNED_INT, &max_value));
|
| + buffer->GetMaxValueForRange(0, 10, GL_UNSIGNED_INT, false, &max_value));
|
| EXPECT_EQ(20u, max_value);
|
| // Check that any cached values are invalidated if the buffer is reloaded
|
| // with entirely different content.
|
| @@ -436,7 +491,7 @@ TEST_F(BufferManagerTest, MaxValueCacheClearedCorrectly) {
|
| DoBufferData(
|
| buffer, kTarget, sizeof(data3), GL_STATIC_DRAW, data3, GL_NO_ERROR);
|
| EXPECT_TRUE(
|
| - buffer->GetMaxValueForRange(0, 3, GL_UNSIGNED_INT, &max_value));
|
| + buffer->GetMaxValueForRange(0, 3, GL_UNSIGNED_INT, false, &max_value));
|
| EXPECT_EQ(30u, max_value);
|
| }
|
|
|
|
|