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 |