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

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

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

Powered by Google App Engine
This is Rietveld 408576698