OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |