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

Unified Diff: gpu/command_buffer/service/texture_manager.cc

Issue 11428140: gpu: Add async pixel transfer interface, stub and tests. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fix bots. Created 8 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 side-by-side diff with in-line comments
Download patch
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 7f6dadb6b7099ce7ce9bc6053fab7f6f246b75a9..02217a6400186a5a334f4ebbe24bd08c568e5eb2 100644
--- a/gpu/command_buffer/service/texture_manager.cc
+++ b/gpu/command_buffer/service/texture_manager.cc
@@ -1204,5 +1204,54 @@ 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);
greggman 2012/12/14 06:08:06 If this is going to be called often (like from DoC
epenner 2012/12/14 21:01:34 It doesn't need to happen in DoCommand IMO. Only o
+ 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();
+ it++) {
greggman 2012/12/14 06:08:06 always pre-increment stl iterators no? ++it me
epenner 2012/12/14 21:01:34 Done.
+ // 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/14 06:08:06 I don't think you can call erase in stl like this
epenner 2012/12/14 21:01:34 Sorry, last minute change from remove_if(). Done.
+ continue;
+ }
+ // If the transfer is finished, bind it to the texture,
+ // and update the TextureInfo.
+ if (!it->first->TransferIsInProgress()) {
+ // Set the dirty status.
+ *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/14 06:08:06 Same as above. Besides this would skip the element
epenner 2012/12/14 21:01:34 See above. Done.
+ continue;
+ }
+ }
+}
+
} // namespace gles2
} // namespace gpu

Powered by Google App Engine
This is Rietveld 408576698