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

Side by Side Diff: gpu/command_buffer/client/gles2_implementation_unittest.cc

Issue 8919014: Revert "Revert 113479 - Revert "Revert 113250 - Add CommandBuffer::SetGetBuffer"" (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 // Tests for the Command Buffer Helper. 5 // Tests for the Command Buffer Helper.
6 6
7 #include "gpu/command_buffer/client/gles2_implementation.h" 7 #include "gpu/command_buffer/client/gles2_implementation.h"
8 8
9 #include <GLES2/gl2ext.h> 9 #include <GLES2/gl2ext.h>
10 #include "gpu/command_buffer/common/command_buffer.h" 10 #include "gpu/command_buffer/common/command_buffer.h"
11 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "testing/gmock/include/gmock/gmock.h" 12 #include "testing/gmock/include/gmock/gmock.h"
13 13
14 #if !defined(GLES2_SUPPORT_CLIENT_SIDE_ARRAYS) 14 #if !defined(GLES2_SUPPORT_CLIENT_SIDE_ARRAYS)
15 #define GLES2_SUPPORT_CLIENT_SIDE_ARRAYS 15 #define GLES2_SUPPORT_CLIENT_SIDE_ARRAYS
16 #endif 16 #endif
17 17
18 using testing::_;
19 using testing::DoAll;
20 using testing::InSequence;
21 using testing::Invoke;
22 using testing::Mock;
23 using testing::Sequence;
24 using testing::Truly;
25 using testing::Return;
26
18 namespace gpu { 27 namespace gpu {
19 28
20 class GLES2MockCommandBufferHelper : public CommandBuffer { 29 class GLES2MockCommandBufferHelper : public CommandBuffer {
21 public: 30 public:
22 static const int32 kTransferBufferId = 0x123; 31 static const int32 kTransferBufferBaseId = 0x123;
32 static const int32 kMaxTransferBuffers = 6;
23 33
24 GLES2MockCommandBufferHelper() { } 34 GLES2MockCommandBufferHelper() { }
25 virtual ~GLES2MockCommandBufferHelper() { } 35 virtual ~GLES2MockCommandBufferHelper() { }
26 36
27 // CommandBuffer implementation: 37 // CommandBuffer implementation:
28 virtual bool Initialize(int32 size) { 38 virtual bool Initialize() {
29 ring_buffer_.reset(new CommandBufferEntry[size]);
30 ring_buffer_buffer_.ptr = ring_buffer_.get();
31 ring_buffer_buffer_.size = size;
32 state_.num_entries = size / sizeof(ring_buffer_[0]);
33 state_.token = 10000; // All token checks in the tests should pass.
34 return true; 39 return true;
35 } 40 }
36 41
37 virtual bool Initialize(base::SharedMemory* buffer, int32 size) {
38 GPU_NOTREACHED();
39 return false;
40 }
41
42 virtual Buffer GetRingBuffer() {
43 return ring_buffer_buffer_;
44 }
45
46 virtual State GetState() { 42 virtual State GetState() {
47 return state_; 43 return state_;
48 } 44 }
49 45
50 virtual State GetLastState() { 46 virtual State GetLastState() {
51 return state_; 47 return state_;
52 } 48 }
53 49
54 virtual void Flush(int32 put_offset) { 50 virtual void Flush(int32 put_offset) {
55 state_.put_offset = put_offset; 51 state_.put_offset = put_offset;
56 } 52 }
57 53
58 virtual State FlushSync(int32 put_offset, int32 last_known_get) { 54 virtual State FlushSync(int32 put_offset, int32 last_known_get) {
59 state_.put_offset = put_offset; 55 state_.put_offset = put_offset;
60 state_.get_offset = put_offset; 56 state_.get_offset = put_offset;
61 OnFlush(transfer_buffer_buffer_.ptr); 57 // Warning: This is a hack. We just happen to know that the default
58 // transfer buffer will be the first transfer buffer.
59 OnFlush(transfer_buffer_buffers_[0].ptr);
62 return state_; 60 return state_;
63 } 61 }
64 62
63 virtual void SetGetBuffer(int transfer_buffer_id) {
64 ring_buffer_buffer_ = GetTransferBuffer(transfer_buffer_id);
65 ring_buffer_ = static_cast<CommandBufferEntry*>(ring_buffer_buffer_.ptr);
66 state_.num_entries = ring_buffer_buffer_.size / sizeof(ring_buffer_[0]);
67 state_.token = 10000; // All token checks in the tests should pass.
68 }
69
65 virtual void SetGetOffset(int32 get_offset) { 70 virtual void SetGetOffset(int32 get_offset) {
66 state_.get_offset = get_offset; 71 state_.get_offset = get_offset;
67 } 72 }
68 73
69 virtual int32 CreateTransferBuffer(size_t size, int32 id_request) { 74 // Get's the Id of the next transfer buffer that will be returned
70 transfer_buffer_.reset(new int8[size]); 75 // by CreateTransferBuffer. This is useful for testing expected ids.
71 transfer_buffer_buffer_.ptr = transfer_buffer_.get(); 76 int32 GetNextFreeTransferBufferId() {
72 transfer_buffer_buffer_.size = size; 77 for (size_t ii = 0; ii < arraysize(transfer_buffers_); ++ii) {
73 return kTransferBufferId; 78 if (!transfer_buffers_[ii].get()) {
79 return kTransferBufferBaseId + ii;
80 }
81 }
82 return -1;
74 } 83 }
75 84
76 virtual void DestroyTransferBuffer(int32 /* id */) { 85 virtual int32 CreateTransferBuffer(size_t size, int32 id_request) {
77 GPU_NOTREACHED(); 86 int32 id = GetNextFreeTransferBufferId();
87 if (id >= 0) {
88 int32 ndx = id - kTransferBufferBaseId;
89 transfer_buffers_[ndx].reset(new int8[size]);
90 transfer_buffer_buffers_[ndx].ptr = transfer_buffers_[ndx].get();
91 transfer_buffer_buffers_[ndx].size = size;
92 }
93 return id;
94 }
95
96 void DestroyTransferBufferHelper(int32 id) {
97 GPU_DCHECK_GE(id, kTransferBufferBaseId);
98 GPU_DCHECK_LT(id, kTransferBufferBaseId + kMaxTransferBuffers);
99 id -= kTransferBufferBaseId;
100 transfer_buffers_[id].reset();
101 transfer_buffer_buffers_[id] = Buffer();
78 } 102 }
79 103
80 virtual Buffer GetTransferBuffer(int32 id) { 104 virtual Buffer GetTransferBuffer(int32 id) {
81 GPU_DCHECK_EQ(id, kTransferBufferId); 105 GPU_DCHECK_GE(id, kTransferBufferBaseId);
82 return transfer_buffer_buffer_; 106 GPU_DCHECK_LT(id, kTransferBufferBaseId + kMaxTransferBuffers);
107 return transfer_buffer_buffers_[id - kTransferBufferBaseId];
83 } 108 }
84 109
85 virtual int32 RegisterTransferBuffer(base::SharedMemory* shared_memory, 110 virtual int32 RegisterTransferBuffer(base::SharedMemory* shared_memory,
86 size_t size, 111 size_t size,
87 int32 id_request) { 112 int32 id_request) {
88 GPU_NOTREACHED(); 113 GPU_NOTREACHED();
89 return -1; 114 return -1;
90 } 115 }
91 116
92 virtual void SetToken(int32 token) { 117 virtual void SetToken(int32 token) {
93 GPU_NOTREACHED(); 118 GPU_NOTREACHED();
94 state_.token = token; 119 state_.token = token;
95 } 120 }
96 121
97 virtual void SetParseError(error::Error error) { 122 virtual void SetParseError(error::Error error) {
98 GPU_NOTREACHED(); 123 GPU_NOTREACHED();
99 state_.error = error; 124 state_.error = error;
100 } 125 }
101 126
102 virtual void SetContextLostReason(error::ContextLostReason reason) { 127 virtual void SetContextLostReason(error::ContextLostReason reason) {
103 GPU_NOTREACHED(); 128 GPU_NOTREACHED();
104 state_.context_lost_reason = reason; 129 state_.context_lost_reason = reason;
105 } 130 }
106 131
107 virtual void OnFlush(void* transfer_buffer) = 0; 132 virtual void OnFlush(void* transfer_buffer) = 0;
108 133
109 private: 134 private:
110 scoped_array<int8> transfer_buffer_; 135 scoped_array<int8> transfer_buffers_[kMaxTransferBuffers];
111 Buffer transfer_buffer_buffer_; 136 Buffer transfer_buffer_buffers_[kMaxTransferBuffers];
112 scoped_array<CommandBufferEntry> ring_buffer_; 137 CommandBufferEntry* ring_buffer_;
113 Buffer ring_buffer_buffer_; 138 Buffer ring_buffer_buffer_;
114 State state_; 139 State state_;
115 }; 140 };
116 141
117 class MockGLES2CommandBuffer : public GLES2MockCommandBufferHelper { 142 class MockGLES2CommandBuffer : public GLES2MockCommandBufferHelper {
118 public: 143 public:
144 MockGLES2CommandBuffer() {
145 DelegateToFake();
146 }
147
119 virtual ~MockGLES2CommandBuffer() { 148 virtual ~MockGLES2CommandBuffer() {
120 } 149 }
121 150
122 // This is so we can use all the gmock functions when Flush is called. 151 // This is so we can use all the gmock functions when Flush is called.
123 MOCK_METHOD1(OnFlush, void(void* result)); 152 MOCK_METHOD1(OnFlush, void(void* result));
124 MOCK_METHOD1(DestroyTransferBuffer, void(int32 id)); 153 MOCK_METHOD1(DestroyTransferBuffer, void(int32 id));
154
155 void DelegateToFake() {
156 ON_CALL(*this, DestroyTransferBuffer(_))
157 .WillByDefault(Invoke(
158 this, &GLES2MockCommandBufferHelper::DestroyTransferBufferHelper));
159 }
125 }; 160 };
126 161
127 // GCC requires these declarations, but MSVC requires they not be present 162 // GCC requires these declarations, but MSVC requires they not be present
128 #ifndef _MSC_VER 163 #ifndef _MSC_VER
129 const int32 GLES2MockCommandBufferHelper::kTransferBufferId; 164 const int32 GLES2MockCommandBufferHelper::kTransferBufferBaseId;
165 const int32 GLES2MockCommandBufferHelper::kMaxTransferBuffers;
130 #endif 166 #endif
131 167
132 namespace gles2 { 168 namespace gles2 {
133 169
134 using testing::_;
135 using testing::DoAll;
136 using testing::InSequence;
137 using testing::Invoke;
138 using testing::Mock;
139 using testing::Sequence;
140 using testing::Truly;
141 using testing::Return;
142
143 ACTION_P(SetMemory, obj) { 170 ACTION_P(SetMemory, obj) {
144 memcpy(arg0, &obj, sizeof(obj)); 171 memcpy(arg0, &obj, sizeof(obj));
145 } 172 }
146 173
147 ACTION_P2(SetMemoryAtOffset, offset, obj) { 174 ACTION_P2(SetMemoryAtOffset, offset, obj) {
148 memcpy(static_cast<char*>(arg0) + offset, &obj, sizeof(obj)); 175 memcpy(static_cast<char*>(arg0) + offset, &obj, sizeof(obj));
149 } 176 }
150 177
151 ACTION_P3(SetMemoryAtOffsetFromArray, offset, array, size) { 178 ACTION_P3(SetMemoryAtOffsetFromArray, offset, array, size) {
152 memcpy(static_cast<char*>(arg0) + offset, array, size); 179 memcpy(static_cast<char*>(arg0) + offset, array, size);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 char str[7]; 214 char str[7];
188 }; 215 };
189 #pragma pack(pop) 216 #pragma pack(pop)
190 217
191 class GLES2CommandBufferTestBase : public testing::Test { 218 class GLES2CommandBufferTestBase : public testing::Test {
192 protected: 219 protected:
193 static const int32 kNumCommandEntries = 400; 220 static const int32 kNumCommandEntries = 400;
194 static const int32 kCommandBufferSizeBytes = 221 static const int32 kCommandBufferSizeBytes =
195 kNumCommandEntries * sizeof(CommandBufferEntry); 222 kNumCommandEntries * sizeof(CommandBufferEntry);
196 static const size_t kTransferBufferSize = 256; 223 static const size_t kTransferBufferSize = 256;
197 static const int32 kTransferBufferId =
198 GLES2MockCommandBufferHelper::kTransferBufferId;
199 static const uint8 kInitialValue = 0xBD; 224 static const uint8 kInitialValue = 0xBD;
200 225
201 GLES2CommandBufferTestBase() 226 GLES2CommandBufferTestBase()
202 : commands_(NULL), 227 : commands_(NULL),
203 token_(0), 228 token_(0),
204 offset_(0), 229 offset_(0),
205 initial_offset_(0), 230 initial_offset_(0),
206 alignment_(0) { 231 alignment_(0),
232 transfer_buffer_id_(-1) {
207 } 233 }
208 234
209 void SetupCommandBuffer(unsigned int offset, unsigned alignment) { 235 void SetupCommandBuffer(unsigned int offset, unsigned alignment) {
210 initial_offset_ = offset; 236 initial_offset_ = offset;
211 offset_ = offset; 237 offset_ = offset;
212 alignment_ = alignment; 238 alignment_ = alignment;
213 239
214 command_buffer_.reset(new MockGLES2CommandBuffer()); 240 command_buffer_.reset(new MockGLES2CommandBuffer());
215 command_buffer_->Initialize(kCommandBufferSizeBytes); 241 command_buffer_->Initialize();
216 242
217 EXPECT_EQ(kTransferBufferId, 243 transfer_buffer_id_ =
218 command_buffer_->CreateTransferBuffer(kTransferBufferSize, -1)); 244 command_buffer_->CreateTransferBuffer(kTransferBufferSize, -1);
219 transfer_buffer_ = command_buffer_->GetTransferBuffer(kTransferBufferId); 245 transfer_buffer_ = command_buffer_->GetTransferBuffer(transfer_buffer_id_);
220 ClearTransferBuffer(); 246 ClearTransferBuffer();
221 247
222 helper_.reset(new GLES2CmdHelper(command_buffer_.get())); 248 helper_.reset(new GLES2CmdHelper(command_buffer_.get()));
223 helper_->Initialize(kCommandBufferSizeBytes); 249 helper_->Initialize(kCommandBufferSizeBytes);
224 } 250 }
225 251
226 const void* GetPut() { 252 const void* GetPut() {
227 return helper_->GetSpace(0); 253 return helper_->GetSpace(0);
228 } 254 }
229 255
230 size_t MaxTransferBufferSize() { 256 size_t MaxTransferBufferSize() {
231 return kTransferBufferSize - initial_offset_; 257 return kTransferBufferSize - initial_offset_;
232 } 258 }
233 259
234 void ClearCommands() { 260 void ClearCommands() {
235 Buffer ring_buffer = command_buffer_->GetRingBuffer(); 261 Buffer ring_buffer = helper_->get_ring_buffer();
236 memset(ring_buffer.ptr, kInitialValue, ring_buffer.size); 262 memset(ring_buffer.ptr, kInitialValue, ring_buffer.size);
237 } 263 }
238 264
239 bool NoCommandsWritten() { 265 bool NoCommandsWritten() {
240 return static_cast<const uint8*>(static_cast<const void*>(commands_))[0] == 266 return static_cast<const uint8*>(static_cast<const void*>(commands_))[0] ==
241 kInitialValue; 267 kInitialValue;
242 } 268 }
243 269
244 void ClearTransferBuffer() { 270 void ClearTransferBuffer() {
245 memset(transfer_buffer_.ptr, kInitialValue, kTransferBufferSize); 271 memset(transfer_buffer_.ptr, kInitialValue, kTransferBufferSize);
246 } 272 }
247 273
248 unsigned int RoundToAlignment(unsigned int size) { 274 unsigned int RoundToAlignment(unsigned int size) {
249 return (size + alignment_ - 1) & ~(alignment_ - 1); 275 return (size + alignment_ - 1) & ~(alignment_ - 1);
250 } 276 }
251 277
252 int GetNextToken() { 278 int GetNextToken() {
253 return ++token_; 279 return ++token_;
254 } 280 }
255 281
282 int32 GetNextFreeTransferBufferId() {
283 return command_buffer_->GetNextFreeTransferBufferId();
284 }
285
256 uint32 AllocateTransferBuffer(size_t size) { 286 uint32 AllocateTransferBuffer(size_t size) {
257 if (offset_ + size > kTransferBufferSize) { 287 if (offset_ + size > kTransferBufferSize) {
258 offset_ = initial_offset_; 288 offset_ = initial_offset_;
259 } 289 }
260 uint32 offset = offset_; 290 uint32 offset = offset_;
261 offset_ += RoundToAlignment(size); 291 offset_ += RoundToAlignment(size);
262 return offset; 292 return offset;
263 } 293 }
264 294
265 void* GetTransferAddressFromOffset(uint32 offset, size_t size) { 295 void* GetTransferAddressFromOffset(uint32 offset, size_t size) {
266 EXPECT_LE(offset + size, transfer_buffer_.size); 296 EXPECT_LE(offset + size, transfer_buffer_.size);
267 return static_cast<int8*>(transfer_buffer_.ptr) + offset; 297 return static_cast<int8*>(transfer_buffer_.ptr) + offset;
268 } 298 }
269 299
270 template <typename T> 300 template <typename T>
271 T* GetTransferAddressFromOffsetAs(uint32 offset, size_t size) { 301 T* GetTransferAddressFromOffsetAs(uint32 offset, size_t size) {
272 return static_cast<T*>(GetTransferAddressFromOffset(offset, size)); 302 return static_cast<T*>(GetTransferAddressFromOffset(offset, size));
273 } 303 }
274 304
275 Buffer transfer_buffer_; 305 Buffer transfer_buffer_;
276 CommandBufferEntry* commands_; 306 CommandBufferEntry* commands_;
277 scoped_ptr<MockGLES2CommandBuffer> command_buffer_; 307 scoped_ptr<MockGLES2CommandBuffer> command_buffer_;
278 scoped_ptr<GLES2CmdHelper> helper_; 308 scoped_ptr<GLES2CmdHelper> helper_;
279 int token_; 309 int token_;
280 uint32 offset_; 310 uint32 offset_;
281 uint32 initial_offset_; 311 uint32 initial_offset_;
282 uint32 alignment_; 312 uint32 alignment_;
313 int32 transfer_buffer_id_;
283 }; 314 };
284 315
285 // GCC requires these declarations, but MSVC requires they not be present 316 // GCC requires these declarations, but MSVC requires they not be present
286 #ifndef _MSC_VER 317 #ifndef _MSC_VER
287 const int32 GLES2CommandBufferTestBase::kNumCommandEntries; 318 const int32 GLES2CommandBufferTestBase::kNumCommandEntries;
288 const int32 GLES2CommandBufferTestBase::kCommandBufferSizeBytes; 319 const int32 GLES2CommandBufferTestBase::kCommandBufferSizeBytes;
289 const size_t GLES2CommandBufferTestBase::kTransferBufferSize; 320 const size_t GLES2CommandBufferTestBase::kTransferBufferSize;
290 const int32 GLES2CommandBufferTestBase::kTransferBufferId;
291 const uint8 GLES2CommandBufferTestBase::kInitialValue; 321 const uint8 GLES2CommandBufferTestBase::kInitialValue;
292 #endif 322 #endif
293 323
294 class TransferBufferTest : public GLES2CommandBufferTestBase { 324 class TransferBufferTest : public GLES2CommandBufferTestBase {
295 protected: 325 protected:
296 static const unsigned int kStartingOffset = 64; 326 static const unsigned int kStartingOffset = 64;
297 static const unsigned int kAlignment = 4; 327 static const unsigned int kAlignment = 4;
298 328
299 TransferBufferTest() { } 329 TransferBufferTest() { }
300 330
301 virtual void SetUp() { 331 virtual void SetUp() {
302 SetupCommandBuffer( 332 SetupCommandBuffer(
303 GLES2Implementation::kStartingOffset, 333 GLES2Implementation::kStartingOffset,
304 GLES2Implementation::kAlignment); 334 GLES2Implementation::kAlignment);
305 335
336 transfer_buffer_id_ =
337 command_buffer_->CreateTransferBuffer(kTransferBufferSize, -1);
338
306 transfer_buffer_.reset(new TransferBuffer( 339 transfer_buffer_.reset(new TransferBuffer(
307 helper_.get(), 340 helper_.get(),
308 kTransferBufferId, 341 transfer_buffer_id_,
309 GetTransferAddressFromOffset(0, 0), 342 GetTransferAddressFromOffset(0, 0),
310 kTransferBufferSize, 343 kTransferBufferSize,
311 kStartingOffset, 344 kStartingOffset,
312 kAlignment)); 345 kAlignment));
313 } 346 }
314 347
315 virtual void TearDown() { 348 virtual void TearDown() {
316 transfer_buffer_.reset(); 349 transfer_buffer_.reset();
317 } 350 }
318 351
319 scoped_ptr<TransferBuffer> transfer_buffer_; 352 scoped_ptr<TransferBuffer> transfer_buffer_;
320 }; 353 };
321 354
322 // GCC requires these declarations, but MSVC requires they not be present 355 // GCC requires these declarations, but MSVC requires they not be present
323 #ifndef _MSC_VER 356 #ifndef _MSC_VER
324 const unsigned int TransferBufferTest::kStartingOffset; 357 const unsigned int TransferBufferTest::kStartingOffset;
325 const unsigned int TransferBufferTest::kAlignment; 358 const unsigned int TransferBufferTest::kAlignment;
326 #endif 359 #endif
327 360
328 TEST_F(TransferBufferTest, Basic) { 361 TEST_F(TransferBufferTest, Basic) {
329 EXPECT_TRUE(transfer_buffer_->HaveBuffer()); 362 EXPECT_TRUE(transfer_buffer_->HaveBuffer());
330 EXPECT_EQ(kTransferBufferId, transfer_buffer_->GetShmId()); 363 EXPECT_EQ(transfer_buffer_id_, transfer_buffer_->GetShmId());
331 } 364 }
332 365
333 TEST_F(TransferBufferTest, Free) { 366 TEST_F(TransferBufferTest, Free) {
334 EXPECT_TRUE(transfer_buffer_->HaveBuffer()); 367 EXPECT_TRUE(transfer_buffer_->HaveBuffer());
335 368
336 // Free buffer. 369 // Free buffer.
337 EXPECT_CALL(*command_buffer_, DestroyTransferBuffer(_)) 370 EXPECT_CALL(*command_buffer_, DestroyTransferBuffer(_))
338 .Times(1) 371 .Times(1)
339 .RetiresOnSaturation(); 372 .RetiresOnSaturation();
340 transfer_buffer_->Free(); 373 transfer_buffer_->Free();
341 // See it's freed. 374 // See it's freed.
342 EXPECT_FALSE(transfer_buffer_->HaveBuffer()); 375 EXPECT_FALSE(transfer_buffer_->HaveBuffer());
343 // See that it gets reallocated. 376 // See that it gets reallocated.
344 EXPECT_EQ(kTransferBufferId, transfer_buffer_->GetShmId()); 377 EXPECT_EQ(transfer_buffer_id_, transfer_buffer_->GetShmId());
345 EXPECT_TRUE(transfer_buffer_->HaveBuffer()); 378 EXPECT_TRUE(transfer_buffer_->HaveBuffer());
346 379
347 // Free buffer. 380 // Free buffer.
348 EXPECT_CALL(*command_buffer_, DestroyTransferBuffer(_)) 381 EXPECT_CALL(*command_buffer_, DestroyTransferBuffer(_))
349 .Times(1) 382 .Times(1)
350 .RetiresOnSaturation(); 383 .RetiresOnSaturation();
351 transfer_buffer_->Free(); 384 transfer_buffer_->Free();
352 // See it's freed. 385 // See it's freed.
353 EXPECT_FALSE(transfer_buffer_->HaveBuffer()); 386 EXPECT_FALSE(transfer_buffer_->HaveBuffer());
354 // See that it gets reallocated. 387 // See that it gets reallocated.
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 ids += num; 499 ids += num;
467 num_ids -= num; 500 num_ids -= num;
468 } 501 }
469 } 502 }
470 } 503 }
471 504
472 gl_.reset(new GLES2Implementation( 505 gl_.reset(new GLES2Implementation(
473 helper_.get(), 506 helper_.get(),
474 kTransferBufferSize, 507 kTransferBufferSize,
475 transfer_buffer_.ptr, 508 transfer_buffer_.ptr,
476 kTransferBufferId, 509 transfer_buffer_id_,
477 shared_resources, 510 shared_resources,
478 bind_generates_resource)); 511 bind_generates_resource));
479 } 512 }
480 513
481 EXPECT_CALL(*command_buffer_, OnFlush(_)) 514 EXPECT_CALL(*command_buffer_, OnFlush(_))
482 .Times(1) 515 .Times(1)
483 .RetiresOnSaturation(); 516 .RetiresOnSaturation();
484 helper_->CommandBufferHelper::Finish(); 517 helper_->CommandBufferHelper::Finish();
485 Buffer ring_buffer = command_buffer_->GetRingBuffer(); 518 Buffer ring_buffer = helper_->get_ring_buffer();
486 commands_ = static_cast<CommandBufferEntry*>(ring_buffer.ptr) + 519 commands_ = static_cast<CommandBufferEntry*>(ring_buffer.ptr) +
487 command_buffer_->GetState().put_offset; 520 command_buffer_->GetState().put_offset;
488 ClearCommands(); 521 ClearCommands();
489 } 522 }
490 523
491 Sequence sequence_; 524 Sequence sequence_;
492 scoped_ptr<GLES2Implementation> gl_; 525 scoped_ptr<GLES2Implementation> gl_;
493 }; 526 };
494 527
495 class GLES2ImplementationStrictSharedTest : public GLES2ImplementationTest { 528 class GLES2ImplementationStrictSharedTest : public GLES2ImplementationTest {
(...skipping 22 matching lines...) Expand all
518 cmd::SetBucketData set_bucket_data2; 551 cmd::SetBucketData set_bucket_data2;
519 cmd::SetToken set_token2; 552 cmd::SetToken set_token2;
520 cmd::SetBucketData set_bucket_data3; 553 cmd::SetBucketData set_bucket_data3;
521 cmd::SetToken set_token3; 554 cmd::SetToken set_token3;
522 ShaderSourceBucket shader_source_bucket; 555 ShaderSourceBucket shader_source_bucket;
523 cmd::SetBucketSize clear_bucket_size; 556 cmd::SetBucketSize clear_bucket_size;
524 }; 557 };
525 Cmds expected; 558 Cmds expected;
526 expected.set_bucket_size.Init(kBucketId, kSourceSize); 559 expected.set_bucket_size.Init(kBucketId, kSourceSize);
527 expected.set_bucket_data1.Init( 560 expected.set_bucket_data1.Init(
528 kBucketId, 0, kString1Size, kTransferBufferId, 561 kBucketId, 0, kString1Size, transfer_buffer_id_,
529 AllocateTransferBuffer(kPaddedString1Size)); 562 AllocateTransferBuffer(kPaddedString1Size));
530 expected.set_token1.Init(GetNextToken()); 563 expected.set_token1.Init(GetNextToken());
531 expected.set_bucket_data2.Init( 564 expected.set_bucket_data2.Init(
532 kBucketId, kString1Size, kString2Size, kTransferBufferId, 565 kBucketId, kString1Size, kString2Size, transfer_buffer_id_,
533 AllocateTransferBuffer(kPaddedString2Size)); 566 AllocateTransferBuffer(kPaddedString2Size));
534 expected.set_token2.Init(GetNextToken()); 567 expected.set_token2.Init(GetNextToken());
535 expected.set_bucket_data3.Init( 568 expected.set_bucket_data3.Init(
536 kBucketId, kString1Size + kString2Size, 569 kBucketId, kString1Size + kString2Size,
537 kString3Size, kTransferBufferId, 570 kString3Size, transfer_buffer_id_,
538 AllocateTransferBuffer(kPaddedString3Size)); 571 AllocateTransferBuffer(kPaddedString3Size));
539 expected.set_token3.Init(GetNextToken()); 572 expected.set_token3.Init(GetNextToken());
540 expected.shader_source_bucket.Init(kShaderId, kBucketId); 573 expected.shader_source_bucket.Init(kShaderId, kBucketId);
541 expected.clear_bucket_size.Init(kBucketId, 0); 574 expected.clear_bucket_size.Init(kBucketId, 0);
542 const char* strings[] = { 575 const char* strings[] = {
543 kString1, 576 kString1,
544 kString2, 577 kString2,
545 }; 578 };
546 gl_->ShaderSource(kShaderId, 2, strings, NULL); 579 gl_->ShaderSource(kShaderId, 2, strings, NULL);
547 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); 580 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
548 } 581 }
549 582
550 TEST_F(GLES2ImplementationTest, GetShaderSource) { 583 TEST_F(GLES2ImplementationTest, GetShaderSource) {
551 const uint32 kBucketId = 1; // This id is hardcoded into GLES2Implemenation 584 const uint32 kBucketId = 1; // This id is hardcoded into GLES2Implemenation
552 const GLuint kShaderId = 456; 585 const GLuint kShaderId = 456;
553 const Str7 kString = {"foobar"}; 586 const Str7 kString = {"foobar"};
554 const char kBad = 0x12; 587 const char kBad = 0x12;
555 struct Cmds { 588 struct Cmds {
556 cmd::SetBucketSize set_bucket_size1; 589 cmd::SetBucketSize set_bucket_size1;
557 GetShaderSource get_shader_source; 590 GetShaderSource get_shader_source;
558 cmd::GetBucketSize get_bucket_size; 591 cmd::GetBucketSize get_bucket_size;
559 cmd::GetBucketData get_bucket_data; 592 cmd::GetBucketData get_bucket_data;
560 cmd::SetToken set_token1; 593 cmd::SetToken set_token1;
561 cmd::SetBucketSize set_bucket_size2; 594 cmd::SetBucketSize set_bucket_size2;
562 }; 595 };
563 uint32 offset = AllocateTransferBuffer(sizeof(kString)); 596 uint32 offset = AllocateTransferBuffer(sizeof(kString));
564 Cmds expected; 597 Cmds expected;
565 expected.set_bucket_size1.Init(kBucketId, 0); 598 expected.set_bucket_size1.Init(kBucketId, 0);
566 expected.get_shader_source.Init(kShaderId, kBucketId); 599 expected.get_shader_source.Init(kShaderId, kBucketId);
567 expected.get_bucket_size.Init(kBucketId, kTransferBufferId, 0); 600 expected.get_bucket_size.Init(kBucketId, transfer_buffer_id_, 0);
568 expected.get_bucket_data.Init( 601 expected.get_bucket_data.Init(
569 kBucketId, 0, sizeof(kString), kTransferBufferId, offset); 602 kBucketId, 0, sizeof(kString), transfer_buffer_id_, offset);
570 expected.set_token1.Init(GetNextToken()); 603 expected.set_token1.Init(GetNextToken());
571 expected.set_bucket_size2.Init(kBucketId, 0); 604 expected.set_bucket_size2.Init(kBucketId, 0);
572 char buf[sizeof(kString) + 1]; 605 char buf[sizeof(kString) + 1];
573 memset(buf, kBad, sizeof(buf)); 606 memset(buf, kBad, sizeof(buf));
574 607
575 EXPECT_CALL(*command_buffer_, OnFlush(_)) 608 EXPECT_CALL(*command_buffer_, OnFlush(_))
576 .WillOnce(SetMemory(uint32(sizeof(kString)))) 609 .WillOnce(SetMemory(uint32(sizeof(kString))))
577 .WillOnce(SetMemoryAtOffset(offset, kString)) 610 .WillOnce(SetMemoryAtOffset(offset, kString))
578 .RetiresOnSaturation(); 611 .RetiresOnSaturation();
579 612
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 const GLsizei kEmuOffset1 = 0; 654 const GLsizei kEmuOffset1 = 0;
622 const GLsizei kEmuOffset2 = kSize1; 655 const GLsizei kEmuOffset2 = kSize1;
623 656
624 const GLsizei kTotalSize = kSize1 + kSize2; 657 const GLsizei kTotalSize = kSize1 + kSize2;
625 Cmds expected; 658 Cmds expected;
626 expected.enable1.Init(kAttribIndex1); 659 expected.enable1.Init(kAttribIndex1);
627 expected.enable2.Init(kAttribIndex2); 660 expected.enable2.Init(kAttribIndex2);
628 expected.bind_to_emu.Init(GL_ARRAY_BUFFER, kEmuBufferId); 661 expected.bind_to_emu.Init(GL_ARRAY_BUFFER, kEmuBufferId);
629 expected.set_size.Init(GL_ARRAY_BUFFER, kTotalSize, 0, 0, GL_DYNAMIC_DRAW); 662 expected.set_size.Init(GL_ARRAY_BUFFER, kTotalSize, 0, 0, GL_DYNAMIC_DRAW);
630 expected.copy_data1.Init( 663 expected.copy_data1.Init(
631 GL_ARRAY_BUFFER, kEmuOffset1, kSize1, kTransferBufferId, 664 GL_ARRAY_BUFFER, kEmuOffset1, kSize1, transfer_buffer_id_,
632 AllocateTransferBuffer(kSize1)); 665 AllocateTransferBuffer(kSize1));
633 expected.set_token1.Init(GetNextToken()); 666 expected.set_token1.Init(GetNextToken());
634 expected.set_pointer1.Init(kAttribIndex1, kNumComponents1, 667 expected.set_pointer1.Init(kAttribIndex1, kNumComponents1,
635 GL_FLOAT, GL_FALSE, 0, kEmuOffset1); 668 GL_FLOAT, GL_FALSE, 0, kEmuOffset1);
636 expected.copy_data2.Init( 669 expected.copy_data2.Init(
637 GL_ARRAY_BUFFER, kEmuOffset2, kSize2, kTransferBufferId, 670 GL_ARRAY_BUFFER, kEmuOffset2, kSize2, transfer_buffer_id_,
638 AllocateTransferBuffer(kSize2)); 671 AllocateTransferBuffer(kSize2));
639 expected.set_token2.Init(GetNextToken()); 672 expected.set_token2.Init(GetNextToken());
640 expected.set_pointer2.Init(kAttribIndex2, kNumComponents2, 673 expected.set_pointer2.Init(kAttribIndex2, kNumComponents2,
641 GL_FLOAT, GL_FALSE, 0, kEmuOffset2); 674 GL_FLOAT, GL_FALSE, 0, kEmuOffset2);
642 expected.draw.Init(GL_POINTS, kFirst, kCount); 675 expected.draw.Init(GL_POINTS, kFirst, kCount);
643 expected.restore.Init(GL_ARRAY_BUFFER, 0); 676 expected.restore.Init(GL_ARRAY_BUFFER, 0);
644 gl_->EnableVertexAttribArray(kAttribIndex1); 677 gl_->EnableVertexAttribArray(kAttribIndex1);
645 gl_->EnableVertexAttribArray(kAttribIndex2); 678 gl_->EnableVertexAttribArray(kAttribIndex2);
646 gl_->VertexAttribPointer(kAttribIndex1, kNumComponents1, 679 gl_->VertexAttribPointer(kAttribIndex1, kNumComponents1,
647 GL_FLOAT, GL_FALSE, kClientStride, verts); 680 GL_FLOAT, GL_FALSE, kClientStride, verts);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
697 const GLsizei kEmuOffset2 = kSize1; 730 const GLsizei kEmuOffset2 = kSize1;
698 731
699 const GLsizei kTotalSize = kSize1 + kSize2; 732 const GLsizei kTotalSize = kSize1 + kSize2;
700 Cmds expected; 733 Cmds expected;
701 expected.enable1.Init(kAttribIndex1); 734 expected.enable1.Init(kAttribIndex1);
702 expected.enable2.Init(kAttribIndex2); 735 expected.enable2.Init(kAttribIndex2);
703 expected.bind_to_index_emu.Init(GL_ELEMENT_ARRAY_BUFFER, kEmuIndexBufferId); 736 expected.bind_to_index_emu.Init(GL_ELEMENT_ARRAY_BUFFER, kEmuIndexBufferId);
704 expected.set_index_size.Init( 737 expected.set_index_size.Init(
705 GL_ELEMENT_ARRAY_BUFFER, kIndexSize, 0, 0, GL_DYNAMIC_DRAW); 738 GL_ELEMENT_ARRAY_BUFFER, kIndexSize, 0, 0, GL_DYNAMIC_DRAW);
706 expected.copy_data0.Init( 739 expected.copy_data0.Init(
707 GL_ELEMENT_ARRAY_BUFFER, 0, kIndexSize, kTransferBufferId, 740 GL_ELEMENT_ARRAY_BUFFER, 0, kIndexSize, transfer_buffer_id_,
708 AllocateTransferBuffer(kIndexSize)); 741 AllocateTransferBuffer(kIndexSize));
709 expected.set_token0.Init(GetNextToken()); 742 expected.set_token0.Init(GetNextToken());
710 expected.bind_to_emu.Init(GL_ARRAY_BUFFER, kEmuBufferId); 743 expected.bind_to_emu.Init(GL_ARRAY_BUFFER, kEmuBufferId);
711 expected.set_size.Init(GL_ARRAY_BUFFER, kTotalSize, 0, 0, GL_DYNAMIC_DRAW); 744 expected.set_size.Init(GL_ARRAY_BUFFER, kTotalSize, 0, 0, GL_DYNAMIC_DRAW);
712 expected.copy_data1.Init( 745 expected.copy_data1.Init(
713 GL_ARRAY_BUFFER, kEmuOffset1, kSize1, kTransferBufferId, 746 GL_ARRAY_BUFFER, kEmuOffset1, kSize1, transfer_buffer_id_,
714 AllocateTransferBuffer(kSize1)); 747 AllocateTransferBuffer(kSize1));
715 expected.set_token1.Init(GetNextToken()); 748 expected.set_token1.Init(GetNextToken());
716 expected.set_pointer1.Init(kAttribIndex1, kNumComponents1, 749 expected.set_pointer1.Init(kAttribIndex1, kNumComponents1,
717 GL_FLOAT, GL_FALSE, 0, kEmuOffset1); 750 GL_FLOAT, GL_FALSE, 0, kEmuOffset1);
718 expected.copy_data2.Init( 751 expected.copy_data2.Init(
719 GL_ARRAY_BUFFER, kEmuOffset2, kSize2, kTransferBufferId, 752 GL_ARRAY_BUFFER, kEmuOffset2, kSize2, transfer_buffer_id_,
720 AllocateTransferBuffer(kSize2)); 753 AllocateTransferBuffer(kSize2));
721 expected.set_token2.Init(GetNextToken()); 754 expected.set_token2.Init(GetNextToken());
722 expected.set_pointer2.Init(kAttribIndex2, kNumComponents2, 755 expected.set_pointer2.Init(kAttribIndex2, kNumComponents2,
723 GL_FLOAT, GL_FALSE, 0, kEmuOffset2); 756 GL_FLOAT, GL_FALSE, 0, kEmuOffset2);
724 expected.draw.Init(GL_POINTS, kCount, GL_UNSIGNED_SHORT, 0); 757 expected.draw.Init(GL_POINTS, kCount, GL_UNSIGNED_SHORT, 0);
725 expected.restore.Init(GL_ARRAY_BUFFER, 0); 758 expected.restore.Init(GL_ARRAY_BUFFER, 0);
726 expected.restore_element.Init(GL_ELEMENT_ARRAY_BUFFER, 0); 759 expected.restore_element.Init(GL_ELEMENT_ARRAY_BUFFER, 0);
727 gl_->EnableVertexAttribArray(kAttribIndex1); 760 gl_->EnableVertexAttribArray(kAttribIndex1);
728 gl_->EnableVertexAttribArray(kAttribIndex2); 761 gl_->EnableVertexAttribArray(kAttribIndex2);
729 gl_->VertexAttribPointer(kAttribIndex1, kNumComponents1, 762 gl_->VertexAttribPointer(kAttribIndex1, kNumComponents1,
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
773 arraysize(verts) * kNumComponents2 * sizeof(verts[0][0]); 806 arraysize(verts) * kNumComponents2 * sizeof(verts[0][0]);
774 const GLsizei kEmuOffset1 = 0; 807 const GLsizei kEmuOffset1 = 0;
775 const GLsizei kEmuOffset2 = kSize1; 808 const GLsizei kEmuOffset2 = kSize1;
776 809
777 const GLsizei kTotalSize = kSize1 + kSize2; 810 const GLsizei kTotalSize = kSize1 + kSize2;
778 Cmds expected; 811 Cmds expected;
779 expected.enable1.Init(kAttribIndex1); 812 expected.enable1.Init(kAttribIndex1);
780 expected.enable2.Init(kAttribIndex2); 813 expected.enable2.Init(kAttribIndex2);
781 expected.bind_to_index.Init(GL_ELEMENT_ARRAY_BUFFER, kClientIndexBufferId); 814 expected.bind_to_index.Init(GL_ELEMENT_ARRAY_BUFFER, kClientIndexBufferId);
782 expected.get_max.Init(kClientIndexBufferId, kCount, GL_UNSIGNED_SHORT, 815 expected.get_max.Init(kClientIndexBufferId, kCount, GL_UNSIGNED_SHORT,
783 kIndexOffset, kTransferBufferId, 0); 816 kIndexOffset, transfer_buffer_id_, 0);
784 expected.bind_to_emu.Init(GL_ARRAY_BUFFER, kEmuBufferId); 817 expected.bind_to_emu.Init(GL_ARRAY_BUFFER, kEmuBufferId);
785 expected.set_size.Init(GL_ARRAY_BUFFER, kTotalSize, 0, 0, GL_DYNAMIC_DRAW); 818 expected.set_size.Init(GL_ARRAY_BUFFER, kTotalSize, 0, 0, GL_DYNAMIC_DRAW);
786 expected.copy_data1.Init( 819 expected.copy_data1.Init(
787 GL_ARRAY_BUFFER, kEmuOffset1, kSize1, kTransferBufferId, 820 GL_ARRAY_BUFFER, kEmuOffset1, kSize1, transfer_buffer_id_,
788 AllocateTransferBuffer(kSize1)); 821 AllocateTransferBuffer(kSize1));
789 expected.set_token1.Init(GetNextToken()); 822 expected.set_token1.Init(GetNextToken());
790 expected.set_pointer1.Init(kAttribIndex1, kNumComponents1, 823 expected.set_pointer1.Init(kAttribIndex1, kNumComponents1,
791 GL_FLOAT, GL_FALSE, 0, kEmuOffset1); 824 GL_FLOAT, GL_FALSE, 0, kEmuOffset1);
792 expected.copy_data2.Init( 825 expected.copy_data2.Init(
793 GL_ARRAY_BUFFER, kEmuOffset2, kSize2, kTransferBufferId, 826 GL_ARRAY_BUFFER, kEmuOffset2, kSize2, transfer_buffer_id_,
794 AllocateTransferBuffer(kSize2)); 827 AllocateTransferBuffer(kSize2));
795 expected.set_token2.Init(GetNextToken()); 828 expected.set_token2.Init(GetNextToken());
796 expected.set_pointer2.Init(kAttribIndex2, kNumComponents2, 829 expected.set_pointer2.Init(kAttribIndex2, kNumComponents2,
797 GL_FLOAT, GL_FALSE, 0, kEmuOffset2); 830 GL_FLOAT, GL_FALSE, 0, kEmuOffset2);
798 expected.draw.Init(GL_POINTS, kCount, GL_UNSIGNED_SHORT, kIndexOffset); 831 expected.draw.Init(GL_POINTS, kCount, GL_UNSIGNED_SHORT, kIndexOffset);
799 expected.restore.Init(GL_ARRAY_BUFFER, 0); 832 expected.restore.Init(GL_ARRAY_BUFFER, 0);
800 833
801 EXPECT_CALL(*command_buffer_, OnFlush(_)) 834 EXPECT_CALL(*command_buffer_, OnFlush(_))
802 .WillOnce(SetMemory(kMaxIndex)) 835 .WillOnce(SetMemory(kMaxIndex))
803 .RetiresOnSaturation(); 836 .RetiresOnSaturation();
(...skipping 26 matching lines...) Expand all
830 struct Cmds { 863 struct Cmds {
831 BindBuffer bind; 864 BindBuffer bind;
832 VertexAttribPointer set_pointer; 865 VertexAttribPointer set_pointer;
833 GetVertexAttribPointerv get_pointer; 866 GetVertexAttribPointerv get_pointer;
834 }; 867 };
835 Cmds expected; 868 Cmds expected;
836 expected.bind.Init(GL_ARRAY_BUFFER, kBufferId); 869 expected.bind.Init(GL_ARRAY_BUFFER, kBufferId);
837 expected.set_pointer.Init(kAttribIndex2, kNumComponents2, GL_FLOAT, GL_FALSE, 870 expected.set_pointer.Init(kAttribIndex2, kNumComponents2, GL_FLOAT, GL_FALSE,
838 kStride2, kOffset2); 871 kStride2, kOffset2);
839 expected.get_pointer.Init(kAttribIndex2, GL_VERTEX_ATTRIB_ARRAY_POINTER, 872 expected.get_pointer.Init(kAttribIndex2, GL_VERTEX_ATTRIB_ARRAY_POINTER,
840 kTransferBufferId, 0); 873 transfer_buffer_id_, 0);
841 874
842 // One call to flush to way for GetVertexAttribPointerv 875 // One call to flush to way for GetVertexAttribPointerv
843 EXPECT_CALL(*command_buffer_, OnFlush(_)) 876 EXPECT_CALL(*command_buffer_, OnFlush(_))
844 .WillOnce(SetMemory(SizedResultHelper<uint32>(kOffset2))) 877 .WillOnce(SetMemory(SizedResultHelper<uint32>(kOffset2)))
845 .RetiresOnSaturation(); 878 .RetiresOnSaturation();
846 879
847 // Set one client side buffer. 880 // Set one client side buffer.
848 gl_->VertexAttribPointer(kAttribIndex1, kNumComponents1, 881 gl_->VertexAttribPointer(kAttribIndex1, kNumComponents1,
849 GL_FLOAT, GL_FALSE, kStride1, verts); 882 GL_FLOAT, GL_FALSE, kStride1, verts);
850 // Set one VBO 883 // Set one VBO
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
887 GetVertexAttribiv get1; // for getting the buffer from attrib2 920 GetVertexAttribiv get1; // for getting the buffer from attrib2
888 GetVertexAttribfv get2; // for getting the value from attrib1 921 GetVertexAttribfv get2; // for getting the value from attrib1
889 }; 922 };
890 Cmds expected; 923 Cmds expected;
891 expected.enable.Init(kAttribIndex1); 924 expected.enable.Init(kAttribIndex1);
892 expected.bind.Init(GL_ARRAY_BUFFER, kBufferId); 925 expected.bind.Init(GL_ARRAY_BUFFER, kBufferId);
893 expected.set_pointer.Init(kAttribIndex2, kNumComponents2, GL_FLOAT, GL_FALSE, 926 expected.set_pointer.Init(kAttribIndex2, kNumComponents2, GL_FLOAT, GL_FALSE,
894 kStride2, kOffset2); 927 kStride2, kOffset2);
895 expected.get1.Init(kAttribIndex2, 928 expected.get1.Init(kAttribIndex2,
896 GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, 929 GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING,
897 kTransferBufferId, 0); 930 transfer_buffer_id_, 0);
898 expected.get2.Init(kAttribIndex1, 931 expected.get2.Init(kAttribIndex1,
899 GL_CURRENT_VERTEX_ATTRIB, 932 GL_CURRENT_VERTEX_ATTRIB,
900 kTransferBufferId, 0); 933 transfer_buffer_id_, 0);
901 934
902 FourFloats current_attrib(1.2f, 3.4f, 5.6f, 7.8f); 935 FourFloats current_attrib(1.2f, 3.4f, 5.6f, 7.8f);
903 936
904 // One call to flush to way for GetVertexAttribiv 937 // One call to flush to way for GetVertexAttribiv
905 EXPECT_CALL(*command_buffer_, OnFlush(_)) 938 EXPECT_CALL(*command_buffer_, OnFlush(_))
906 .WillOnce(SetMemory(SizedResultHelper<GLuint>(kBufferId))) 939 .WillOnce(SetMemory(SizedResultHelper<GLuint>(kBufferId)))
907 .WillOnce(SetMemory(SizedResultHelper<FourFloats>(current_attrib))) 940 .WillOnce(SetMemory(SizedResultHelper<FourFloats>(current_attrib)))
908 .RetiresOnSaturation(); 941 .RetiresOnSaturation();
909 942
910 gl_->EnableVertexAttribArray(kAttribIndex1); 943 gl_->EnableVertexAttribArray(kAttribIndex1);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
953 986
954 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); 987 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
955 } 988 }
956 989
957 TEST_F(GLES2ImplementationTest, ReservedIds) { 990 TEST_F(GLES2ImplementationTest, ReservedIds) {
958 // Only the get error command should be issued. 991 // Only the get error command should be issued.
959 struct Cmds { 992 struct Cmds {
960 GetError get; 993 GetError get;
961 }; 994 };
962 Cmds expected; 995 Cmds expected;
963 expected.get.Init(kTransferBufferId, 0); 996 expected.get.Init(transfer_buffer_id_, 0);
964 997
965 // One call to flush to wait for GetError 998 // One call to flush to wait for GetError
966 EXPECT_CALL(*command_buffer_, OnFlush(_)) 999 EXPECT_CALL(*command_buffer_, OnFlush(_))
967 .WillOnce(SetMemory(GLuint(GL_NO_ERROR))) 1000 .WillOnce(SetMemory(GLuint(GL_NO_ERROR)))
968 .RetiresOnSaturation(); 1001 .RetiresOnSaturation();
969 1002
970 gl_->BindBuffer( 1003 gl_->BindBuffer(
971 GL_ARRAY_BUFFER, 1004 GL_ARRAY_BUFFER,
972 GLES2Implementation::kClientSideArrayId); 1005 GLES2Implementation::kClientSideArrayId);
973 gl_->BindBuffer( 1006 gl_->BindBuffer(
(...skipping 17 matching lines...) Expand all
991 const GLint kWidth = 1024 const GLint kWidth =
992 (kTransferBufferSize - GLES2Implementation::kStartingOffset) / 1025 (kTransferBufferSize - GLES2Implementation::kStartingOffset) /
993 kBytesPerPixel; 1026 kBytesPerPixel;
994 const GLint kHeight = 2; 1027 const GLint kHeight = 2;
995 const GLenum kFormat = GL_RGBA; 1028 const GLenum kFormat = GL_RGBA;
996 const GLenum kType = GL_UNSIGNED_BYTE; 1029 const GLenum kType = GL_UNSIGNED_BYTE;
997 1030
998 Cmds expected; 1031 Cmds expected;
999 expected.read1.Init( 1032 expected.read1.Init(
1000 0, 0, kWidth, kHeight / 2, kFormat, kType, 1033 0, 0, kWidth, kHeight / 2, kFormat, kType,
1001 kTransferBufferId, 1034 transfer_buffer_id_,
1002 AllocateTransferBuffer(kWidth * kHeight / 2 * kBytesPerPixel), 1035 AllocateTransferBuffer(kWidth * kHeight / 2 * kBytesPerPixel),
1003 kTransferBufferId, 0); 1036 transfer_buffer_id_, 0);
1004 expected.set_token1.Init(GetNextToken()); 1037 expected.set_token1.Init(GetNextToken());
1005 expected.read2.Init( 1038 expected.read2.Init(
1006 0, kHeight / 2, kWidth, kHeight / 2, kFormat, kType, 1039 0, kHeight / 2, kWidth, kHeight / 2, kFormat, kType,
1007 kTransferBufferId, 1040 transfer_buffer_id_,
1008 AllocateTransferBuffer(kWidth * kHeight / 2 * kBytesPerPixel), 1041 AllocateTransferBuffer(kWidth * kHeight / 2 * kBytesPerPixel),
1009 kTransferBufferId, 0); 1042 transfer_buffer_id_, 0);
1010 expected.set_token2.Init(GetNextToken()); 1043 expected.set_token2.Init(GetNextToken());
1011 scoped_array<int8> buffer(new int8[kWidth * kHeight * kBytesPerPixel]); 1044 scoped_array<int8> buffer(new int8[kWidth * kHeight * kBytesPerPixel]);
1012 1045
1013 EXPECT_CALL(*command_buffer_, OnFlush(_)) 1046 EXPECT_CALL(*command_buffer_, OnFlush(_))
1014 .WillOnce(SetMemory(static_cast<uint32>(1))) 1047 .WillOnce(SetMemory(static_cast<uint32>(1)))
1015 .WillOnce(SetMemory(static_cast<uint32>(1))) 1048 .WillOnce(SetMemory(static_cast<uint32>(1)))
1016 .RetiresOnSaturation(); 1049 .RetiresOnSaturation();
1017 1050
1018 gl_->ReadPixels(0, 0, kWidth, kHeight, kFormat, kType, buffer.get()); 1051 gl_->ReadPixels(0, 0, kWidth, kHeight, kFormat, kType, buffer.get());
1019 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); 1052 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
1020 } 1053 }
1021 1054
1022 TEST_F(GLES2ImplementationTest, ReadPixelsBadFormatType) { 1055 TEST_F(GLES2ImplementationTest, ReadPixelsBadFormatType) {
1023 struct Cmds { 1056 struct Cmds {
1024 ReadPixels read; 1057 ReadPixels read;
1025 cmd::SetToken set_token; 1058 cmd::SetToken set_token;
1026 }; 1059 };
1027 const GLint kBytesPerPixel = 4; 1060 const GLint kBytesPerPixel = 4;
1028 const GLint kWidth = 2; 1061 const GLint kWidth = 2;
1029 const GLint kHeight = 2; 1062 const GLint kHeight = 2;
1030 const GLenum kFormat = 0; 1063 const GLenum kFormat = 0;
1031 const GLenum kType = 0; 1064 const GLenum kType = 0;
1032 1065
1033 Cmds expected; 1066 Cmds expected;
1034 expected.read.Init( 1067 expected.read.Init(
1035 0, 0, kWidth, kHeight / 2, kFormat, kType, 1068 0, 0, kWidth, kHeight / 2, kFormat, kType,
1036 kTransferBufferId, 1069 transfer_buffer_id_,
1037 AllocateTransferBuffer(kWidth * kHeight * kBytesPerPixel), 1070 AllocateTransferBuffer(kWidth * kHeight * kBytesPerPixel),
1038 kTransferBufferId, 0); 1071 transfer_buffer_id_, 0);
1039 expected.set_token.Init(GetNextToken()); 1072 expected.set_token.Init(GetNextToken());
1040 scoped_array<int8> buffer(new int8[kWidth * kHeight * kBytesPerPixel]); 1073 scoped_array<int8> buffer(new int8[kWidth * kHeight * kBytesPerPixel]);
1041 1074
1042 EXPECT_CALL(*command_buffer_, OnFlush(_)) 1075 EXPECT_CALL(*command_buffer_, OnFlush(_))
1043 .Times(1) 1076 .Times(1)
1044 .RetiresOnSaturation(); 1077 .RetiresOnSaturation();
1045 1078
1046 gl_->ReadPixels(0, 0, kWidth, kHeight, kFormat, kType, buffer.get()); 1079 gl_->ReadPixels(0, 0, kWidth, kHeight, kFormat, kType, buffer.get());
1047 } 1080 }
1048 1081
1049 TEST_F(GLES2ImplementationTest, FreeUnusedSharedMemory) { 1082 TEST_F(GLES2ImplementationTest, FreeUnusedSharedMemory) {
1050 struct Cmds { 1083 struct Cmds {
1051 BufferSubData buf; 1084 BufferSubData buf;
1052 cmd::SetToken set_token; 1085 cmd::SetToken set_token;
1053 }; 1086 };
1054 const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER; 1087 const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER;
1055 const GLintptr kOffset = 15; 1088 const GLintptr kOffset = 15;
1056 const GLsizeiptr kSize = 16; 1089 const GLsizeiptr kSize = 16;
1057 1090
1058 uint32 offset = 0; 1091 uint32 offset = 0;
1059 Cmds expected; 1092 Cmds expected;
1060 expected.buf.Init( 1093 expected.buf.Init(
1061 kTarget, kOffset, kSize, kTransferBufferId, offset); 1094 kTarget, kOffset, kSize, transfer_buffer_id_, offset);
1062 expected.set_token.Init(GetNextToken()); 1095 expected.set_token.Init(GetNextToken());
1063 1096
1064 void* mem = gl_->MapBufferSubDataCHROMIUM( 1097 void* mem = gl_->MapBufferSubDataCHROMIUM(
1065 kTarget, kOffset, kSize, GL_WRITE_ONLY); 1098 kTarget, kOffset, kSize, GL_WRITE_ONLY);
1066 ASSERT_TRUE(mem != NULL); 1099 ASSERT_TRUE(mem != NULL);
1067 gl_->UnmapBufferSubDataCHROMIUM(mem); 1100 gl_->UnmapBufferSubDataCHROMIUM(mem);
1068 EXPECT_CALL(*command_buffer_, DestroyTransferBuffer(_)) 1101 EXPECT_CALL(*command_buffer_, DestroyTransferBuffer(_))
1069 .Times(1) 1102 .Times(1)
1070 .RetiresOnSaturation(); 1103 .RetiresOnSaturation();
1071 gl_->FreeUnusedSharedMemory(); 1104 gl_->FreeUnusedSharedMemory();
1072 } 1105 }
1073 1106
1074 TEST_F(GLES2ImplementationTest, MapUnmapBufferSubDataCHROMIUM) { 1107 TEST_F(GLES2ImplementationTest, MapUnmapBufferSubDataCHROMIUM) {
1075 struct Cmds { 1108 struct Cmds {
1076 BufferSubData buf; 1109 BufferSubData buf;
1077 cmd::SetToken set_token; 1110 cmd::SetToken set_token;
1078 }; 1111 };
1079 const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER; 1112 const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER;
1080 const GLintptr kOffset = 15; 1113 const GLintptr kOffset = 15;
1081 const GLsizeiptr kSize = 16; 1114 const GLsizeiptr kSize = 16;
1082 1115
1083 uint32 offset = 0; 1116 uint32 offset = 0;
1084 Cmds expected; 1117 Cmds expected;
1085 expected.buf.Init( 1118 expected.buf.Init(
1086 kTarget, kOffset, kSize, kTransferBufferId, offset); 1119 kTarget, kOffset, kSize, GetNextFreeTransferBufferId(), offset);
1087 expected.set_token.Init(GetNextToken()); 1120 expected.set_token.Init(GetNextToken());
1088 1121
1089 void* mem = gl_->MapBufferSubDataCHROMIUM( 1122 void* mem = gl_->MapBufferSubDataCHROMIUM(
1090 kTarget, kOffset, kSize, GL_WRITE_ONLY); 1123 kTarget, kOffset, kSize, GL_WRITE_ONLY);
1091 ASSERT_TRUE(mem != NULL); 1124 ASSERT_TRUE(mem != NULL);
1092 gl_->UnmapBufferSubDataCHROMIUM(mem); 1125 gl_->UnmapBufferSubDataCHROMIUM(mem);
1093 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); 1126 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
1094 } 1127 }
1095 1128
1096 TEST_F(GLES2ImplementationTest, MapUnmapBufferSubDataCHROMIUMBadArgs) { 1129 TEST_F(GLES2ImplementationTest, MapUnmapBufferSubDataCHROMIUMBadArgs) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1131 const GLint kYOffset = 3; 1164 const GLint kYOffset = 3;
1132 const GLint kWidth = 4; 1165 const GLint kWidth = 4;
1133 const GLint kHeight = 5; 1166 const GLint kHeight = 5;
1134 const GLenum kFormat = GL_RGBA; 1167 const GLenum kFormat = GL_RGBA;
1135 const GLenum kType = GL_UNSIGNED_BYTE; 1168 const GLenum kType = GL_UNSIGNED_BYTE;
1136 1169
1137 uint32 offset = 0; 1170 uint32 offset = 0;
1138 Cmds expected; 1171 Cmds expected;
1139 expected.tex.Init( 1172 expected.tex.Init(
1140 GL_TEXTURE_2D, kLevel, kXOffset, kYOffset, kWidth, kHeight, kFormat, 1173 GL_TEXTURE_2D, kLevel, kXOffset, kYOffset, kWidth, kHeight, kFormat,
1141 kType, kTransferBufferId, offset, GL_FALSE); 1174 kType, GetNextFreeTransferBufferId(), offset, GL_FALSE);
1142 expected.set_token.Init(GetNextToken()); 1175 expected.set_token.Init(GetNextToken());
1143 1176
1144 void* mem = gl_->MapTexSubImage2DCHROMIUM( 1177 void* mem = gl_->MapTexSubImage2DCHROMIUM(
1145 GL_TEXTURE_2D, 1178 GL_TEXTURE_2D,
1146 kLevel, 1179 kLevel,
1147 kXOffset, 1180 kXOffset,
1148 kYOffset, 1181 kYOffset,
1149 kWidth, 1182 kWidth,
1150 kHeight, 1183 kHeight,
1151 kFormat, 1184 kFormat,
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
1266 GetMultipleIntegervCHROMIUM get_multiple; 1299 GetMultipleIntegervCHROMIUM get_multiple;
1267 cmd::SetToken set_token; 1300 cmd::SetToken set_token;
1268 }; 1301 };
1269 const GLsizei kNumPnames = arraysize(pnames); 1302 const GLsizei kNumPnames = arraysize(pnames);
1270 const GLsizeiptr kResultsSize = num_results * sizeof(results[0]); 1303 const GLsizeiptr kResultsSize = num_results * sizeof(results[0]);
1271 const uint32 kPnamesOffset = 1304 const uint32 kPnamesOffset =
1272 AllocateTransferBuffer(kNumPnames * sizeof(pnames[0])); 1305 AllocateTransferBuffer(kNumPnames * sizeof(pnames[0]));
1273 const uint32 kResultsOffset = AllocateTransferBuffer(kResultsSize); 1306 const uint32 kResultsOffset = AllocateTransferBuffer(kResultsSize);
1274 Cmds expected; 1307 Cmds expected;
1275 expected.get_multiple.Init( 1308 expected.get_multiple.Init(
1276 kTransferBufferId, kPnamesOffset, kNumPnames, 1309 transfer_buffer_id_, kPnamesOffset, kNumPnames,
1277 kTransferBufferId, kResultsOffset, kResultsSize); 1310 transfer_buffer_id_, kResultsOffset, kResultsSize);
1278 expected.set_token.Init(GetNextToken()); 1311 expected.set_token.Init(GetNextToken());
1279 1312
1280 const GLint kSentinel = 0x12345678; 1313 const GLint kSentinel = 0x12345678;
1281 memset(results, 0, sizeof(results)); 1314 memset(results, 0, sizeof(results));
1282 results[num_results] = kSentinel; 1315 results[num_results] = kSentinel;
1283 const GLint returned_results[] = { 1316 const GLint returned_results[] = {
1284 1, 0, 1, 0, 1, -1, 1317 1, 0, 1, 0, 1, -1,
1285 }; 1318 };
1286 // One call to flush to wait for results 1319 // One call to flush to wait for results
1287 EXPECT_CALL(*command_buffer_, OnFlush(_)) 1320 EXPECT_CALL(*command_buffer_, OnFlush(_))
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
1376 cmd::SetBucketSize set_bucket_size1; 1409 cmd::SetBucketSize set_bucket_size1;
1377 GetProgramInfoCHROMIUM get_program_info; 1410 GetProgramInfoCHROMIUM get_program_info;
1378 cmd::GetBucketSize get_bucket_size; 1411 cmd::GetBucketSize get_bucket_size;
1379 cmd::GetBucketData get_bucket_data; 1412 cmd::GetBucketData get_bucket_data;
1380 cmd::SetToken set_token1; 1413 cmd::SetToken set_token1;
1381 cmd::SetBucketSize set_bucket_size2; 1414 cmd::SetBucketSize set_bucket_size2;
1382 }; 1415 };
1383 Cmds expected; 1416 Cmds expected;
1384 expected.set_bucket_size1.Init(kBucketId, 0); 1417 expected.set_bucket_size1.Init(kBucketId, 0);
1385 expected.get_program_info.Init(kProgramId, kBucketId); 1418 expected.get_program_info.Init(kProgramId, kBucketId);
1386 expected.get_bucket_size.Init(kBucketId, kTransferBufferId, 0); 1419 expected.get_bucket_size.Init(kBucketId, transfer_buffer_id_, 0);
1387 expected.get_bucket_data.Init( 1420 expected.get_bucket_data.Init(
1388 kBucketId, 0, sizeof(kString), kTransferBufferId, offset); 1421 kBucketId, 0, sizeof(kString), transfer_buffer_id_, offset);
1389 expected.set_token1.Init(GetNextToken()); 1422 expected.set_token1.Init(GetNextToken());
1390 expected.set_bucket_size2.Init(kBucketId, 0); 1423 expected.set_bucket_size2.Init(kBucketId, 0);
1391 gl_->GetProgramInfoCHROMIUM(kProgramId, sizeof(buf), &size, &buf); 1424 gl_->GetProgramInfoCHROMIUM(kProgramId, sizeof(buf), &size, &buf);
1392 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); 1425 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
1393 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), gl_->GetError()); 1426 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), gl_->GetError());
1394 EXPECT_EQ(sizeof(kString), static_cast<size_t>(size)); 1427 EXPECT_EQ(sizeof(kString), static_cast<size_t>(size));
1395 EXPECT_STREQ(kString.str, buf); 1428 EXPECT_STREQ(kString.str, buf);
1396 EXPECT_EQ(buf[sizeof(kString)], kBad); 1429 EXPECT_EQ(buf[sizeof(kString)], kBad);
1397 } 1430 }
1398 1431
(...skipping 18 matching lines...) Expand all
1417 cmd::SetBucketSize set_bucket_size1; 1450 cmd::SetBucketSize set_bucket_size1;
1418 GetProgramInfoCHROMIUM get_program_info; 1451 GetProgramInfoCHROMIUM get_program_info;
1419 cmd::GetBucketSize get_bucket_size; 1452 cmd::GetBucketSize get_bucket_size;
1420 cmd::GetBucketData get_bucket_data; 1453 cmd::GetBucketData get_bucket_data;
1421 cmd::SetToken set_token1; 1454 cmd::SetToken set_token1;
1422 cmd::SetBucketSize set_bucket_size2; 1455 cmd::SetBucketSize set_bucket_size2;
1423 }; 1456 };
1424 Cmds expected; 1457 Cmds expected;
1425 expected.set_bucket_size1.Init(kBucketId, 0); 1458 expected.set_bucket_size1.Init(kBucketId, 0);
1426 expected.get_program_info.Init(kProgramId, kBucketId); 1459 expected.get_program_info.Init(kProgramId, kBucketId);
1427 expected.get_bucket_size.Init(kBucketId, kTransferBufferId, 0); 1460 expected.get_bucket_size.Init(kBucketId, transfer_buffer_id_, 0);
1428 expected.get_bucket_data.Init( 1461 expected.get_bucket_data.Init(
1429 kBucketId, 0, sizeof(kString), kTransferBufferId, offset); 1462 kBucketId, 0, sizeof(kString), transfer_buffer_id_, offset);
1430 expected.set_token1.Init(GetNextToken()); 1463 expected.set_token1.Init(GetNextToken());
1431 expected.set_bucket_size2.Init(kBucketId, 0); 1464 expected.set_bucket_size2.Init(kBucketId, 0);
1432 gl_->GetProgramInfoCHROMIUM(kProgramId, 6, &size, &buf); 1465 gl_->GetProgramInfoCHROMIUM(kProgramId, 6, &size, &buf);
1433 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); 1466 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
1434 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), gl_->GetError()); 1467 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), gl_->GetError());
1435 ClearCommands(); 1468 ClearCommands();
1436 1469
1437 // try bad bufsize 1470 // try bad bufsize
1438 gl_->GetProgramInfoCHROMIUM(kProgramId, -1, &size, &buf); 1471 gl_->GetProgramInfoCHROMIUM(kProgramId, -1, &size, &buf);
1439 EXPECT_TRUE(NoCommandsWritten()); 1472 EXPECT_TRUE(NoCommandsWritten());
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
1595 static uint8 pixels[] = { 1628 static uint8 pixels[] = {
1596 11, 12, 13, 13, 14, 15, 15, 16, 17, 101, 102, 103, 1629 11, 12, 13, 13, 14, 15, 15, 16, 17, 101, 102, 103,
1597 21, 22, 23, 23, 24, 25, 25, 26, 27, 201, 202, 203, 1630 21, 22, 23, 23, 24, 25, 25, 26, 27, 201, 202, 203,
1598 31, 32, 33, 33, 34, 35, 35, 36, 37, 123, 124, 125, 1631 31, 32, 33, 33, 34, 35, 35, 36, 37, 123, 124, 125,
1599 41, 42, 43, 43, 44, 45, 45, 46, 47, 1632 41, 42, 43, 43, 44, 45, 45, 46, 47,
1600 }; 1633 };
1601 uint32 offset = AllocateTransferBuffer(sizeof(pixels)); 1634 uint32 offset = AllocateTransferBuffer(sizeof(pixels));
1602 Cmds expected; 1635 Cmds expected;
1603 expected.tex_image_2d.Init( 1636 expected.tex_image_2d.Init(
1604 kTarget, kLevel, kFormat, kWidth, kHeight, kBorder, kFormat, kType, 1637 kTarget, kLevel, kFormat, kWidth, kHeight, kBorder, kFormat, kType,
1605 kTransferBufferId, offset); 1638 transfer_buffer_id_, offset);
1606 expected.set_token.Init(GetNextToken()); 1639 expected.set_token.Init(GetNextToken());
1607 gl_->TexImage2D( 1640 gl_->TexImage2D(
1608 kTarget, kLevel, kFormat, kWidth, kHeight, kBorder, kFormat, kType, 1641 kTarget, kLevel, kFormat, kWidth, kHeight, kBorder, kFormat, kType,
1609 pixels); 1642 pixels);
1610 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); 1643 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
1611 EXPECT_TRUE(CheckRect( 1644 EXPECT_TRUE(CheckRect(
1612 kWidth, kHeight, kFormat, kType, kPixelStoreUnpackAlignment, false, 1645 kWidth, kHeight, kFormat, kType, kPixelStoreUnpackAlignment, false,
1613 pixels, GetTransferAddressFromOffsetAs<uint8>(offset, sizeof(pixels)))); 1646 pixels, GetTransferAddressFromOffsetAs<uint8>(offset, sizeof(pixels))));
1614 1647
1615 ClearCommands(); 1648 ClearCommands();
1616 uint32 offset2 = AllocateTransferBuffer(sizeof(pixels)); 1649 uint32 offset2 = AllocateTransferBuffer(sizeof(pixels));
1617 Cmds2 expected2; 1650 Cmds2 expected2;
1618 expected2.tex_image_2d.Init( 1651 expected2.tex_image_2d.Init(
1619 kTarget, kLevel, kFormat, kWidth, kHeight, kBorder, kFormat, kType, 1652 kTarget, kLevel, kFormat, kWidth, kHeight, kBorder, kFormat, kType,
1620 kTransferBufferId, offset2); 1653 transfer_buffer_id_, offset2);
1621 expected2.set_token.Init(GetNextToken()); 1654 expected2.set_token.Init(GetNextToken());
1622 const void* commands2 = GetPut(); 1655 const void* commands2 = GetPut();
1623 gl_->PixelStorei(GL_UNPACK_FLIP_Y_CHROMIUM, GL_TRUE); 1656 gl_->PixelStorei(GL_UNPACK_FLIP_Y_CHROMIUM, GL_TRUE);
1624 gl_->TexImage2D( 1657 gl_->TexImage2D(
1625 kTarget, kLevel, kFormat, kWidth, kHeight, kBorder, kFormat, kType, 1658 kTarget, kLevel, kFormat, kWidth, kHeight, kBorder, kFormat, kType,
1626 pixels); 1659 pixels);
1627 EXPECT_EQ(0, memcmp(&expected2, commands2, sizeof(expected2))); 1660 EXPECT_EQ(0, memcmp(&expected2, commands2, sizeof(expected2)));
1628 EXPECT_TRUE(CheckRect( 1661 EXPECT_TRUE(CheckRect(
1629 kWidth, kHeight, kFormat, kType, kPixelStoreUnpackAlignment, true, 1662 kWidth, kHeight, kFormat, kType, kPixelStoreUnpackAlignment, true,
1630 pixels, GetTransferAddressFromOffsetAs<uint8>(offset2, sizeof(pixels)))); 1663 pixels, GetTransferAddressFromOffsetAs<uint8>(offset2, sizeof(pixels))));
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1667 pixels[ii] = static_cast<uint8>(ii); 1700 pixels[ii] = static_cast<uint8>(ii);
1668 } 1701 }
1669 uint32 offset1 = AllocateTransferBuffer(half_size); 1702 uint32 offset1 = AllocateTransferBuffer(half_size);
1670 uint32 offset2 = AllocateTransferBuffer(half_size); 1703 uint32 offset2 = AllocateTransferBuffer(half_size);
1671 Cmds expected; 1704 Cmds expected;
1672 expected.tex_image_2d.Init( 1705 expected.tex_image_2d.Init(
1673 kTarget, kLevel, kFormat, kWidth, kHeight, kBorder, kFormat, kType, 1706 kTarget, kLevel, kFormat, kWidth, kHeight, kBorder, kFormat, kType,
1674 0, 0); 1707 0, 0);
1675 expected.tex_sub_image_2d1.Init( 1708 expected.tex_sub_image_2d1.Init(
1676 kTarget, kLevel, 0, 0, kWidth, kHeight / 2, kFormat, kType, 1709 kTarget, kLevel, 0, 0, kWidth, kHeight / 2, kFormat, kType,
1677 kTransferBufferId, offset1, true); 1710 transfer_buffer_id_, offset1, true);
1678 expected.set_token1.Init(GetNextToken()); 1711 expected.set_token1.Init(GetNextToken());
1679 expected.tex_sub_image_2d2.Init( 1712 expected.tex_sub_image_2d2.Init(
1680 kTarget, kLevel, 0, kHeight / 2, kWidth, kHeight / 2, kFormat, kType, 1713 kTarget, kLevel, 0, kHeight / 2, kWidth, kHeight / 2, kFormat, kType,
1681 kTransferBufferId, offset2, true); 1714 transfer_buffer_id_, offset2, true);
1682 expected.set_token2.Init(GetNextToken()); 1715 expected.set_token2.Init(GetNextToken());
1683 1716
1684 // TODO(gman): Make it possible to run this test 1717 // TODO(gman): Make it possible to run this test
1685 // EXPECT_CALL(*command_buffer_, OnFlush(_)) 1718 // EXPECT_CALL(*command_buffer_, OnFlush(_))
1686 // .WillOnce(CheckRectAction( 1719 // .WillOnce(CheckRectAction(
1687 // kWidth, kHeight / 2, kFormat, kType, kPixelStoreUnpackAlignment, 1720 // kWidth, kHeight / 2, kFormat, kType, kPixelStoreUnpackAlignment,
1688 // false, pixels.get(), 1721 // false, pixels.get(),
1689 // GetTransferAddressFromOffsetAs<uint8>(offset1, half_size))) 1722 // GetTransferAddressFromOffsetAs<uint8>(offset1, half_size)))
1690 // .RetiresOnSaturation(); 1723 // .RetiresOnSaturation();
1691 1724
1692 gl_->TexImage2D( 1725 gl_->TexImage2D(
1693 kTarget, kLevel, kFormat, kWidth, kHeight, kBorder, kFormat, kType, 1726 kTarget, kLevel, kFormat, kWidth, kHeight, kBorder, kFormat, kType,
1694 pixels.get()); 1727 pixels.get());
1695 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); 1728 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
1696 EXPECT_TRUE(CheckRect( 1729 EXPECT_TRUE(CheckRect(
1697 kWidth, kHeight / 2, kFormat, kType, kPixelStoreUnpackAlignment, false, 1730 kWidth, kHeight / 2, kFormat, kType, kPixelStoreUnpackAlignment, false,
1698 pixels.get() + kHeight / 2 * padded_row_size, 1731 pixels.get() + kHeight / 2 * padded_row_size,
1699 GetTransferAddressFromOffsetAs<uint8>(offset2, half_size))); 1732 GetTransferAddressFromOffsetAs<uint8>(offset2, half_size)));
1700 1733
1701 ClearCommands(); 1734 ClearCommands();
1702 const void* commands2 = GetPut(); 1735 const void* commands2 = GetPut();
1703 uint32 offset3 = AllocateTransferBuffer(half_size); 1736 uint32 offset3 = AllocateTransferBuffer(half_size);
1704 uint32 offset4 = AllocateTransferBuffer(half_size); 1737 uint32 offset4 = AllocateTransferBuffer(half_size);
1705 expected.tex_image_2d.Init( 1738 expected.tex_image_2d.Init(
1706 kTarget, kLevel, kFormat, kWidth, kHeight, kBorder, kFormat, kType, 1739 kTarget, kLevel, kFormat, kWidth, kHeight, kBorder, kFormat, kType,
1707 0, 0); 1740 0, 0);
1708 expected.tex_sub_image_2d1.Init( 1741 expected.tex_sub_image_2d1.Init(
1709 kTarget, kLevel, 0, kHeight / 2, kWidth, kHeight / 2, kFormat, kType, 1742 kTarget, kLevel, 0, kHeight / 2, kWidth, kHeight / 2, kFormat, kType,
1710 kTransferBufferId, offset3, true); 1743 transfer_buffer_id_, offset3, true);
1711 expected.set_token1.Init(GetNextToken()); 1744 expected.set_token1.Init(GetNextToken());
1712 expected.tex_sub_image_2d2.Init( 1745 expected.tex_sub_image_2d2.Init(
1713 kTarget, kLevel, 0, 0, kWidth, kHeight / 2, kFormat, kType, 1746 kTarget, kLevel, 0, 0, kWidth, kHeight / 2, kFormat, kType,
1714 kTransferBufferId, offset4, true); 1747 transfer_buffer_id_, offset4, true);
1715 expected.set_token2.Init(GetNextToken()); 1748 expected.set_token2.Init(GetNextToken());
1716 1749
1717 // TODO(gman): Make it possible to run this test 1750 // TODO(gman): Make it possible to run this test
1718 // EXPECT_CALL(*command_buffer_, OnFlush(_)) 1751 // EXPECT_CALL(*command_buffer_, OnFlush(_))
1719 // .WillOnce(CheckRectAction( 1752 // .WillOnce(CheckRectAction(
1720 // kWidth, kHeight / 2, kFormat, kType, kPixelStoreUnpackAlignment, 1753 // kWidth, kHeight / 2, kFormat, kType, kPixelStoreUnpackAlignment,
1721 // true, pixels.get(), 1754 // true, pixels.get(),
1722 // GetTransferAddressFromOffsetAs<uint8>(offset3, half_size))) 1755 // GetTransferAddressFromOffsetAs<uint8>(offset3, half_size)))
1723 // .RetiresOnSaturation(); 1756 // .RetiresOnSaturation();
1724 1757
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1770 uint32 offset1 = AllocateTransferBuffer(part_size); 1803 uint32 offset1 = AllocateTransferBuffer(part_size);
1771 uint32 offset2 = AllocateTransferBuffer(part_size); 1804 uint32 offset2 = AllocateTransferBuffer(part_size);
1772 uint32 offset3 = AllocateTransferBuffer(part_size); 1805 uint32 offset3 = AllocateTransferBuffer(part_size);
1773 uint32 offset4 = AllocateTransferBuffer(part_size); 1806 uint32 offset4 = AllocateTransferBuffer(part_size);
1774 Cmds expected; 1807 Cmds expected;
1775 expected.tex_image_2d.Init( 1808 expected.tex_image_2d.Init(
1776 kTarget, kLevel, kFormat, kWidth, kHeight, kBorder, kFormat, kType, 1809 kTarget, kLevel, kFormat, kWidth, kHeight, kBorder, kFormat, kType,
1777 0, 0); 1810 0, 0);
1778 expected.tex_sub_image_2d1.Init( 1811 expected.tex_sub_image_2d1.Init(
1779 kTarget, kLevel, 0, 0, kWidth / 2, 1, kFormat, kType, 1812 kTarget, kLevel, 0, 0, kWidth / 2, 1, kFormat, kType,
1780 kTransferBufferId, offset1, true); 1813 transfer_buffer_id_, offset1, true);
1781 expected.set_token1.Init(GetNextToken()); 1814 expected.set_token1.Init(GetNextToken());
1782 expected.tex_sub_image_2d2.Init( 1815 expected.tex_sub_image_2d2.Init(
1783 kTarget, kLevel, kWidth / 2, 0, kWidth / 2, 1, kFormat, kType, 1816 kTarget, kLevel, kWidth / 2, 0, kWidth / 2, 1, kFormat, kType,
1784 kTransferBufferId, offset2, true); 1817 transfer_buffer_id_, offset2, true);
1785 expected.set_token2.Init(GetNextToken()); 1818 expected.set_token2.Init(GetNextToken());
1786 expected.tex_sub_image_2d3.Init( 1819 expected.tex_sub_image_2d3.Init(
1787 kTarget, kLevel, 0, 1, kWidth / 2, 1, kFormat, kType, 1820 kTarget, kLevel, 0, 1, kWidth / 2, 1, kFormat, kType,
1788 kTransferBufferId, offset3, true); 1821 transfer_buffer_id_, offset3, true);
1789 expected.set_token3.Init(GetNextToken()); 1822 expected.set_token3.Init(GetNextToken());
1790 expected.tex_sub_image_2d4.Init( 1823 expected.tex_sub_image_2d4.Init(
1791 kTarget, kLevel, kWidth / 2, 1, kWidth / 2, 1, kFormat, kType, 1824 kTarget, kLevel, kWidth / 2, 1, kWidth / 2, 1, kFormat, kType,
1792 kTransferBufferId, offset4, true); 1825 transfer_buffer_id_, offset4, true);
1793 expected.set_token4.Init(GetNextToken()); 1826 expected.set_token4.Init(GetNextToken());
1794 1827
1795 // TODO(gman): Make it possible to run this test 1828 // TODO(gman): Make it possible to run this test
1796 // EXPECT_CALL(*command_buffer_, OnFlush(_)) 1829 // EXPECT_CALL(*command_buffer_, OnFlush(_))
1797 // .WillOnce(CheckRectAction( 1830 // .WillOnce(CheckRectAction(
1798 // kWidth / 2, 1, kFormat, kType, kPixelStoreUnpackAlignment, false, 1831 // kWidth / 2, 1, kFormat, kType, kPixelStoreUnpackAlignment, false,
1799 // pixels.get(), 1832 // pixels.get(),
1800 // GetTransferAddressFromOffsetAs<uint8>(offset1, part_size))) 1833 // GetTransferAddressFromOffsetAs<uint8>(offset1, part_size)))
1801 // .WillOnce(CheckRectAction( 1834 // .WillOnce(CheckRectAction(
1802 // kWidth / 2, 1, kFormat, kType, kPixelStoreUnpackAlignment, false, 1835 // kWidth / 2, 1, kFormat, kType, kPixelStoreUnpackAlignment, false,
(...skipping 18 matching lines...) Expand all
1821 const void* commands2 = GetPut(); 1854 const void* commands2 = GetPut();
1822 offset1 = AllocateTransferBuffer(part_size); 1855 offset1 = AllocateTransferBuffer(part_size);
1823 offset2 = AllocateTransferBuffer(part_size); 1856 offset2 = AllocateTransferBuffer(part_size);
1824 offset3 = AllocateTransferBuffer(part_size); 1857 offset3 = AllocateTransferBuffer(part_size);
1825 offset4 = AllocateTransferBuffer(part_size); 1858 offset4 = AllocateTransferBuffer(part_size);
1826 expected.tex_image_2d.Init( 1859 expected.tex_image_2d.Init(
1827 kTarget, kLevel, kFormat, kWidth, kHeight, kBorder, kFormat, kType, 1860 kTarget, kLevel, kFormat, kWidth, kHeight, kBorder, kFormat, kType,
1828 0, 0); 1861 0, 0);
1829 expected.tex_sub_image_2d1.Init( 1862 expected.tex_sub_image_2d1.Init(
1830 kTarget, kLevel, 0, 1, kWidth / 2, 1, kFormat, kType, 1863 kTarget, kLevel, 0, 1, kWidth / 2, 1, kFormat, kType,
1831 kTransferBufferId, offset1, true); 1864 transfer_buffer_id_, offset1, true);
1832 expected.set_token1.Init(GetNextToken()); 1865 expected.set_token1.Init(GetNextToken());
1833 expected.tex_sub_image_2d2.Init( 1866 expected.tex_sub_image_2d2.Init(
1834 kTarget, kLevel, kWidth / 2, 1, kWidth / 2, 1, kFormat, kType, 1867 kTarget, kLevel, kWidth / 2, 1, kWidth / 2, 1, kFormat, kType,
1835 kTransferBufferId, offset2, true); 1868 transfer_buffer_id_, offset2, true);
1836 expected.set_token2.Init(GetNextToken()); 1869 expected.set_token2.Init(GetNextToken());
1837 expected.tex_sub_image_2d3.Init( 1870 expected.tex_sub_image_2d3.Init(
1838 kTarget, kLevel, 0, 0, kWidth / 2, 1, kFormat, kType, 1871 kTarget, kLevel, 0, 0, kWidth / 2, 1, kFormat, kType,
1839 kTransferBufferId, offset3, true); 1872 transfer_buffer_id_, offset3, true);
1840 expected.set_token3.Init(GetNextToken()); 1873 expected.set_token3.Init(GetNextToken());
1841 expected.tex_sub_image_2d4.Init( 1874 expected.tex_sub_image_2d4.Init(
1842 kTarget, kLevel, kWidth / 2, 0, kWidth / 2, 1, kFormat, kType, 1875 kTarget, kLevel, kWidth / 2, 0, kWidth / 2, 1, kFormat, kType,
1843 kTransferBufferId, offset4, true); 1876 transfer_buffer_id_, offset4, true);
1844 expected.set_token4.Init(GetNextToken()); 1877 expected.set_token4.Init(GetNextToken());
1845 1878
1846 // TODO(gman): Make it possible to run this test 1879 // TODO(gman): Make it possible to run this test
1847 // EXPECT_CALL(*command_buffer_, OnFlush(_)) 1880 // EXPECT_CALL(*command_buffer_, OnFlush(_))
1848 // .WillOnce(CheckRectAction( 1881 // .WillOnce(CheckRectAction(
1849 // kWidth / 2, 1, kFormat, kType, kPixelStoreUnpackAlignment, false, 1882 // kWidth / 2, 1, kFormat, kType, kPixelStoreUnpackAlignment, false,
1850 // pixels.get(), 1883 // pixels.get(),
1851 // GetTransferAddressFromOffsetAs<uint8>(offset1, part_size))) 1884 // GetTransferAddressFromOffsetAs<uint8>(offset1, part_size)))
1852 // .WillOnce(CheckRectAction( 1885 // .WillOnce(CheckRectAction(
1853 // kWidth / 2, 1, kFormat, kType, kPixelStoreUnpackAlignment, false, 1886 // kWidth / 2, 1, kFormat, kType, kPixelStoreUnpackAlignment, false,
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1901 uint32 offset1 = AllocateTransferBuffer(sub_2_high_size); 1934 uint32 offset1 = AllocateTransferBuffer(sub_2_high_size);
1902 uint32 offset2 = AllocateTransferBuffer(sub_2_high_size); 1935 uint32 offset2 = AllocateTransferBuffer(sub_2_high_size);
1903 1936
1904 Cmds expected; 1937 Cmds expected;
1905 expected.pixel_store_i1.Init(GL_UNPACK_ALIGNMENT, kPixelStoreUnpackAlignment); 1938 expected.pixel_store_i1.Init(GL_UNPACK_ALIGNMENT, kPixelStoreUnpackAlignment);
1906 expected.tex_image_2d.Init( 1939 expected.tex_image_2d.Init(
1907 kTarget, kLevel, kFormat, kTextureWidth, kTextureHeight, kBorder, kFormat, 1940 kTarget, kLevel, kFormat, kTextureWidth, kTextureHeight, kBorder, kFormat,
1908 kType, 0, NULL); 1941 kType, 0, NULL);
1909 expected.tex_sub_image_2d1.Init(kTarget, kLevel, kSubImageXOffset, 1942 expected.tex_sub_image_2d1.Init(kTarget, kLevel, kSubImageXOffset,
1910 kSubImageYOffset + 2, kSubImageWidth, 2, kFormat, kType, 1943 kSubImageYOffset + 2, kSubImageWidth, 2, kFormat, kType,
1911 kTransferBufferId, offset1, false); 1944 transfer_buffer_id_, offset1, false);
1912 expected.set_token1.Init(GetNextToken()); 1945 expected.set_token1.Init(GetNextToken());
1913 expected.tex_sub_image_2d2.Init(kTarget, kLevel, kSubImageXOffset, 1946 expected.tex_sub_image_2d2.Init(kTarget, kLevel, kSubImageXOffset,
1914 kSubImageYOffset, kSubImageWidth , 2, kFormat, kType, kTransferBufferId, 1947 kSubImageYOffset, kSubImageWidth , 2, kFormat, kType, transfer_buffer_id_,
1915 offset2, false); 1948 offset2, false);
1916 expected.set_token2.Init(GetNextToken()); 1949 expected.set_token2.Init(GetNextToken());
1917 1950
1918 gl_->PixelStorei(GL_UNPACK_ALIGNMENT, kPixelStoreUnpackAlignment); 1951 gl_->PixelStorei(GL_UNPACK_ALIGNMENT, kPixelStoreUnpackAlignment);
1919 gl_->TexImage2D( 1952 gl_->TexImage2D(
1920 kTarget, kLevel, kFormat, kTextureWidth, kTextureHeight, kBorder, kFormat, 1953 kTarget, kLevel, kFormat, kTextureWidth, kTextureHeight, kBorder, kFormat,
1921 kType, NULL); 1954 kType, NULL);
1922 // this call should not emit commands (handled client-side) 1955 // this call should not emit commands (handled client-side)
1923 gl_->PixelStorei(GL_UNPACK_FLIP_Y_CHROMIUM, GL_TRUE); 1956 gl_->PixelStorei(GL_UNPACK_FLIP_Y_CHROMIUM, GL_TRUE);
1924 scoped_array<uint32> pixels(new uint32[kSubImageWidth * kSubImageHeight]); 1957 scoped_array<uint32> pixels(new uint32[kSubImageWidth * kSubImageHeight]);
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
2013 TEST_F(GLES2ImplementationTest, CreateStreamTextureCHROMIUM) { 2046 TEST_F(GLES2ImplementationTest, CreateStreamTextureCHROMIUM) {
2014 const GLuint kTextureId = 123; 2047 const GLuint kTextureId = 123;
2015 const GLuint kResult = 456; 2048 const GLuint kResult = 456;
2016 const uint32 kResultOffset = 0; 2049 const uint32 kResultOffset = 0;
2017 2050
2018 struct Cmds { 2051 struct Cmds {
2019 CreateStreamTextureCHROMIUM create_stream; 2052 CreateStreamTextureCHROMIUM create_stream;
2020 }; 2053 };
2021 2054
2022 Cmds expected; 2055 Cmds expected;
2023 expected.create_stream.Init(kTextureId, kTransferBufferId, kResultOffset); 2056 expected.create_stream.Init(kTextureId, transfer_buffer_id_, kResultOffset);
2024 2057
2025 EXPECT_CALL(*command_buffer_, OnFlush(_)) 2058 EXPECT_CALL(*command_buffer_, OnFlush(_))
2026 .WillOnce(SetMemoryAtOffset(kResultOffset, kResult)) 2059 .WillOnce(SetMemoryAtOffset(kResultOffset, kResult))
2027 .WillOnce(SetMemory(GLuint(GL_NO_ERROR))) 2060 .WillOnce(SetMemory(GLuint(GL_NO_ERROR)))
2028 .RetiresOnSaturation(); 2061 .RetiresOnSaturation();
2029 2062
2030 GLuint handle = gl_->CreateStreamTextureCHROMIUM(kTextureId); 2063 GLuint handle = gl_->CreateStreamTextureCHROMIUM(kTextureId);
2031 EXPECT_EQ(handle, kResult); 2064 EXPECT_EQ(handle, kResult);
2032 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), gl_->GetError()); 2065 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), gl_->GetError());
2033 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); 2066 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
(...skipping 10 matching lines...) Expand all
2044 expected.destroy_stream.Init(kTextureHandle); 2077 expected.destroy_stream.Init(kTextureHandle);
2045 2078
2046 gl_->DestroyStreamTextureCHROMIUM(kTextureHandle); 2079 gl_->DestroyStreamTextureCHROMIUM(kTextureHandle);
2047 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); 2080 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
2048 } 2081 }
2049 2082
2050 } // namespace gles2 2083 } // namespace gles2
2051 } // namespace gpu 2084 } // namespace gpu
2052 2085
2053 2086
OLDNEW
« no previous file with comments | « gpu/command_buffer/client/fenced_allocator_test.cc ('k') | gpu/command_buffer/client/mapped_memory_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698