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

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

Issue 9694025: Add support for GL_COMMANDS_ISSUED_CHROMIUM fence like query. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 9 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/service/gles2_cmd_decoder.cc
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 96440a022ffe9486057a2b4b56c283532762dfe9..c87e3ead9b7f7b72fda1fa09592ef6cdc3fcc8af 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -2022,7 +2022,7 @@ bool GLES2DecoderImpl::Initialize(
vertex_attrib_manager_.reset(new VertexAttribManager());
vertex_attrib_manager_->Initialize(group_->max_vertex_attribs());
- query_manager_.reset(new QueryManager());
+ query_manager_.reset(new QueryManager(this));
util_.set_num_compressed_texture_formats(
validators_->compressed_texture_format.GetValues().size());
@@ -3160,14 +3160,14 @@ bool GLES2DecoderImpl::CreateShaderHelper(GLenum type, GLuint client_id) {
void GLES2DecoderImpl::DoFinish() {
glFinish();
- if (!query_manager_->ProcessPendingQueries(this)) {
+ if (!query_manager_->ProcessPendingQueries()) {
current_decoder_error_ = error::kOutOfBounds;
}
}
void GLES2DecoderImpl::DoFlush() {
glFlush();
- if (!query_manager_->ProcessPendingQueries(this)) {
+ if (!query_manager_->ProcessPendingQueries()) {
current_decoder_error_ = error::kOutOfBounds;
}
}
@@ -5232,7 +5232,7 @@ error::Error GLES2DecoderImpl::DoDrawArrays(bool instanced,
} else {
glDrawArraysInstancedANGLE(mode, first, count, primcount);
}
- if (!query_manager_->ProcessPendingQueries(this)) {
+ if (!query_manager_->ProcessPendingQueries()) {
current_decoder_error_ = error::kOutOfBounds;
}
if (textures_set) {
@@ -5345,7 +5345,7 @@ error::Error GLES2DecoderImpl::DoDrawElements(bool instanced,
} else {
glDrawElementsInstancedANGLE(mode, count, type, indices, primcount);
}
- if (!query_manager_->ProcessPendingQueries(this)) {
+ if (!query_manager_->ProcessPendingQueries()) {
current_decoder_error_ = error::kOutOfBounds;
}
if (textures_set) {
@@ -7938,11 +7938,7 @@ bool GLES2DecoderImpl::GenQueriesEXTHelper(
return false;
}
}
- scoped_array<GLuint> service_ids(new GLuint[n]);
- glGenQueriesARB(n, service_ids.get());
- for (GLsizei ii = 0; ii < n; ++ii) {
- query_manager_->CreateQuery(client_ids[ii], service_ids[ii]);
- }
+ // NOTE: We don't generate Query objects here. Only in BeginQueryEXT
return true;
}
@@ -7954,8 +7950,7 @@ void GLES2DecoderImpl::DeleteQueriesEXTHelper(
if (query == current_query_) {
current_query_ = NULL;
}
- GLuint service_id = query->service_id();
- glDeleteQueriesARB(1, &service_id);
+ query->Destroy(true);
query_manager_->RemoveQuery(client_ids[ii]);
}
}
@@ -7968,9 +7963,15 @@ error::Error GLES2DecoderImpl::HandleBeginQueryEXT(
int32 sync_shm_id = static_cast<int32>(c.sync_data_shm_id);
uint32 sync_shm_offset = static_cast<uint32>(c.sync_data_shm_offset);
- if (!feature_info_->feature_flags().occlusion_query_boolean) {
- SetGLError(GL_INVALID_OPERATION, "glBeginQueryEXT: not enabled");
- return error::kNoError;
+ switch (target) {
+ case GL_COMMANDS_ISSUED_CHROMIUM:
+ break;
+ default:
+ if (!feature_info_->feature_flags().occlusion_query_boolean) {
+ SetGLError(GL_INVALID_OPERATION, "glBeginQueryEXT: not enabled");
+ return error::kNoError;
+ }
+ break;
}
if (current_query_) {
@@ -7994,23 +7995,12 @@ error::Error GLES2DecoderImpl::HandleBeginQueryEXT(
"glBeginQueryEXT: id not made by glGenQueriesEXT");
return error::kNoError;
}
- // Makes object and assoicates with memory.
- GLuint service_id = 0;
- glGenQueriesARB(1, &service_id);
- DCHECK_NE(0u, service_id);
- query = query_manager_->CreateQuery(client_id, service_id);
- }
- QuerySync* sync = GetSharedMemoryAs<QuerySync*>(
- sync_shm_id, sync_shm_offset, sizeof(*sync));
- if (!sync) {
- DLOG(ERROR) << "Invalid shared memory referenced by query";
- return error::kOutOfBounds;
+ query = query_manager_->CreateQuery(
+ target, client_id, sync_shm_id, sync_shm_offset);
}
- if (!query->IsInitialized()) {
- query->Initialize(target, sync_shm_id, sync_shm_offset);
- } else if (query->target() != target) {
+ if (query->target() != target) {
SetGLError(GL_INVALID_OPERATION, "glBeginQueryEXT: target does not match");
return error::kNoError;
} else if (query->shm_id() != sync_shm_id ||
@@ -8019,11 +8009,11 @@ error::Error GLES2DecoderImpl::HandleBeginQueryEXT(
return error::kInvalidArguments;
}
- query_manager_->RemovePendingQuery(query);
+ if (!query_manager_->BeginQuery(query)) {
+ return error::kOutOfBounds;
+ }
- glBeginQueryARB(target, query->service_id());
current_query_ = query;
-
return error::kNoError;
}
@@ -8041,10 +8031,12 @@ error::Error GLES2DecoderImpl::HandleEndQueryEXT(
"glEndQueryEXT: target does not match active query");
return error::kNoError;
}
- glEndQueryARB(target);
- query_manager_->AddPendingQuery(current_query_, submit_count);
- current_query_ = NULL;
+ if (!query_manager_->EndQuery(current_query_, submit_count)) {
+ return error::kOutOfBounds;
+ }
+
+ current_query_ = NULL;
return error::kNoError;
}

Powered by Google App Engine
This is Rietveld 408576698