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

Unified Diff: gpu/command_buffer/client/gles2_implementation.cc

Issue 16831004: Perform glReadPixels with PBOs in the gpu, if PBOs are available. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix cc_unittests Created 7 years, 6 months 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/client/gles2_implementation.cc
diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc
index fbc92d58939c8c39999c73c2d3a23393820a936c..57dd4e0cfd13dbd4a32f75a416e05cb07330ba23 100644
--- a/gpu/command_buffer/client/gles2_implementation.cc
+++ b/gpu/command_buffer/client/gles2_implementation.cc
@@ -2236,8 +2236,7 @@ void GLES2Implementation::ReadPixels(
if (buffer && buffer->shm_id() != -1) {
helper_->ReadPixels(xoffset, yoffset, width, height, format, type,
buffer->shm_id(), buffer->shm_offset(),
- 0, 0);
- buffer->set_transfer_ready_token(helper_->InsertToken());
+ 0, 0, true);
CheckGLError();
}
return;
@@ -2269,7 +2268,8 @@ void GLES2Implementation::ReadPixels(
helper_->ReadPixels(
xoffset, yoffset, width, num_rows, format, type,
buffer.shm_id(), buffer.offset(),
- GetResultShmId(), GetResultShmOffset());
+ GetResultShmId(), GetResultShmOffset(),
+ false);
WaitForCmd();
if (*result != 0) {
// when doing a y-flip we have to iterate through top-to-bottom chunks
@@ -3175,36 +3175,31 @@ void GLES2Implementation::DeleteQueriesEXTHelper(
return;
}
// When you delete a query you can't mark its memory as unused until it's
- // completed.
+ // either completed, or deleted in the gpu process.
// Note: If you don't do this you won't mess up the service but you will mess
// up yourself.
- // TODO(gman): Consider making this faster by putting pending quereies
- // on some queue to be removed when they are finished.
bool query_pending = false;
for (GLsizei ii = 0; ii < n; ++ii) {
QueryTracker::Query* query = query_tracker_->GetQuery(queries[ii]);
- if (query && query->Pending()) {
+ if (query && !query->CheckResultsAvailable(helper_)) {
query_pending = true;
break;
}
}
+ helper_->DeleteQueriesEXTImmediate(n, queries);
+
if (query_pending) {
+ // This should make sure that the GPU process have deleted the queries
+ // and given up any claim on the shared memory that goes along with
+ // those queries so that we can safely re-use the shared memory.
WaitForCmd();
}
for (GLsizei ii = 0; ii < n; ++ii) {
- QueryTracker::Query* query = query_tracker_->GetQuery(queries[ii]);
- if (query && query->Pending()) {
- if (!query->CheckResultsAvailable(helper_)) {
- // Should only get here on context lost.
- MustBeContextLost();
- }
- }
query_tracker_->RemoveQuery(queries[ii], helper_->IsContextLost());
}
- helper_->DeleteQueriesEXTImmediate(n, queries);
}
// TODO(gman): Remove this. Queries are not shared resources.
« no previous file with comments | « gpu/command_buffer/client/gles2_cmd_helper_autogen.h ('k') | gpu/command_buffer/client/gles2_implementation_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698