Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(131)

Side by Side Diff: gpu/command_buffer/service/gles2_cmd_decoder_unittest_buffers.cc

Issue 2469803003: Revert of Initialize buffers before allowing access to them. (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 #include <stdint.h> 5 #include <stdint.h>
6 6
7 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" 7 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
8 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest.h" 8 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest.h"
9 9
10 using ::gl::MockGLInterface; 10 using ::gl::MockGLInterface;
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 EXPECT_CALL(*gl_, GenBuffersARB(1, _)) 61 EXPECT_CALL(*gl_, GenBuffersARB(1, _))
62 .WillOnce(SetArgPointee<1>(kNewServiceId)); 62 .WillOnce(SetArgPointee<1>(kNewServiceId));
63 SpecializedSetup<BindBufferRange, 0>(true); 63 SpecializedSetup<BindBufferRange, 0>(true);
64 BindBufferRange cmd; 64 BindBufferRange cmd;
65 cmd.Init(GL_TRANSFORM_FEEDBACK_BUFFER, 2, kNewClientId, 4, 4); 65 cmd.Init(GL_TRANSFORM_FEEDBACK_BUFFER, 2, kNewClientId, 4, 4);
66 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 66 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
67 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 67 EXPECT_EQ(GL_NO_ERROR, GetGLError());
68 EXPECT_TRUE(GetBuffer(kNewClientId) != NULL); 68 EXPECT_TRUE(GetBuffer(kNewClientId) != NULL);
69 } 69 }
70 70
71 TEST_P(GLES3DecoderTest, MapBufferRangeUnmapBufferReadSucceeds) { 71 TEST_P(GLES2DecoderTest, MapBufferRangeUnmapBufferReadSucceeds) {
72 const GLenum kTarget = GL_ARRAY_BUFFER; 72 const GLenum kTarget = GL_ARRAY_BUFFER;
73 const GLintptr kOffset = 10; 73 const GLintptr kOffset = 10;
74 const GLsizeiptr kSize = 64; 74 const GLsizeiptr kSize = 64;
75 const GLbitfield kAccess = GL_MAP_READ_BIT; 75 const GLbitfield kAccess = GL_MAP_READ_BIT;
76 76
77 uint32_t result_shm_id = kSharedMemoryId; 77 uint32_t result_shm_id = kSharedMemoryId;
78 uint32_t result_shm_offset = kSharedMemoryOffset; 78 uint32_t result_shm_offset = kSharedMemoryOffset;
79 uint32_t data_shm_id = kSharedMemoryId; 79 uint32_t data_shm_id = kSharedMemoryId;
80 // uint32_t is Result for both MapBufferRange and UnmapBuffer commands. 80 // uint32_t is Result for both MapBufferRange and UnmapBuffer commands.
81 uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(uint32_t); 81 uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(uint32_t);
(...skipping 11 matching lines...) Expand all
93 MapBufferRange(kTarget, kOffset, kSize, kAccess)) 93 MapBufferRange(kTarget, kOffset, kSize, kAccess))
94 .WillOnce(Return(&data[0])) 94 .WillOnce(Return(&data[0]))
95 .RetiresOnSaturation(); 95 .RetiresOnSaturation();
96 96
97 typedef MapBufferRange::Result Result; 97 typedef MapBufferRange::Result Result;
98 Result* result = GetSharedMemoryAs<Result*>(); 98 Result* result = GetSharedMemoryAs<Result*>();
99 99
100 MapBufferRange cmd; 100 MapBufferRange cmd;
101 cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset, 101 cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
102 result_shm_id, result_shm_offset); 102 result_shm_id, result_shm_offset);
103 decoder_->set_unsafe_es3_apis_enabled(false);
104 *result = 0;
105 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
106 EXPECT_EQ(0u, *result);
107 decoder_->set_unsafe_es3_apis_enabled(true);
103 *result = 0; 108 *result = 0;
104 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 109 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
105 int8_t* mem = reinterpret_cast<int8_t*>(&result[1]); 110 int8_t* mem = reinterpret_cast<int8_t*>(&result[1]);
106 EXPECT_EQ(0, memcmp(&data[0], mem, kSize)); 111 EXPECT_EQ(0, memcmp(&data[0], mem, kSize));
107 EXPECT_EQ(1u, *result); 112 EXPECT_EQ(1u, *result);
108 } 113 }
109 114
110 { // UnmapBuffer 115 { // UnmapBuffer
111 EXPECT_CALL(*gl_, UnmapBuffer(kTarget)) 116 EXPECT_CALL(*gl_, UnmapBuffer(kTarget))
112 .WillOnce(Return(GL_TRUE)) 117 .WillOnce(Return(GL_TRUE))
113 .RetiresOnSaturation(); 118 .RetiresOnSaturation();
114 119
115 UnmapBuffer cmd; 120 UnmapBuffer cmd;
116 cmd.Init(kTarget); 121 cmd.Init(kTarget);
122 decoder_->set_unsafe_es3_apis_enabled(false);
123 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
124 decoder_->set_unsafe_es3_apis_enabled(true);
117 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 125 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
118 } 126 }
119 127
120 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 128 EXPECT_EQ(GL_NO_ERROR, GetGLError());
121 } 129 }
122 130
123 TEST_P(GLES3DecoderTest, MapBufferRangeUnmapBufferWriteSucceeds) { 131 TEST_P(GLES2DecoderTest, MapBufferRangeUnmapBufferWriteSucceeds) {
124 const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER; 132 const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER;
125 const GLintptr kOffset = 10; 133 const GLintptr kOffset = 10;
126 const GLsizeiptr kSize = 64; 134 const GLsizeiptr kSize = 64;
127 const GLsizeiptr kTotalSize = kOffset + kSize; 135 const GLsizeiptr kTotalSize = kOffset + kSize;
128 const GLbitfield kAccess = GL_MAP_WRITE_BIT; 136 const GLbitfield kAccess = GL_MAP_WRITE_BIT;
129 const GLbitfield kMappedAccess = GL_MAP_WRITE_BIT | GL_MAP_READ_BIT; 137 const GLbitfield kMappedAccess = GL_MAP_WRITE_BIT | GL_MAP_READ_BIT;
130 138
131 uint32_t result_shm_id = kSharedMemoryId; 139 uint32_t result_shm_id = kSharedMemoryId;
132 uint32_t result_shm_offset = kSharedMemoryOffset; 140 uint32_t result_shm_offset = kSharedMemoryOffset;
133 uint32_t data_shm_id = kSharedMemoryId; 141 uint32_t data_shm_id = kSharedMemoryId;
(...skipping 26 matching lines...) Expand all
160 168
161 { // MapBufferRange succeeds 169 { // MapBufferRange succeeds
162 EXPECT_CALL(*gl_, 170 EXPECT_CALL(*gl_,
163 MapBufferRange(kTarget, kOffset, kSize, kMappedAccess)) 171 MapBufferRange(kTarget, kOffset, kSize, kMappedAccess))
164 .WillOnce(Return(&gpu_data[kOffset])) 172 .WillOnce(Return(&gpu_data[kOffset]))
165 .RetiresOnSaturation(); 173 .RetiresOnSaturation();
166 174
167 MapBufferRange cmd; 175 MapBufferRange cmd;
168 cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset, 176 cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
169 result_shm_id, result_shm_offset); 177 result_shm_id, result_shm_offset);
178 decoder_->set_unsafe_es3_apis_enabled(false);
179 *result = 0;
180 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
181 EXPECT_EQ(0u, *result);
182 decoder_->set_unsafe_es3_apis_enabled(true);
170 *result = 0; 183 *result = 0;
171 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 184 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
172 EXPECT_EQ(1u, *result); 185 EXPECT_EQ(1u, *result);
173 // Verify the buffer range from GPU is copied to client mem. 186 // Verify the buffer range from GPU is copied to client mem.
174 EXPECT_EQ(0, memcmp(&gpu_data[kOffset], client_data, kSize)); 187 EXPECT_EQ(0, memcmp(&gpu_data[kOffset], client_data, kSize));
175 } 188 }
176 189
177 // Update the client mem. 190 // Update the client mem.
178 const int8_t kValue0 = 21; 191 const int8_t kValue0 = 21;
179 memset(client_data, kValue0, kSize); 192 memset(client_data, kValue0, kSize);
180 193
181 { // UnmapBuffer succeeds 194 { // UnmapBuffer succeeds
182 EXPECT_CALL(*gl_, UnmapBuffer(kTarget)) 195 EXPECT_CALL(*gl_, UnmapBuffer(kTarget))
183 .WillOnce(Return(GL_TRUE)) 196 .WillOnce(Return(GL_TRUE))
184 .RetiresOnSaturation(); 197 .RetiresOnSaturation();
185 198
186 UnmapBuffer cmd; 199 UnmapBuffer cmd;
187 cmd.Init(kTarget); 200 cmd.Init(kTarget);
201 decoder_->set_unsafe_es3_apis_enabled(false);
202 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
203 decoder_->set_unsafe_es3_apis_enabled(true);
188 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 204 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
189 205
190 // Verify the GPU mem and shadow data are both updated 206 // Verify the GPU mem and shadow data are both updated
191 for (GLsizeiptr ii = 0; ii < kTotalSize; ++ii) { 207 for (GLsizeiptr ii = 0; ii < kTotalSize; ++ii) {
192 if (ii < kOffset) { 208 if (ii < kOffset) {
193 EXPECT_EQ(static_cast<int8_t>(ii % 128), gpu_data[ii]); 209 EXPECT_EQ(static_cast<int8_t>(ii % 128), gpu_data[ii]);
194 EXPECT_EQ(static_cast<int8_t>(ii % 128), shadow_data[ii]); 210 EXPECT_EQ(static_cast<int8_t>(ii % 128), shadow_data[ii]);
195 } else { 211 } else {
196 EXPECT_EQ(kValue0, gpu_data[ii]); 212 EXPECT_EQ(kValue0, gpu_data[ii]);
197 EXPECT_EQ(kValue0, shadow_data[ii]); 213 EXPECT_EQ(kValue0, shadow_data[ii]);
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 } else { 322 } else {
307 EXPECT_EQ(static_cast<int8_t>(ii % 128), gpu_data[ii]); 323 EXPECT_EQ(static_cast<int8_t>(ii % 128), gpu_data[ii]);
308 EXPECT_EQ(static_cast<int8_t>(ii % 128), shadow_data[ii]); 324 EXPECT_EQ(static_cast<int8_t>(ii % 128), shadow_data[ii]);
309 } 325 }
310 } 326 }
311 } 327 }
312 328
313 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 329 EXPECT_EQ(GL_NO_ERROR, GetGLError());
314 } 330 }
315 331
316 TEST_P(GLES3DecoderTest, MapBufferRangeNotInitFails) { 332 TEST_P(GLES2DecoderTest, MapBufferRangeNotInitFails) {
317 const GLenum kTarget = GL_ARRAY_BUFFER; 333 const GLenum kTarget = GL_ARRAY_BUFFER;
318 const GLintptr kOffset = 10; 334 const GLintptr kOffset = 10;
319 const GLsizeiptr kSize = 64; 335 const GLsizeiptr kSize = 64;
320 const GLbitfield kAccess = GL_MAP_READ_BIT; 336 const GLbitfield kAccess = GL_MAP_READ_BIT;
321 std::vector<int8_t> data(kSize); 337 std::vector<int8_t> data(kSize);
322 338
323 typedef MapBufferRange::Result Result; 339 typedef MapBufferRange::Result Result;
324 Result* result = GetSharedMemoryAs<Result*>(); 340 Result* result = GetSharedMemoryAs<Result*>();
325 *result = 1; // Any value other than 0. 341 *result = 1; // Any value other than 0.
326 uint32_t result_shm_id = kSharedMemoryId; 342 uint32_t result_shm_id = kSharedMemoryId;
327 uint32_t result_shm_offset = kSharedMemoryOffset; 343 uint32_t result_shm_offset = kSharedMemoryOffset;
328 uint32_t data_shm_id = kSharedMemoryId; 344 uint32_t data_shm_id = kSharedMemoryId;
329 uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(*result); 345 uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(*result);
330 346
331 MapBufferRange cmd; 347 MapBufferRange cmd;
332 cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset, 348 cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
333 result_shm_id, result_shm_offset); 349 result_shm_id, result_shm_offset);
350 decoder_->set_unsafe_es3_apis_enabled(true);
334 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 351 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
335 } 352 }
336 353
337 TEST_P(GLES3DecoderTest, MapBufferRangeWriteInvalidateRangeSucceeds) { 354 TEST_P(GLES2DecoderTest, MapBufferRangeWriteInvalidateRangeSucceeds) {
338 const GLenum kTarget = GL_ARRAY_BUFFER; 355 const GLenum kTarget = GL_ARRAY_BUFFER;
339 const GLintptr kOffset = 10; 356 const GLintptr kOffset = 10;
340 const GLsizeiptr kSize = 64; 357 const GLsizeiptr kSize = 64;
341 // With MAP_INVALIDATE_RANGE_BIT, no need to append MAP_READ_BIT. 358 // With MAP_INVALIDATE_RANGE_BIT, no need to append MAP_READ_BIT.
342 const GLbitfield kAccess = GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_RANGE_BIT; 359 const GLbitfield kAccess = GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_RANGE_BIT;
343 360
344 DoBindBuffer(kTarget, client_buffer_id_, kServiceBufferId); 361 DoBindBuffer(kTarget, client_buffer_id_, kServiceBufferId);
345 DoBufferData(kTarget, kSize + kOffset); 362 DoBufferData(kTarget, kSize + kOffset);
346 363
347 std::vector<int8_t> data(kSize); 364 std::vector<int8_t> data(kSize);
(...skipping 12 matching lines...) Expand all
360 uint32_t result_shm_offset = kSharedMemoryOffset; 377 uint32_t result_shm_offset = kSharedMemoryOffset;
361 uint32_t data_shm_id = kSharedMemoryId; 378 uint32_t data_shm_id = kSharedMemoryId;
362 uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(*result); 379 uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(*result);
363 380
364 int8_t* mem = reinterpret_cast<int8_t*>(&result[1]); 381 int8_t* mem = reinterpret_cast<int8_t*>(&result[1]);
365 memset(mem, 72, kSize); // Init to a random value other than 0. 382 memset(mem, 72, kSize); // Init to a random value other than 0.
366 383
367 MapBufferRange cmd; 384 MapBufferRange cmd;
368 cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset, 385 cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
369 result_shm_id, result_shm_offset); 386 result_shm_id, result_shm_offset);
387 decoder_->set_unsafe_es3_apis_enabled(true);
370 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 388 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
371 } 389 }
372 390
373 TEST_P(GLES3DecoderTest, MapBufferRangeWriteInvalidateBufferSucceeds) { 391 TEST_P(GLES2DecoderTest, MapBufferRangeWriteInvalidateBufferSucceeds) {
374 // Test INVALIDATE_BUFFER_BIT is mapped to INVALIDATE_RANGE_BIT. 392 // Test INVALIDATE_BUFFER_BIT is mapped to INVALIDATE_RANGE_BIT.
375 const GLenum kTarget = GL_ARRAY_BUFFER; 393 const GLenum kTarget = GL_ARRAY_BUFFER;
376 const GLintptr kOffset = 10; 394 const GLintptr kOffset = 10;
377 const GLsizeiptr kSize = 64; 395 const GLsizeiptr kSize = 64;
378 const GLbitfield kAccess = GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT; 396 const GLbitfield kAccess = GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT;
379 // With MAP_INVALIDATE_BUFFER_BIT, no need to append MAP_READ_BIT. 397 // With MAP_INVALIDATE_BUFFER_BIT, no need to append MAP_READ_BIT.
380 const GLbitfield kFilteredAccess = 398 const GLbitfield kFilteredAccess =
381 GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_RANGE_BIT; 399 GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_RANGE_BIT;
382 400
383 DoBindBuffer(kTarget, client_buffer_id_, kServiceBufferId); 401 DoBindBuffer(kTarget, client_buffer_id_, kServiceBufferId);
(...skipping 15 matching lines...) Expand all
399 uint32_t result_shm_offset = kSharedMemoryOffset; 417 uint32_t result_shm_offset = kSharedMemoryOffset;
400 uint32_t data_shm_id = kSharedMemoryId; 418 uint32_t data_shm_id = kSharedMemoryId;
401 uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(*result); 419 uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(*result);
402 420
403 int8_t* mem = reinterpret_cast<int8_t*>(&result[1]); 421 int8_t* mem = reinterpret_cast<int8_t*>(&result[1]);
404 memset(mem, 72, kSize); // Init to a random value other than 0. 422 memset(mem, 72, kSize); // Init to a random value other than 0.
405 423
406 MapBufferRange cmd; 424 MapBufferRange cmd;
407 cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset, 425 cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
408 result_shm_id, result_shm_offset); 426 result_shm_id, result_shm_offset);
427 decoder_->set_unsafe_es3_apis_enabled(true);
409 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 428 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
410 } 429 }
411 430
412 TEST_P(GLES3DecoderTest, MapBufferRangeWriteUnsynchronizedBit) { 431 TEST_P(GLES2DecoderTest, MapBufferRangeWriteUnsynchronizedBit) {
413 // Test UNSYNCHRONIZED_BIT is filtered out. 432 // Test UNSYNCHRONIZED_BIT is filtered out.
414 const GLenum kTarget = GL_ARRAY_BUFFER; 433 const GLenum kTarget = GL_ARRAY_BUFFER;
415 const GLintptr kOffset = 10; 434 const GLintptr kOffset = 10;
416 const GLsizeiptr kSize = 64; 435 const GLsizeiptr kSize = 64;
417 const GLbitfield kAccess = GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT; 436 const GLbitfield kAccess = GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT;
418 const GLbitfield kFilteredAccess = GL_MAP_WRITE_BIT | GL_MAP_READ_BIT; 437 const GLbitfield kFilteredAccess = GL_MAP_WRITE_BIT | GL_MAP_READ_BIT;
419 438
420 DoBindBuffer(kTarget, client_buffer_id_, kServiceBufferId); 439 DoBindBuffer(kTarget, client_buffer_id_, kServiceBufferId);
421 DoBufferData(kTarget, kSize + kOffset); 440 DoBufferData(kTarget, kSize + kOffset);
422 441
(...skipping 13 matching lines...) Expand all
436 uint32_t result_shm_offset = kSharedMemoryOffset; 455 uint32_t result_shm_offset = kSharedMemoryOffset;
437 uint32_t data_shm_id = kSharedMemoryId; 456 uint32_t data_shm_id = kSharedMemoryId;
438 uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(*result); 457 uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(*result);
439 458
440 int8_t* mem = reinterpret_cast<int8_t*>(&result[1]); 459 int8_t* mem = reinterpret_cast<int8_t*>(&result[1]);
441 memset(mem, 72, kSize); // Init to a random value other than 0. 460 memset(mem, 72, kSize); // Init to a random value other than 0.
442 461
443 MapBufferRange cmd; 462 MapBufferRange cmd;
444 cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset, 463 cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
445 result_shm_id, result_shm_offset); 464 result_shm_id, result_shm_offset);
465 decoder_->set_unsafe_es3_apis_enabled(true);
446 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 466 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
447 EXPECT_EQ(0, memcmp(&data[0], mem, kSize)); 467 EXPECT_EQ(0, memcmp(&data[0], mem, kSize));
448 } 468 }
449 469
450 TEST_P(GLES3DecoderTest, MapBufferRangeWithError) { 470 TEST_P(GLES2DecoderTest, MapBufferRangeWithError) {
451 const GLenum kTarget = GL_ARRAY_BUFFER; 471 const GLenum kTarget = GL_ARRAY_BUFFER;
452 const GLintptr kOffset = 10; 472 const GLintptr kOffset = 10;
453 const GLsizeiptr kSize = 64; 473 const GLsizeiptr kSize = 64;
454 const GLbitfield kAccess = GL_MAP_READ_BIT; 474 const GLbitfield kAccess = GL_MAP_READ_BIT;
455 std::vector<int8_t> data(kSize); 475 std::vector<int8_t> data(kSize);
456 for (GLsizeiptr ii = 0; ii < kSize; ++ii) { 476 for (GLsizeiptr ii = 0; ii < kSize; ++ii) {
457 data[ii] = static_cast<int8_t>(ii % 255); 477 data[ii] = static_cast<int8_t>(ii % 255);
458 } 478 }
459 479
460 typedef MapBufferRange::Result Result; 480 typedef MapBufferRange::Result Result;
461 Result* result = GetSharedMemoryAs<Result*>(); 481 Result* result = GetSharedMemoryAs<Result*>();
462 *result = 0; 482 *result = 0;
463 uint32_t result_shm_id = kSharedMemoryId; 483 uint32_t result_shm_id = kSharedMemoryId;
464 uint32_t result_shm_offset = kSharedMemoryOffset; 484 uint32_t result_shm_offset = kSharedMemoryOffset;
465 uint32_t data_shm_id = kSharedMemoryId; 485 uint32_t data_shm_id = kSharedMemoryId;
466 uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(*result); 486 uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(*result);
467 487
468 int8_t* mem = reinterpret_cast<int8_t*>(&result[1]); 488 int8_t* mem = reinterpret_cast<int8_t*>(&result[1]);
469 memset(mem, 72, kSize); // Init to a random value other than 0. 489 memset(mem, 72, kSize); // Init to a random value other than 0.
470 490
471 MapBufferRange cmd; 491 MapBufferRange cmd;
472 cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset, 492 cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
473 result_shm_id, result_shm_offset); 493 result_shm_id, result_shm_offset);
494 decoder_->set_unsafe_es3_apis_enabled(true);
474 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 495 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
475 memset(&data[0], 72, kSize); 496 memset(&data[0], 72, kSize);
476 // Mem is untouched. 497 // Mem is untouched.
477 EXPECT_EQ(0, memcmp(&data[0], mem, kSize)); 498 EXPECT_EQ(0, memcmp(&data[0], mem, kSize));
478 EXPECT_EQ(0u, *result); 499 EXPECT_EQ(0u, *result);
479 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 500 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
480 } 501 }
481 502
482 TEST_P(GLES3DecoderTest, MapBufferRangeBadSharedMemoryFails) { 503 TEST_P(GLES2DecoderTest, MapBufferRangeBadSharedMemoryFails) {
483 const GLenum kTarget = GL_ARRAY_BUFFER; 504 const GLenum kTarget = GL_ARRAY_BUFFER;
484 const GLintptr kOffset = 10; 505 const GLintptr kOffset = 10;
485 const GLsizeiptr kSize = 64; 506 const GLsizeiptr kSize = 64;
486 const GLbitfield kAccess = GL_MAP_READ_BIT; 507 const GLbitfield kAccess = GL_MAP_READ_BIT;
487 std::vector<int8_t> data(kSize); 508 std::vector<int8_t> data(kSize);
488 for (GLsizeiptr ii = 0; ii < kSize; ++ii) { 509 for (GLsizeiptr ii = 0; ii < kSize; ++ii) {
489 data[ii] = static_cast<int8_t>(ii % 255); 510 data[ii] = static_cast<int8_t>(ii % 255);
490 } 511 }
491 512
492 DoBindBuffer(kTarget, client_buffer_id_, kServiceBufferId); 513 DoBindBuffer(kTarget, client_buffer_id_, kServiceBufferId);
493 DoBufferData(kTarget, kOffset + kSize); 514 DoBufferData(kTarget, kOffset + kSize);
494 515
495 typedef MapBufferRange::Result Result; 516 typedef MapBufferRange::Result Result;
496 Result* result = GetSharedMemoryAs<Result*>(); 517 Result* result = GetSharedMemoryAs<Result*>();
497 *result = 0; 518 *result = 0;
498 uint32_t result_shm_id = kSharedMemoryId; 519 uint32_t result_shm_id = kSharedMemoryId;
499 uint32_t result_shm_offset = kSharedMemoryOffset; 520 uint32_t result_shm_offset = kSharedMemoryOffset;
500 uint32_t data_shm_id = kSharedMemoryId; 521 uint32_t data_shm_id = kSharedMemoryId;
501 uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(*result); 522 uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(*result);
502 523
524 decoder_->set_unsafe_es3_apis_enabled(true);
503 MapBufferRange cmd; 525 MapBufferRange cmd;
504 cmd.Init(kTarget, kOffset, kSize, kAccess, 526 cmd.Init(kTarget, kOffset, kSize, kAccess,
505 kInvalidSharedMemoryId, data_shm_offset, 527 kInvalidSharedMemoryId, data_shm_offset,
506 result_shm_id, result_shm_offset); 528 result_shm_id, result_shm_offset);
507 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 529 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
508 cmd.Init(kTarget, kOffset, kSize, kAccess, 530 cmd.Init(kTarget, kOffset, kSize, kAccess,
509 data_shm_id, data_shm_offset, 531 data_shm_id, data_shm_offset,
510 kInvalidSharedMemoryId, result_shm_offset); 532 kInvalidSharedMemoryId, result_shm_offset);
511 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 533 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
512 cmd.Init(kTarget, kOffset, kSize, kAccess, 534 cmd.Init(kTarget, kOffset, kSize, kAccess,
513 data_shm_id, kInvalidSharedMemoryOffset, 535 data_shm_id, kInvalidSharedMemoryOffset,
514 result_shm_id, result_shm_offset); 536 result_shm_id, result_shm_offset);
515 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 537 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
516 cmd.Init(kTarget, kOffset, kSize, kAccess, 538 cmd.Init(kTarget, kOffset, kSize, kAccess,
517 data_shm_id, data_shm_offset, 539 data_shm_id, data_shm_offset,
518 result_shm_id, kInvalidSharedMemoryOffset); 540 result_shm_id, kInvalidSharedMemoryOffset);
519 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 541 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
520 } 542 }
521 543
522 TEST_P(GLES3DecoderTest, UnmapBufferWriteNotMappedFails) { 544 TEST_P(GLES2DecoderTest, UnmapBufferWriteNotMappedFails) {
523 const GLenum kTarget = GL_ARRAY_BUFFER; 545 const GLenum kTarget = GL_ARRAY_BUFFER;
524 546
525 DoBindBuffer(kTarget, client_buffer_id_, kServiceBufferId); 547 DoBindBuffer(kTarget, client_buffer_id_, kServiceBufferId);
526 548
527 UnmapBuffer cmd; 549 UnmapBuffer cmd;
528 cmd.Init(kTarget); 550 cmd.Init(kTarget);
551 decoder_->set_unsafe_es3_apis_enabled(true);
529 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 552 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
530 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 553 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
531 } 554 }
532 555
533 TEST_P(GLES3DecoderTest, UnmapBufferWriteNoBoundBufferFails) { 556 TEST_P(GLES2DecoderTest, UnmapBufferWriteNoBoundBufferFails) {
534 const GLenum kTarget = GL_ARRAY_BUFFER; 557 const GLenum kTarget = GL_ARRAY_BUFFER;
535 558
536 UnmapBuffer cmd; 559 UnmapBuffer cmd;
537 cmd.Init(kTarget); 560 cmd.Init(kTarget);
561 decoder_->set_unsafe_es3_apis_enabled(true);
538 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 562 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
539 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 563 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
540 } 564 }
541 565
542 TEST_P(GLES3DecoderTest, BufferDataDestroysDataStore) { 566 TEST_P(GLES2DecoderTest, BufferDataDestroysDataStore) {
543 const GLenum kTarget = GL_ARRAY_BUFFER; 567 const GLenum kTarget = GL_ARRAY_BUFFER;
544 const GLintptr kOffset = 10; 568 const GLintptr kOffset = 10;
545 const GLsizeiptr kSize = 64; 569 const GLsizeiptr kSize = 64;
546 const GLbitfield kAccess = GL_MAP_WRITE_BIT; 570 const GLbitfield kAccess = GL_MAP_WRITE_BIT;
547 const GLbitfield kFilteredAccess = GL_MAP_WRITE_BIT | GL_MAP_READ_BIT; 571 const GLbitfield kFilteredAccess = GL_MAP_WRITE_BIT | GL_MAP_READ_BIT;
548 572
549 uint32_t result_shm_id = kSharedMemoryId; 573 uint32_t result_shm_id = kSharedMemoryId;
550 uint32_t result_shm_offset = kSharedMemoryOffset; 574 uint32_t result_shm_offset = kSharedMemoryOffset;
551 uint32_t data_shm_id = kSharedMemoryId; 575 uint32_t data_shm_id = kSharedMemoryId;
552 // uint32_t is Result for both MapBufferRange and UnmapBuffer commands. 576 // uint32_t is Result for both MapBufferRange and UnmapBuffer commands.
553 uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(uint32_t); 577 uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(uint32_t);
554 578
555 DoBindBuffer(kTarget, client_buffer_id_, kServiceBufferId); 579 DoBindBuffer(kTarget, client_buffer_id_, kServiceBufferId);
556 DoBufferData(kTarget, kSize + kOffset); 580 DoBufferData(kTarget, kSize + kOffset);
557 581
558 std::vector<int8_t> data(kSize); 582 std::vector<int8_t> data(kSize);
559 583
584 decoder_->set_unsafe_es3_apis_enabled(true);
585
560 { // MapBufferRange succeeds 586 { // MapBufferRange succeeds
561 EXPECT_CALL(*gl_, 587 EXPECT_CALL(*gl_,
562 MapBufferRange(kTarget, kOffset, kSize, kFilteredAccess)) 588 MapBufferRange(kTarget, kOffset, kSize, kFilteredAccess))
563 .WillOnce(Return(&data[0])) 589 .WillOnce(Return(&data[0]))
564 .RetiresOnSaturation(); 590 .RetiresOnSaturation();
565 591
566 typedef MapBufferRange::Result Result; 592 typedef MapBufferRange::Result Result;
567 Result* result = GetSharedMemoryAs<Result*>(); 593 Result* result = GetSharedMemoryAs<Result*>();
568 594
569 MapBufferRange cmd; 595 MapBufferRange cmd;
(...skipping 10 matching lines...) Expand all
580 } 606 }
581 607
582 { // UnmapBuffer fails. 608 { // UnmapBuffer fails.
583 UnmapBuffer cmd; 609 UnmapBuffer cmd;
584 cmd.Init(kTarget); 610 cmd.Init(kTarget);
585 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 611 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
586 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 612 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
587 } 613 }
588 } 614 }
589 615
590 TEST_P(GLES3DecoderTest, DeleteBuffersDestroysDataStore) { 616 TEST_P(GLES2DecoderTest, DeleteBuffersDestroysDataStore) {
591 const GLenum kTarget = GL_ARRAY_BUFFER; 617 const GLenum kTarget = GL_ARRAY_BUFFER;
592 const GLintptr kOffset = 10; 618 const GLintptr kOffset = 10;
593 const GLsizeiptr kSize = 64; 619 const GLsizeiptr kSize = 64;
594 const GLbitfield kAccess = GL_MAP_WRITE_BIT; 620 const GLbitfield kAccess = GL_MAP_WRITE_BIT;
595 const GLbitfield kFilteredAccess = GL_MAP_WRITE_BIT | GL_MAP_READ_BIT; 621 const GLbitfield kFilteredAccess = GL_MAP_WRITE_BIT | GL_MAP_READ_BIT;
596 622
597 uint32_t result_shm_id = kSharedMemoryId; 623 uint32_t result_shm_id = kSharedMemoryId;
598 uint32_t result_shm_offset = kSharedMemoryOffset; 624 uint32_t result_shm_offset = kSharedMemoryOffset;
599 uint32_t data_shm_id = kSharedMemoryId; 625 uint32_t data_shm_id = kSharedMemoryId;
600 // uint32_t is Result for both MapBufferRange and UnmapBuffer commands. 626 // uint32_t is Result for both MapBufferRange and UnmapBuffer commands.
601 uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(uint32_t); 627 uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(uint32_t);
602 628
603 DoBindBuffer(kTarget, client_buffer_id_, kServiceBufferId); 629 DoBindBuffer(kTarget, client_buffer_id_, kServiceBufferId);
604 DoBufferData(kTarget, kSize + kOffset); 630 DoBufferData(kTarget, kSize + kOffset);
605 631
606 std::vector<int8_t> data(kSize); 632 std::vector<int8_t> data(kSize);
607 633
634 decoder_->set_unsafe_es3_apis_enabled(true);
635
608 { // MapBufferRange succeeds 636 { // MapBufferRange succeeds
609 EXPECT_CALL(*gl_, 637 EXPECT_CALL(*gl_,
610 MapBufferRange(kTarget, kOffset, kSize, kFilteredAccess)) 638 MapBufferRange(kTarget, kOffset, kSize, kFilteredAccess))
611 .WillOnce(Return(&data[0])) 639 .WillOnce(Return(&data[0]))
612 .RetiresOnSaturation(); 640 .RetiresOnSaturation();
613 641
614 typedef MapBufferRange::Result Result; 642 typedef MapBufferRange::Result Result;
615 Result* result = GetSharedMemoryAs<Result*>(); 643 Result* result = GetSharedMemoryAs<Result*>();
616 644
617 MapBufferRange cmd; 645 MapBufferRange cmd;
(...skipping 10 matching lines...) Expand all
628 } 656 }
629 657
630 { // UnmapBuffer fails. 658 { // UnmapBuffer fails.
631 UnmapBuffer cmd; 659 UnmapBuffer cmd;
632 cmd.Init(kTarget); 660 cmd.Init(kTarget);
633 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 661 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
634 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 662 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
635 } 663 }
636 } 664 }
637 665
638 TEST_P(GLES3DecoderTest, MapUnmapBufferInvalidTarget) { 666 TEST_P(GLES2DecoderTest, MapUnmapBufferInvalidTarget) {
639 const GLenum kTarget = GL_TEXTURE_2D; 667 const GLenum kTarget = GL_TEXTURE_2D;
640 const GLintptr kOffset = 10; 668 const GLintptr kOffset = 10;
641 const GLsizeiptr kSize = 64; 669 const GLsizeiptr kSize = 64;
642 const GLbitfield kAccess = GL_MAP_WRITE_BIT; 670 const GLbitfield kAccess = GL_MAP_WRITE_BIT;
643 671
644 uint32_t result_shm_id = kSharedMemoryId; 672 uint32_t result_shm_id = kSharedMemoryId;
645 uint32_t result_shm_offset = kSharedMemoryOffset; 673 uint32_t result_shm_offset = kSharedMemoryOffset;
646 uint32_t data_shm_id = kSharedMemoryId; 674 uint32_t data_shm_id = kSharedMemoryId;
647 // uint32_t is Result for both MapBufferRange and UnmapBuffer commands. 675 // uint32_t is Result for both MapBufferRange and UnmapBuffer commands.
648 uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(uint32_t); 676 uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(uint32_t);
649 677
678 decoder_->set_unsafe_es3_apis_enabled(true);
679
650 typedef MapBufferRange::Result Result; 680 typedef MapBufferRange::Result Result;
651 Result* result = GetSharedMemoryAs<Result*>(); 681 Result* result = GetSharedMemoryAs<Result*>();
652 682
653 { 683 {
654 MapBufferRange cmd; 684 MapBufferRange cmd;
655 cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset, 685 cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
656 result_shm_id, result_shm_offset); 686 result_shm_id, result_shm_offset);
657 *result = 0; 687 *result = 0;
658 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 688 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
659 EXPECT_EQ(0u, *result); 689 EXPECT_EQ(0u, *result);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
714 if (ii >= kWriteOffset && ii < kWriteOffset + kCopySize) { 744 if (ii >= kWriteOffset && ii < kWriteOffset + kCopySize) {
715 EXPECT_EQ(kValue0, shadow_data[ii]); 745 EXPECT_EQ(kValue0, shadow_data[ii]);
716 } else { 746 } else {
717 EXPECT_EQ(kValue1, shadow_data[ii]); 747 EXPECT_EQ(kValue1, shadow_data[ii]);
718 } 748 }
719 } 749 }
720 } 750 }
721 751
722 } // namespace gles2 752 } // namespace gles2
723 } // namespace gpu 753 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h ('k') | gpu/command_buffer/service/indexed_buffer_binding_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698