Chromium Code Reviews| Index: gpu/command_buffer/service/texture_manager.cc |
| diff --git a/gpu/command_buffer/service/texture_manager.cc b/gpu/command_buffer/service/texture_manager.cc |
| index 6dc4b84a9cee0e5e004e6ca07578037856fcc744..53ffe9fb7cb26807c6daac2394819a19a7ee1550 100644 |
| --- a/gpu/command_buffer/service/texture_manager.cc |
| +++ b/gpu/command_buffer/service/texture_manager.cc |
| @@ -1210,5 +1210,52 @@ void TextureManager::AddToSignature( |
| info->AddToSignature(feature_info_.get(), target, level, signature); |
| } |
| +void TextureManager::AddPendingAsyncPixelTransfer( |
| + base::WeakPtr<gfx::AsyncPixelTransferState> state, TextureInfo* info) { |
| + pending_async_transfers_.push_back(PendingAsyncTransfer(state,info)); |
| +} |
| + |
| +void TextureManager::BindFinishedAsyncPixelTransfers( |
| + bool* texture_dirty, bool* framebuffer_dirty) { |
| + DCHECK(texture_dirty); |
| + DCHECK(framebuffer_dirty); |
| + *texture_dirty = false; |
| + *framebuffer_dirty = false; |
| + |
| + // Remove finished transfers from the list, while |
| + // marking whether the texture unit or frame_buffer is dirty. |
| + for (PendingAsyncTransferList::iterator it = pending_async_transfers_.begin(); |
| + it != pending_async_transfers_.end(); ) { |
| + // The AsyncState is owned by the TextureInfo. So if the |
| + // async state is deleted, so is the TextureInfo. |
| + if (!it->first.get()) { |
| + pending_async_transfers_.erase(it++); |
|
greggman
2012/12/15 06:45:04
I still believe this needs to be
it = pending_
epenner
2012/12/17 06:29:18
I realized I could use front()/pop_front() in this
|
| + continue; |
| + } |
| + // Terminate early, as transfers finish in order. |
| + if (it->first->TransferIsInProgress()) |
| + break; |
| + // If the transfer is finished, bind it to the texture, |
| + // and update the TextureInfo. |
| + *texture_dirty = true; |
| + *framebuffer_dirty |= it->second->IsAttachedToFramebuffer(); |
| + gfx::AsyncTexImage2DParams tex_define_params; |
| + it->second->GetAsyncTransferState()->BindTransfer(&tex_define_params); |
| + SetLevelInfo( |
| + it->second, |
| + tex_define_params.target, |
| + tex_define_params.level, |
| + tex_define_params.internal_format, |
| + tex_define_params.width, |
| + tex_define_params.height, |
| + 1, // depth |
| + tex_define_params.border, |
| + tex_define_params.format, |
| + tex_define_params.type, |
| + true); // cleared |
| + pending_async_transfers_.erase(it++); |
|
greggman
2012/12/15 06:45:04
I still believe this needs to be
it = pending_
epenner
2012/12/17 06:29:18
Ditto
|
| + } |
| +} |
| + |
| } // namespace gles2 |
| } // namespace gpu |