| 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 #include <stddef.h> |
| 6 #include <stdint.h> |
| 7 |
| 5 #include "gpu/command_buffer/service/buffer_manager.h" | 8 #include "gpu/command_buffer/service/buffer_manager.h" |
| 6 #include "gpu/command_buffer/service/error_state_mock.h" | 9 #include "gpu/command_buffer/service/error_state_mock.h" |
| 7 #include "gpu/command_buffer/service/feature_info.h" | 10 #include "gpu/command_buffer/service/feature_info.h" |
| 8 #include "gpu/command_buffer/service/gpu_service_test.h" | 11 #include "gpu/command_buffer/service/gpu_service_test.h" |
| 9 #include "gpu/command_buffer/service/mocks.h" | 12 #include "gpu/command_buffer/service/mocks.h" |
| 10 #include "gpu/command_buffer/service/test_helper.h" | 13 #include "gpu/command_buffer/service/test_helper.h" |
| 11 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 12 #include "ui/gl/gl_mock.h" | 15 #include "ui/gl/gl_mock.h" |
| 13 | 16 |
| 14 using ::testing::_; | 17 using ::testing::_; |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 manager_->Destroy(true); | 189 manager_->Destroy(true); |
| 187 // Check the resources were released. | 190 // Check the resources were released. |
| 188 buffer1 = manager_->GetBuffer(kClient1Id); | 191 buffer1 = manager_->GetBuffer(kClient1Id); |
| 189 ASSERT_TRUE(buffer1 == NULL); | 192 ASSERT_TRUE(buffer1 == NULL); |
| 190 } | 193 } |
| 191 | 194 |
| 192 TEST_F(BufferManagerTest, DoBufferSubData) { | 195 TEST_F(BufferManagerTest, DoBufferSubData) { |
| 193 const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER; | 196 const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER; |
| 194 const GLuint kClientBufferId = 1; | 197 const GLuint kClientBufferId = 1; |
| 195 const GLuint kServiceBufferId = 11; | 198 const GLuint kServiceBufferId = 11; |
| 196 const uint8 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; | 199 const uint8_t data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; |
| 197 manager_->CreateBuffer(kClientBufferId, kServiceBufferId); | 200 manager_->CreateBuffer(kClientBufferId, kServiceBufferId); |
| 198 Buffer* buffer = manager_->GetBuffer(kClientBufferId); | 201 Buffer* buffer = manager_->GetBuffer(kClientBufferId); |
| 199 ASSERT_TRUE(buffer != NULL); | 202 ASSERT_TRUE(buffer != NULL); |
| 200 manager_->SetTarget(buffer, kTarget); | 203 manager_->SetTarget(buffer, kTarget); |
| 201 DoBufferData( | 204 DoBufferData( |
| 202 buffer, kTarget, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR); | 205 buffer, kTarget, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR); |
| 203 EXPECT_TRUE(DoBufferSubData(buffer, kTarget, 0, sizeof(data), data)); | 206 EXPECT_TRUE(DoBufferSubData(buffer, kTarget, 0, sizeof(data), data)); |
| 204 EXPECT_TRUE(DoBufferSubData(buffer, kTarget, sizeof(data), 0, data)); | 207 EXPECT_TRUE(DoBufferSubData(buffer, kTarget, sizeof(data), 0, data)); |
| 205 EXPECT_FALSE(DoBufferSubData(buffer, kTarget, sizeof(data), 1, data)); | 208 EXPECT_FALSE(DoBufferSubData(buffer, kTarget, sizeof(data), 1, data)); |
| 206 EXPECT_FALSE(DoBufferSubData(buffer, kTarget, 0, sizeof(data) + 1, data)); | 209 EXPECT_FALSE(DoBufferSubData(buffer, kTarget, 0, sizeof(data) + 1, data)); |
| 207 EXPECT_FALSE(DoBufferSubData(buffer, kTarget, -1, sizeof(data), data)); | 210 EXPECT_FALSE(DoBufferSubData(buffer, kTarget, -1, sizeof(data), data)); |
| 208 EXPECT_FALSE(DoBufferSubData(buffer, kTarget, 0, -1, data)); | 211 EXPECT_FALSE(DoBufferSubData(buffer, kTarget, 0, -1, data)); |
| 209 DoBufferData(buffer, kTarget, 1, GL_STATIC_DRAW, NULL, GL_NO_ERROR); | 212 DoBufferData(buffer, kTarget, 1, GL_STATIC_DRAW, NULL, GL_NO_ERROR); |
| 210 const int size = 0x20000; | 213 const int size = 0x20000; |
| 211 scoped_ptr<uint8[]> temp(new uint8[size]); | 214 scoped_ptr<uint8_t[]> temp(new uint8_t[size]); |
| 212 EXPECT_FALSE(DoBufferSubData(buffer, kTarget, 0 - size, size, temp.get())); | 215 EXPECT_FALSE(DoBufferSubData(buffer, kTarget, 0 - size, size, temp.get())); |
| 213 EXPECT_FALSE(DoBufferSubData(buffer, kTarget, 1, size / 2, temp.get())); | 216 EXPECT_FALSE(DoBufferSubData(buffer, kTarget, 1, size / 2, temp.get())); |
| 214 } | 217 } |
| 215 | 218 |
| 216 TEST_F(BufferManagerTest, GetRange) { | 219 TEST_F(BufferManagerTest, GetRange) { |
| 217 const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER; | 220 const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER; |
| 218 const GLuint kClientBufferId = 1; | 221 const GLuint kClientBufferId = 1; |
| 219 const GLuint kServiceBufferId = 11; | 222 const GLuint kServiceBufferId = 11; |
| 220 const GLsizeiptr kDataSize = 10; | 223 const GLsizeiptr kDataSize = 10; |
| 221 manager_->CreateBuffer(kClientBufferId, kServiceBufferId); | 224 manager_->CreateBuffer(kClientBufferId, kServiceBufferId); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 236 const int size = 0x20000; | 239 const int size = 0x20000; |
| 237 DoBufferData(buffer, kTarget, size / 2, GL_STATIC_DRAW, NULL, GL_NO_ERROR); | 240 DoBufferData(buffer, kTarget, size / 2, GL_STATIC_DRAW, NULL, GL_NO_ERROR); |
| 238 EXPECT_TRUE(buffer->GetRange(0 - size, size) == NULL); | 241 EXPECT_TRUE(buffer->GetRange(0 - size, size) == NULL); |
| 239 EXPECT_TRUE(buffer->GetRange(1, size / 2) == NULL); | 242 EXPECT_TRUE(buffer->GetRange(1, size / 2) == NULL); |
| 240 } | 243 } |
| 241 | 244 |
| 242 TEST_F(BufferManagerTest, GetMaxValueForRangeUint8) { | 245 TEST_F(BufferManagerTest, GetMaxValueForRangeUint8) { |
| 243 const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER; | 246 const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER; |
| 244 const GLuint kClientBufferId = 1; | 247 const GLuint kClientBufferId = 1; |
| 245 const GLuint kServiceBufferId = 11; | 248 const GLuint kServiceBufferId = 11; |
| 246 const uint8 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; | 249 const uint8_t data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; |
| 247 const uint8 new_data[] = {100, 120, 110}; | 250 const uint8_t new_data[] = {100, 120, 110}; |
| 248 manager_->CreateBuffer(kClientBufferId, kServiceBufferId); | 251 manager_->CreateBuffer(kClientBufferId, kServiceBufferId); |
| 249 Buffer* buffer = manager_->GetBuffer(kClientBufferId); | 252 Buffer* buffer = manager_->GetBuffer(kClientBufferId); |
| 250 ASSERT_TRUE(buffer != NULL); | 253 ASSERT_TRUE(buffer != NULL); |
| 251 manager_->SetTarget(buffer, kTarget); | 254 manager_->SetTarget(buffer, kTarget); |
| 252 DoBufferData( | 255 DoBufferData( |
| 253 buffer, kTarget, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR); | 256 buffer, kTarget, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR); |
| 254 EXPECT_TRUE(DoBufferSubData(buffer, kTarget, 0, sizeof(data), data)); | 257 EXPECT_TRUE(DoBufferSubData(buffer, kTarget, 0, sizeof(data), data)); |
| 255 GLuint max_value; | 258 GLuint max_value; |
| 256 // Check entire range succeeds. | 259 // Check entire range succeeds. |
| 257 EXPECT_TRUE(buffer->GetMaxValueForRange( | 260 EXPECT_TRUE(buffer->GetMaxValueForRange( |
| (...skipping 16 matching lines...) Expand all Loading... |
| 274 EXPECT_FALSE(buffer->GetMaxValueForRange( | 277 EXPECT_FALSE(buffer->GetMaxValueForRange( |
| 275 0, 11, GL_UNSIGNED_BYTE, &max_value)); | 278 0, 11, GL_UNSIGNED_BYTE, &max_value)); |
| 276 EXPECT_FALSE(buffer->GetMaxValueForRange( | 279 EXPECT_FALSE(buffer->GetMaxValueForRange( |
| 277 10, 1, GL_UNSIGNED_BYTE, &max_value)); | 280 10, 1, GL_UNSIGNED_BYTE, &max_value)); |
| 278 } | 281 } |
| 279 | 282 |
| 280 TEST_F(BufferManagerTest, GetMaxValueForRangeUint16) { | 283 TEST_F(BufferManagerTest, GetMaxValueForRangeUint16) { |
| 281 const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER; | 284 const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER; |
| 282 const GLuint kClientBufferId = 1; | 285 const GLuint kClientBufferId = 1; |
| 283 const GLuint kServiceBufferId = 11; | 286 const GLuint kServiceBufferId = 11; |
| 284 const uint16 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; | 287 const uint16_t data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; |
| 285 const uint16 new_data[] = {100, 120, 110}; | 288 const uint16_t new_data[] = {100, 120, 110}; |
| 286 manager_->CreateBuffer(kClientBufferId, kServiceBufferId); | 289 manager_->CreateBuffer(kClientBufferId, kServiceBufferId); |
| 287 Buffer* buffer = manager_->GetBuffer(kClientBufferId); | 290 Buffer* buffer = manager_->GetBuffer(kClientBufferId); |
| 288 ASSERT_TRUE(buffer != NULL); | 291 ASSERT_TRUE(buffer != NULL); |
| 289 manager_->SetTarget(buffer, kTarget); | 292 manager_->SetTarget(buffer, kTarget); |
| 290 DoBufferData( | 293 DoBufferData( |
| 291 buffer, kTarget, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR); | 294 buffer, kTarget, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR); |
| 292 EXPECT_TRUE(DoBufferSubData(buffer, kTarget, 0, sizeof(data), data)); | 295 EXPECT_TRUE(DoBufferSubData(buffer, kTarget, 0, sizeof(data), data)); |
| 293 GLuint max_value; | 296 GLuint max_value; |
| 294 // Check entire range succeeds. | 297 // Check entire range succeeds. |
| 295 EXPECT_TRUE(buffer->GetMaxValueForRange( | 298 EXPECT_TRUE(buffer->GetMaxValueForRange( |
| (...skipping 19 matching lines...) Expand all Loading... |
| 315 EXPECT_FALSE(buffer->GetMaxValueForRange( | 318 EXPECT_FALSE(buffer->GetMaxValueForRange( |
| 316 0, 11, GL_UNSIGNED_SHORT, &max_value)); | 319 0, 11, GL_UNSIGNED_SHORT, &max_value)); |
| 317 EXPECT_FALSE(buffer->GetMaxValueForRange( | 320 EXPECT_FALSE(buffer->GetMaxValueForRange( |
| 318 20, 1, GL_UNSIGNED_SHORT, &max_value)); | 321 20, 1, GL_UNSIGNED_SHORT, &max_value)); |
| 319 } | 322 } |
| 320 | 323 |
| 321 TEST_F(BufferManagerTest, GetMaxValueForRangeUint32) { | 324 TEST_F(BufferManagerTest, GetMaxValueForRangeUint32) { |
| 322 const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER; | 325 const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER; |
| 323 const GLuint kClientBufferId = 1; | 326 const GLuint kClientBufferId = 1; |
| 324 const GLuint kServiceBufferId = 11; | 327 const GLuint kServiceBufferId = 11; |
| 325 const uint32 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; | 328 const uint32_t data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; |
| 326 const uint32 new_data[] = {100, 120, 110}; | 329 const uint32_t new_data[] = {100, 120, 110}; |
| 327 manager_->CreateBuffer(kClientBufferId, kServiceBufferId); | 330 manager_->CreateBuffer(kClientBufferId, kServiceBufferId); |
| 328 Buffer* buffer = manager_->GetBuffer(kClientBufferId); | 331 Buffer* buffer = manager_->GetBuffer(kClientBufferId); |
| 329 ASSERT_TRUE(buffer != NULL); | 332 ASSERT_TRUE(buffer != NULL); |
| 330 manager_->SetTarget(buffer, kTarget); | 333 manager_->SetTarget(buffer, kTarget); |
| 331 DoBufferData( | 334 DoBufferData( |
| 332 buffer, kTarget, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR); | 335 buffer, kTarget, sizeof(data), GL_STATIC_DRAW, NULL, GL_NO_ERROR); |
| 333 EXPECT_TRUE(DoBufferSubData(buffer, kTarget, 0, sizeof(data), data)); | 336 EXPECT_TRUE(DoBufferSubData(buffer, kTarget, 0, sizeof(data), data)); |
| 334 GLuint max_value; | 337 GLuint max_value; |
| 335 // Check entire range succeeds. | 338 // Check entire range succeeds. |
| 336 EXPECT_TRUE( | 339 EXPECT_TRUE( |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 379 .Times(1) | 382 .Times(1) |
| 380 .RetiresOnSaturation(); | 383 .RetiresOnSaturation(); |
| 381 buffer = NULL; | 384 buffer = NULL; |
| 382 } | 385 } |
| 383 | 386 |
| 384 // Test buffers get shadowed when they are supposed to be. | 387 // Test buffers get shadowed when they are supposed to be. |
| 385 TEST_F(BufferManagerClientSideArraysTest, StreamBuffersAreShadowed) { | 388 TEST_F(BufferManagerClientSideArraysTest, StreamBuffersAreShadowed) { |
| 386 const GLenum kTarget = GL_ARRAY_BUFFER; | 389 const GLenum kTarget = GL_ARRAY_BUFFER; |
| 387 const GLuint kClientBufferId = 1; | 390 const GLuint kClientBufferId = 1; |
| 388 const GLuint kServiceBufferId = 11; | 391 const GLuint kServiceBufferId = 11; |
| 389 static const uint32 data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; | 392 static const uint32_t data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; |
| 390 manager_->CreateBuffer(kClientBufferId, kServiceBufferId); | 393 manager_->CreateBuffer(kClientBufferId, kServiceBufferId); |
| 391 Buffer* buffer = manager_->GetBuffer(kClientBufferId); | 394 Buffer* buffer = manager_->GetBuffer(kClientBufferId); |
| 392 ASSERT_TRUE(buffer != NULL); | 395 ASSERT_TRUE(buffer != NULL); |
| 393 manager_->SetTarget(buffer, kTarget); | 396 manager_->SetTarget(buffer, kTarget); |
| 394 DoBufferData( | 397 DoBufferData( |
| 395 buffer, kTarget, sizeof(data), GL_STREAM_DRAW, data, GL_NO_ERROR); | 398 buffer, kTarget, sizeof(data), GL_STREAM_DRAW, data, GL_NO_ERROR); |
| 396 EXPECT_TRUE(buffer->IsClientSideArray()); | 399 EXPECT_TRUE(buffer->IsClientSideArray()); |
| 397 EXPECT_EQ(0, memcmp(data, buffer->GetRange(0, sizeof(data)), sizeof(data))); | 400 EXPECT_EQ(0, memcmp(data, buffer->GetRange(0, sizeof(data)), sizeof(data))); |
| 398 DoBufferData( | 401 DoBufferData( |
| 399 buffer, kTarget, sizeof(data), GL_DYNAMIC_DRAW, data, GL_NO_ERROR); | 402 buffer, kTarget, sizeof(data), GL_DYNAMIC_DRAW, data, GL_NO_ERROR); |
| 400 EXPECT_FALSE(buffer->IsClientSideArray()); | 403 EXPECT_FALSE(buffer->IsClientSideArray()); |
| 401 } | 404 } |
| 402 | 405 |
| 403 TEST_F(BufferManagerTest, MaxValueCacheClearedCorrectly) { | 406 TEST_F(BufferManagerTest, MaxValueCacheClearedCorrectly) { |
| 404 const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER; | 407 const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER; |
| 405 const GLuint kClientBufferId = 1; | 408 const GLuint kClientBufferId = 1; |
| 406 const GLuint kServiceBufferId = 11; | 409 const GLuint kServiceBufferId = 11; |
| 407 const uint32 data1[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; | 410 const uint32_t data1[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; |
| 408 const uint32 data2[] = {11, 12, 13, 14, 15, 16, 17, 18, 19, 20}; | 411 const uint32_t data2[] = {11, 12, 13, 14, 15, 16, 17, 18, 19, 20}; |
| 409 const uint32 data3[] = {30, 29, 28}; | 412 const uint32_t data3[] = {30, 29, 28}; |
| 410 manager_->CreateBuffer(kClientBufferId, kServiceBufferId); | 413 manager_->CreateBuffer(kClientBufferId, kServiceBufferId); |
| 411 Buffer* buffer = manager_->GetBuffer(kClientBufferId); | 414 Buffer* buffer = manager_->GetBuffer(kClientBufferId); |
| 412 ASSERT_TRUE(buffer != NULL); | 415 ASSERT_TRUE(buffer != NULL); |
| 413 manager_->SetTarget(buffer, kTarget); | 416 manager_->SetTarget(buffer, kTarget); |
| 414 GLuint max_value; | 417 GLuint max_value; |
| 415 // Load the buffer with some initial data, and then get the maximum value for | 418 // Load the buffer with some initial data, and then get the maximum value for |
| 416 // a range, which has the side effect of caching it. | 419 // a range, which has the side effect of caching it. |
| 417 DoBufferData( | 420 DoBufferData( |
| 418 buffer, kTarget, sizeof(data1), GL_STATIC_DRAW, data1, GL_NO_ERROR); | 421 buffer, kTarget, sizeof(data1), GL_STATIC_DRAW, data1, GL_NO_ERROR); |
| 419 EXPECT_TRUE( | 422 EXPECT_TRUE( |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 508 EXPECT_TRUE(manager_->SetTarget(buffer, kTargets[jj])); | 511 EXPECT_TRUE(manager_->SetTarget(buffer, kTargets[jj])); |
| 509 } | 512 } |
| 510 } | 513 } |
| 511 } | 514 } |
| 512 } | 515 } |
| 513 | 516 |
| 514 } // namespace gles2 | 517 } // namespace gles2 |
| 515 } // namespace gpu | 518 } // namespace gpu |
| 516 | 519 |
| 517 | 520 |
| OLD | NEW |