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

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

Issue 793693003: Tile Compression (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "gpu/command_buffer/service/async_pixel_transfer_manager_idle.h" 5 #include "gpu/command_buffer/service/async_pixel_transfer_manager_idle.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/debug/trace_event.h" 8 #include "base/debug/trace_event.h"
9 #include "base/debug/trace_event_synthetic_delay.h" 9 #include "base/debug/trace_event_synthetic_delay.h"
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
11 #include "base/memory/weak_ptr.h" 11 #include "base/memory/weak_ptr.h"
12 #include "base/synchronization/waitable_event.h"
12 #include "ui/gl/scoped_binders.h" 13 #include "ui/gl/scoped_binders.h"
13 14
14 namespace gpu { 15 namespace gpu {
15 16
16 namespace { 17 namespace {
17 18
18 static uint64 g_next_pixel_transfer_state_id = 1; 19 static uint64 g_next_pixel_transfer_state_id = 1;
19 20
21 static const uint64 kNotificationTask = 0;
22 static const uint64 kSuspendTask = 1;
23
24 uint64 NextPixelTransferStateId() {
25 g_next_pixel_transfer_state_id++;
26 switch (g_next_pixel_transfer_state_id) {
27 case kNotificationTask:
28 case kSuspendTask:
29 return NextPixelTransferStateId();
30 default:
31 return g_next_pixel_transfer_state_id;
32 }
33 }
34
20 void PerformNotifyCompletion( 35 void PerformNotifyCompletion(
21 AsyncMemoryParams mem_params, 36 AsyncMemoryParams mem_params,
22 scoped_refptr<AsyncPixelTransferCompletionObserver> observer) { 37 scoped_refptr<AsyncPixelTransferCompletionObserver> observer) {
23 TRACE_EVENT0("gpu", "PerformNotifyCompletion"); 38 TRACE_EVENT0("gpu", "PerformNotifyCompletion");
24 observer->DidComplete(mem_params); 39 observer->DidComplete(mem_params);
25 } 40 }
26 41
27 } // namespace 42 } // namespace
28 43
29 // Class which handles async pixel transfers in a platform 44 // Class which handles async pixel transfers in a platform
30 // independent way. 45 // independent way.
31 class AsyncPixelTransferDelegateIdle 46 class AsyncPixelTransferDelegateIdle
32 : public AsyncPixelTransferDelegate, 47 : public AsyncPixelTransferDelegate,
33 public base::SupportsWeakPtr<AsyncPixelTransferDelegateIdle> { 48 public base::SupportsWeakPtr<AsyncPixelTransferDelegateIdle> {
34 public: 49 public:
35 AsyncPixelTransferDelegateIdle( 50 AsyncPixelTransferDelegateIdle(
36 AsyncPixelTransferManagerIdle::SharedState* state, 51 AsyncPixelTransferManagerIdle::SharedState* state,
37 GLuint texture_id, 52 GLuint texture_id,
38 const AsyncTexImage2DParams& define_params); 53 const AsyncTexImage2DParams& define_params);
54 AsyncPixelTransferDelegateIdle(
55 AsyncPixelTransferManagerIdle::SharedState* state,
56 GLuint texture_id,
57 const AsyncCompressedTexImage2DParams& define_params);
39 ~AsyncPixelTransferDelegateIdle() override; 58 ~AsyncPixelTransferDelegateIdle() override;
40 59
41 // Implement AsyncPixelTransferDelegate: 60 // Implement AsyncPixelTransferDelegate:
42 void AsyncTexImage2D(const AsyncTexImage2DParams& tex_params, 61 void AsyncTexImage2D(const AsyncTexImage2DParams& tex_params,
43 const AsyncMemoryParams& mem_params, 62 const AsyncMemoryParams& mem_params,
44 const base::Closure& bind_callback) override; 63 const base::Closure& bind_callback) override;
45 void AsyncTexSubImage2D(const AsyncTexSubImage2DParams& tex_params, 64 void AsyncTexSubImage2D(const AsyncTexSubImage2DParams& tex_params,
46 const AsyncMemoryParams& mem_params) override; 65 const AsyncMemoryParams& mem_params) override;
66 void AsyncCompressedTexImage2D(
67 const AsyncCompressedTexImage2DParams& tex_params,
68 const AsyncMemoryParams& mem_params,
69 const base::Closure& bind_callback) override;
70 void AsyncCompressedTexSubImage2D(
71 const AsyncCompressedTexSubImage2DParams& tex_params,
72 const AsyncMemoryParams& mem_params) override;
47 bool TransferIsInProgress() override; 73 bool TransferIsInProgress() override;
48 void WaitForTransferCompletion() override; 74 void WaitForTransferCompletion() override;
49 75
50 private: 76 private:
51 void PerformAsyncTexImage2D(AsyncTexImage2DParams tex_params, 77 void PerformAsyncTexImage2D(AsyncTexImage2DParams tex_params,
52 AsyncMemoryParams mem_params, 78 AsyncMemoryParams mem_params,
53 const base::Closure& bind_callback); 79 const base::Closure& bind_callback);
54 void PerformAsyncTexSubImage2D(AsyncTexSubImage2DParams tex_params, 80 void PerformAsyncTexSubImage2D(AsyncTexSubImage2DParams tex_params,
55 AsyncMemoryParams mem_params); 81 AsyncMemoryParams mem_params);
82 void PerformAsyncCompressedTexImage2D(
83 AsyncCompressedTexImage2DParams tex_params,
84 AsyncMemoryParams mem_params,
85 const base::Closure& bind_callback);
86 void PerformAsyncCompressedTexSubImage2D(
87 AsyncCompressedTexSubImage2DParams tex_params,
88 AsyncMemoryParams mem_params);
56 89
57 uint64 id_; 90 uint64 id_;
58 GLuint texture_id_; 91 GLuint texture_id_;
59 bool transfer_in_progress_; 92 bool transfer_in_progress_;
60 AsyncTexImage2DParams define_params_; 93 union {
94 AsyncTexImage2DParams define_params_;
95 AsyncCompressedTexImage2DParams compressed_define_params_;
96 };
61 97
62 // Safe to hold a raw pointer because SharedState is owned by the Manager 98 // Safe to hold a raw pointer because SharedState is owned by the Manager
63 // which owns the Delegate. 99 // which owns the Delegate.
64 AsyncPixelTransferManagerIdle::SharedState* shared_state_; 100 AsyncPixelTransferManagerIdle::SharedState* shared_state_;
65 101
66 DISALLOW_COPY_AND_ASSIGN(AsyncPixelTransferDelegateIdle); 102 DISALLOW_COPY_AND_ASSIGN(AsyncPixelTransferDelegateIdle);
67 }; 103 };
68 104
69 AsyncPixelTransferDelegateIdle::AsyncPixelTransferDelegateIdle( 105 AsyncPixelTransferDelegateIdle::AsyncPixelTransferDelegateIdle(
70 AsyncPixelTransferManagerIdle::SharedState* shared_state, 106 AsyncPixelTransferManagerIdle::SharedState* shared_state,
71 GLuint texture_id, 107 GLuint texture_id,
72 const AsyncTexImage2DParams& define_params) 108 const AsyncTexImage2DParams& define_params)
73 : id_(g_next_pixel_transfer_state_id++), 109 : id_(NextPixelTransferStateId()),
74 texture_id_(texture_id), 110 texture_id_(texture_id),
75 transfer_in_progress_(false), 111 transfer_in_progress_(false),
76 define_params_(define_params), 112 define_params_(define_params),
77 shared_state_(shared_state) {} 113 shared_state_(shared_state) {}
78 114
115 AsyncPixelTransferDelegateIdle::AsyncPixelTransferDelegateIdle(
116 AsyncPixelTransferManagerIdle::SharedState* shared_state,
117 GLuint texture_id,
118 const AsyncCompressedTexImage2DParams& define_params)
119 : id_(NextPixelTransferStateId()),
120 texture_id_(texture_id),
121 transfer_in_progress_(false),
122 compressed_define_params_(define_params),
123 shared_state_(shared_state) {
124 }
125
79 AsyncPixelTransferDelegateIdle::~AsyncPixelTransferDelegateIdle() {} 126 AsyncPixelTransferDelegateIdle::~AsyncPixelTransferDelegateIdle() {}
80 127
81 void AsyncPixelTransferDelegateIdle::AsyncTexImage2D( 128 void AsyncPixelTransferDelegateIdle::AsyncTexImage2D(
82 const AsyncTexImage2DParams& tex_params, 129 const AsyncTexImage2DParams& tex_params,
83 const AsyncMemoryParams& mem_params, 130 const AsyncMemoryParams& mem_params,
84 const base::Closure& bind_callback) { 131 const base::Closure& bind_callback) {
85 TRACE_EVENT_SYNTHETIC_DELAY_BEGIN("gpu.AsyncTexImage"); 132 TRACE_EVENT_SYNTHETIC_DELAY_BEGIN("gpu.AsyncTexImage");
86 DCHECK_EQ(static_cast<GLenum>(GL_TEXTURE_2D), tex_params.target); 133 DCHECK_EQ(static_cast<GLenum>(GL_TEXTURE_2D), tex_params.target);
87 134
88 shared_state_->tasks.push_back(AsyncPixelTransferManagerIdle::Task( 135 shared_state_->tasks.push_back(AsyncPixelTransferManagerIdle::Task(
(...skipping 18 matching lines...) Expand all
107 id_, 154 id_,
108 this, 155 this,
109 base::Bind(&AsyncPixelTransferDelegateIdle::PerformAsyncTexSubImage2D, 156 base::Bind(&AsyncPixelTransferDelegateIdle::PerformAsyncTexSubImage2D,
110 AsWeakPtr(), 157 AsWeakPtr(),
111 tex_params, 158 tex_params,
112 mem_params))); 159 mem_params)));
113 160
114 transfer_in_progress_ = true; 161 transfer_in_progress_ = true;
115 } 162 }
116 163
164 void AsyncPixelTransferDelegateIdle::AsyncCompressedTexImage2D(
165 const AsyncCompressedTexImage2DParams& tex_params,
166 const AsyncMemoryParams& mem_params,
167 const base::Closure& bind_callback) {
168 TRACE_EVENT_SYNTHETIC_DELAY_BEGIN("gpu.AsyncTexImage");
169 DCHECK_EQ(static_cast<GLenum>(GL_TEXTURE_2D), tex_params.target);
170
171 shared_state_->tasks.push_back(AsyncPixelTransferManagerIdle::Task(
172 id_, this,
173 base::Bind(
174 &AsyncPixelTransferDelegateIdle::PerformAsyncCompressedTexImage2D,
175 AsWeakPtr(), tex_params, mem_params, bind_callback)));
176
177 transfer_in_progress_ = true;
178 }
179
180 void AsyncPixelTransferDelegateIdle::AsyncCompressedTexSubImage2D(
181 const AsyncCompressedTexSubImage2DParams& tex_params,
182 const AsyncMemoryParams& mem_params) {
183 TRACE_EVENT_SYNTHETIC_DELAY_BEGIN("gpu.AsyncTexImage");
184 DCHECK_EQ(static_cast<GLenum>(GL_TEXTURE_2D), tex_params.target);
185
186 shared_state_->tasks.push_back(AsyncPixelTransferManagerIdle::Task(
187 id_, this,
188 base::Bind(
189 &AsyncPixelTransferDelegateIdle::PerformAsyncCompressedTexSubImage2D,
190 AsWeakPtr(), tex_params, mem_params)));
191
192 transfer_in_progress_ = true;
193 }
194
117 bool AsyncPixelTransferDelegateIdle::TransferIsInProgress() { 195 bool AsyncPixelTransferDelegateIdle::TransferIsInProgress() {
118 return transfer_in_progress_; 196 return transfer_in_progress_;
119 } 197 }
120 198
121 void AsyncPixelTransferDelegateIdle::WaitForTransferCompletion() { 199 void AsyncPixelTransferDelegateIdle::WaitForTransferCompletion() {
122 for (std::list<AsyncPixelTransferManagerIdle::Task>::iterator iter = 200 for (std::list<AsyncPixelTransferManagerIdle::Task>::iterator iter =
123 shared_state_->tasks.begin(); 201 shared_state_->tasks.begin();
124 iter != shared_state_->tasks.end(); 202 iter != shared_state_->tasks.end();
125 ++iter) { 203 ++iter) {
126 if (iter->transfer_id != id_) 204 if (iter->transfer_id != id_)
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 data); 294 data);
217 } 295 }
218 296
219 TRACE_EVENT_SYNTHETIC_DELAY_END("gpu.AsyncTexImage"); 297 TRACE_EVENT_SYNTHETIC_DELAY_END("gpu.AsyncTexImage");
220 transfer_in_progress_ = false; 298 transfer_in_progress_ = false;
221 shared_state_->texture_upload_count++; 299 shared_state_->texture_upload_count++;
222 shared_state_->total_texture_upload_time += 300 shared_state_->total_texture_upload_time +=
223 base::TimeTicks::HighResNow() - begin_time; 301 base::TimeTicks::HighResNow() - begin_time;
224 } 302 }
225 303
304 void AsyncPixelTransferDelegateIdle::PerformAsyncCompressedTexImage2D(
305 AsyncCompressedTexImage2DParams tex_params,
306 AsyncMemoryParams mem_params,
307 const base::Closure& bind_callback) {
308 TRACE_EVENT2("gpu", "PerformAsyncCompressedTexImage2D", "width",
309 tex_params.width, "height", tex_params.height);
310
311 void* data = mem_params.GetDataAddress();
312
313 base::TimeTicks begin_time(base::TimeTicks::HighResNow());
314 gfx::ScopedTextureBinder texture_binder(tex_params.target, texture_id_);
315
316 {
317 TRACE_EVENT0("gpu", "glCompressedTexImage2D");
318 glCompressedTexImage2D(tex_params.target, tex_params.level,
319 tex_params.internal_format, tex_params.width,
320 tex_params.height, tex_params.border,
321 tex_params.image_size, data);
322 }
323
324 TRACE_EVENT_SYNTHETIC_DELAY_END("gpu.AsyncTexImage");
325 transfer_in_progress_ = false;
326 shared_state_->texture_upload_count++;
327 shared_state_->total_texture_upload_time +=
328 base::TimeTicks::HighResNow() - begin_time;
329
330 // The texture is already fully bound so just call it now.
331 bind_callback.Run();
332 }
333
334 void AsyncPixelTransferDelegateIdle::PerformAsyncCompressedTexSubImage2D(
335 AsyncCompressedTexSubImage2DParams tex_params,
336 AsyncMemoryParams mem_params) {
337 TRACE_EVENT2("gpu", "PerformAsyncCompressedTexSubImage2D", "width",
338 tex_params.width, "height", tex_params.height);
339
340 void* data = mem_params.GetDataAddress();
341
342 base::TimeTicks begin_time(base::TimeTicks::HighResNow());
343 gfx::ScopedTextureBinder texture_binder(tex_params.target, texture_id_);
344
345 // If it's a full texture update, use glCompressedTexImage2D as it's faster.
346 if (tex_params.xoffset == 0 && tex_params.yoffset == 0 &&
347 tex_params.target == compressed_define_params_.target &&
348 tex_params.level == compressed_define_params_.level &&
349 tex_params.width == compressed_define_params_.width &&
350 tex_params.height == compressed_define_params_.height) {
351 TRACE_EVENT0("gpu", "glCompressedTexImage2D");
352 glCompressedTexImage2D(
353 compressed_define_params_.target, compressed_define_params_.level,
354 compressed_define_params_.internal_format,
355 compressed_define_params_.width, compressed_define_params_.height,
356 compressed_define_params_.border, tex_params.image_size, data);
357 } else {
358 TRACE_EVENT0("gpu", "glCompressedTexSubImage2D");
359 glCompressedTexSubImage2D(tex_params.target, tex_params.level,
360 tex_params.xoffset, tex_params.yoffset,
361 tex_params.width, tex_params.height,
362 tex_params.format, tex_params.image_size, data);
363 }
364
365 TRACE_EVENT_SYNTHETIC_DELAY_END("gpu.AsyncTexImage");
366 transfer_in_progress_ = false;
367 shared_state_->texture_upload_count++;
368 shared_state_->total_texture_upload_time +=
369 base::TimeTicks::HighResNow() - begin_time;
370 }
371
226 AsyncPixelTransferManagerIdle::Task::Task( 372 AsyncPixelTransferManagerIdle::Task::Task(
227 uint64 transfer_id, 373 uint64 transfer_id,
228 AsyncPixelTransferDelegate* delegate, 374 AsyncPixelTransferDelegate* delegate,
229 const base::Closure& task) 375 const base::Closure& task)
230 : transfer_id(transfer_id), 376 : transfer_id(transfer_id),
231 delegate(delegate), 377 delegate(delegate),
232 task(task) { 378 task(task) {
233 } 379 }
234 380
235 AsyncPixelTransferManagerIdle::Task::~Task() {} 381 AsyncPixelTransferManagerIdle::Task::~Task() {}
236 382
237 AsyncPixelTransferManagerIdle::SharedState::SharedState() 383 AsyncPixelTransferManagerIdle::SharedState::SharedState()
238 : texture_upload_count(0) {} 384 : texture_upload_count(0) {}
239 385
240 AsyncPixelTransferManagerIdle::SharedState::~SharedState() {} 386 AsyncPixelTransferManagerIdle::SharedState::~SharedState() {}
241 387
242 void AsyncPixelTransferManagerIdle::SharedState::ProcessNotificationTasks() { 388 void AsyncPixelTransferManagerIdle::SharedState::ProcessNotificationTasks() {
243 while (!tasks.empty()) { 389 while (!tasks.empty()) {
244 // Stop when we reach a pixel transfer task. 390 // Stop when we reach a pixel transfer task.
245 if (tasks.front().transfer_id) 391 if (tasks.front().transfer_id > kSuspendTask)
246 return; 392 return;
247 393
248 tasks.front().task.Run(); 394 tasks.front().task.Run();
249 tasks.pop_front(); 395 tasks.pop_front();
250 } 396 }
251 } 397 }
252 398
253 AsyncPixelTransferManagerIdle::AsyncPixelTransferManagerIdle() 399 AsyncPixelTransferManagerIdle::AsyncPixelTransferManagerIdle()
254 : shared_state_() { 400 : shared_state_() {
255 } 401 }
256 402
257 AsyncPixelTransferManagerIdle::~AsyncPixelTransferManagerIdle() {} 403 AsyncPixelTransferManagerIdle::~AsyncPixelTransferManagerIdle() {}
258 404
259 void AsyncPixelTransferManagerIdle::BindCompletedAsyncTransfers() { 405 void AsyncPixelTransferManagerIdle::BindCompletedAsyncTransfers() {
260 // Everything is already bound. 406 // Everything is already bound.
261 } 407 }
262 408
263 void AsyncPixelTransferManagerIdle::AsyncNotifyCompletion( 409 void AsyncPixelTransferManagerIdle::AsyncNotifyCompletion(
264 const AsyncMemoryParams& mem_params, 410 const AsyncMemoryParams& mem_params,
265 AsyncPixelTransferCompletionObserver* observer) { 411 AsyncPixelTransferCompletionObserver* observer) {
266 if (shared_state_.tasks.empty()) { 412 if (shared_state_.tasks.empty()) {
267 observer->DidComplete(mem_params); 413 observer->DidComplete(mem_params);
268 return; 414 return;
269 } 415 }
270 416
271 shared_state_.tasks.push_back( 417 shared_state_.tasks.push_back(
272 Task(0, // 0 transfer_id for notification tasks. 418 Task(kNotificationTask,
273 NULL, 419 NULL,
274 base::Bind( 420 base::Bind(
275 &PerformNotifyCompletion, 421 &PerformNotifyCompletion,
276 mem_params, 422 mem_params,
277 make_scoped_refptr(observer)))); 423 make_scoped_refptr(observer))));
278 } 424 }
279 425
280 uint32 AsyncPixelTransferManagerIdle::GetTextureUploadCount() { 426 uint32 AsyncPixelTransferManagerIdle::GetTextureUploadCount() {
281 return shared_state_.texture_upload_count; 427 return shared_state_.texture_upload_count;
282 } 428 }
283 429
284 base::TimeDelta AsyncPixelTransferManagerIdle::GetTotalTextureUploadTime() { 430 base::TimeDelta AsyncPixelTransferManagerIdle::GetTotalTextureUploadTime() {
285 return shared_state_.total_texture_upload_time; 431 return shared_state_.total_texture_upload_time;
286 } 432 }
287 433
288 void AsyncPixelTransferManagerIdle::ProcessMorePendingTransfers() { 434 void AsyncPixelTransferManagerIdle::ProcessMorePendingTransfers() {
289 if (shared_state_.tasks.empty()) 435 if (shared_state_.tasks.empty())
290 return; 436 return;
291 437
292 // First task should always be a pixel transfer task. 438 // Suspend uploads until waitables have been signalled.
293 DCHECK(shared_state_.tasks.front().transfer_id); 439 while (!suspend_waitables_.empty()) {
440 if (!suspend_waitables_.front()->IsSignaled())
441 return;
442 else
443 suspend_waitables_.erase(suspend_waitables_.begin());
444 }
445
446 // First task should always be a pixel transfer task or a suspend task.
447 DCHECK_NE(shared_state_.tasks.front().transfer_id, kNotificationTask);
294 shared_state_.tasks.front().task.Run(); 448 shared_state_.tasks.front().task.Run();
295 shared_state_.tasks.pop_front(); 449 shared_state_.tasks.pop_front();
296 450
297 shared_state_.ProcessNotificationTasks(); 451 shared_state_.ProcessNotificationTasks();
298 } 452 }
299 453
300 bool AsyncPixelTransferManagerIdle::NeedsProcessMorePendingTransfers() { 454 bool AsyncPixelTransferManagerIdle::NeedsProcessMorePendingTransfers() {
301 return !shared_state_.tasks.empty(); 455 return !shared_state_.tasks.empty();
302 } 456 }
303 457
304 void AsyncPixelTransferManagerIdle::WaitAllAsyncTexImage2D() { 458 void AsyncPixelTransferManagerIdle::WaitAllAsyncTexImage2D() {
305 if (shared_state_.tasks.empty()) 459 if (shared_state_.tasks.empty())
306 return; 460 return;
307 461
308 const Task& task = shared_state_.tasks.back(); 462 const Task& task = shared_state_.tasks.back();
309 if (task.delegate) 463 if (task.delegate)
310 task.delegate->WaitForTransferCompletion(); 464 task.delegate->WaitForTransferCompletion();
311 } 465 }
312 466
467 void AsyncPixelTransferManagerIdle::DoSuspendUploads(
468 scoped_ptr<base::WaitableEvent> waitable) {
469 suspend_waitables_.push_back(waitable.release());
470 }
471
472 void AsyncPixelTransferManagerIdle::SuspendUploads(
473 base::WaitableEvent* waitable) {
474 shared_state_.tasks.push_back(
475 Task(kSuspendTask,
476 NULL,
477 base::Bind(&AsyncPixelTransferManagerIdle::DoSuspendUploads,
478 base::Unretained(this),
479 base::Passed(
480 scoped_ptr<base::WaitableEvent>(waitable)))));
481 }
482
483 void AsyncPixelTransferManagerIdle::SignalWhenUploadsCompleted(
484 base::WaitableEvent* waitable) {
485 shared_state_.tasks.push_back(
486 Task(kNotificationTask,
487 NULL,
488 base::Bind(&base::WaitableEvent::Signal,
489 // WaitableEvent owned by waiter.
490 base::Unretained(waitable))));
491 }
492
313 AsyncPixelTransferDelegate* 493 AsyncPixelTransferDelegate*
314 AsyncPixelTransferManagerIdle::CreatePixelTransferDelegateImpl( 494 AsyncPixelTransferManagerIdle::CreatePixelTransferDelegateImpl(
315 gles2::TextureRef* ref, 495 gles2::TextureRef* ref,
316 const AsyncTexImage2DParams& define_params) { 496 const AsyncTexImage2DParams& define_params) {
317 return new AsyncPixelTransferDelegateIdle(&shared_state_, 497 return new AsyncPixelTransferDelegateIdle(&shared_state_,
318 ref->service_id(), 498 ref->service_id(),
319 define_params); 499 define_params);
320 } 500 }
321 501
502 AsyncPixelTransferDelegate*
503 AsyncPixelTransferManagerIdle::CreatePixelTransferDelegateImpl(
504 gles2::TextureRef* ref,
505 const AsyncCompressedTexImage2DParams& define_params) {
506 return new AsyncPixelTransferDelegateIdle(&shared_state_, ref->service_id(),
507 define_params);
508 }
509
322 } // namespace gpu 510 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698