| 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 716fb55fbc2eaac205d249c20f9bbd4a2e761b1a..91e6031e72ef5beb7db06086fbd409a0b596e5ce 100644
|
| --- a/gpu/command_buffer/client/gles2_implementation.cc
|
| +++ b/gpu/command_buffer/client/gles2_implementation.cc
|
| @@ -192,6 +192,7 @@ bool GLES2Implementation::Initialize(
|
| buffer_tracker_.reset(new BufferTracker(mapped_memory_.get()));
|
| gpu_memory_buffer_tracker_.reset(new GpuMemoryBufferTracker(gpu_control_));
|
|
|
| + query_id_allocator_.reset(new IdAllocator());
|
| #if defined(GLES2_SUPPORT_CLIENT_SIDE_ARRAYS)
|
| GetIdHandler(id_namespaces::kBuffers)->MakeIds(
|
| this, kClientSideArrayId, arraysize(reserved_ids_), &reserved_ids_[0]);
|
| @@ -325,6 +326,14 @@ IdHandlerInterface* GLES2Implementation::GetIdHandler(int namespace_id) const {
|
| return share_group_->GetIdHandler(namespace_id);
|
| }
|
|
|
| +IdAllocatorInterface* GLES2Implementation::GetIdAllocator(
|
| + int namespace_id) const {
|
| + if (namespace_id == id_namespaces::kQueries)
|
| + return query_id_allocator_.get();
|
| + NOTREACHED();
|
| + return NULL;
|
| +}
|
| +
|
| void* GLES2Implementation::GetResultBuffer() {
|
| return transfer_buffer_->GetResultBuffer();
|
| }
|
| @@ -568,7 +577,7 @@ bool GLES2Implementation::GetBucketContents(uint32 bucket_id,
|
| offset += size_to_copy;
|
| size -= size_to_copy;
|
| buffer.Release();
|
| - };
|
| + }
|
| // Free the bucket. This is not required but it does free up the memory.
|
| // and we don't have to wait for the result so from the client's perspective
|
| // it's cheap.
|
| @@ -1321,7 +1330,10 @@ void GLES2Implementation::VertexAttribDivisorANGLE(
|
| }
|
|
|
| void GLES2Implementation::ShaderSource(
|
| - GLuint shader, GLsizei count, const GLchar* const* source, const GLint* length) {
|
| + GLuint shader,
|
| + GLsizei count,
|
| + const GLchar* const* source,
|
| + const GLint* length) {
|
| GPU_CLIENT_SINGLE_THREAD_CHECK();
|
| GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glShaderSource("
|
| << shader << ", " << count << ", "
|
| @@ -1581,8 +1593,7 @@ BufferTracker::Buffer*
|
| GLES2Implementation::GetBoundPixelUnpackTransferBufferIfValid(
|
| GLuint buffer_id,
|
| const char* function_name,
|
| - GLuint offset, GLsizei size)
|
| -{
|
| + GLuint offset, GLsizei size) {
|
| DCHECK(buffer_id);
|
| BufferTracker::Buffer* buffer = buffer_tracker_->GetBuffer(buffer_id);
|
| if (!buffer) {
|
| @@ -3285,7 +3296,7 @@ void GLES2Implementation::GetProgramInfoCHROMIUM(
|
| }
|
| // Make sure they've set size to 0 else the value will be undefined on
|
| // lost context.
|
| - DCHECK(*size == 0);
|
| + DCHECK_EQ(0, *size);
|
| std::vector<int8> result;
|
| GetProgramInfoCHROMIUMHelper(program, &result);
|
| if (result.empty()) {
|
| @@ -3332,26 +3343,14 @@ void GLES2Implementation::PostSubBufferCHROMIUM(
|
|
|
| void GLES2Implementation::DeleteQueriesEXTHelper(
|
| GLsizei n, const GLuint* queries) {
|
| - // TODO(gman): Remove this as queries are not shared resources.
|
| - if (!GetIdHandler(id_namespaces::kQueries)->FreeIds(
|
| - this, n, queries, &GLES2Implementation::DeleteQueriesStub)) {
|
| - SetGLError(
|
| - GL_INVALID_VALUE,
|
| - "glDeleteTextures", "id not created by this context.");
|
| - return;
|
| - }
|
| -
|
| - for (GLsizei ii = 0; ii < n; ++ii)
|
| + for (GLsizei ii = 0; ii < n; ++ii) {
|
| query_tracker_->RemoveQuery(queries[ii]);
|
| + query_id_allocator_->FreeID(queries[ii]);
|
| + }
|
|
|
| helper_->DeleteQueriesEXTImmediate(n, queries);
|
| }
|
|
|
| -// TODO(gman): Remove this. Queries are not shared resources.
|
| -void GLES2Implementation::DeleteQueriesStub(
|
| - GLsizei /* n */, const GLuint* /* queries */) {
|
| -}
|
| -
|
| GLboolean GLES2Implementation::IsQueryEXT(GLuint id) {
|
| GPU_CLIENT_SINGLE_THREAD_CHECK();
|
| GPU_CLIENT_LOG("[" << GetLogPrefix() << "] IsQueryEXT(" << id << ")");
|
| @@ -3382,7 +3381,11 @@ void GLES2Implementation::BeginQueryEXT(GLenum target, GLuint id) {
|
| return;
|
| }
|
|
|
| - // TODO(gman) if id not GENned INV_OPERATION
|
| + // if not GENned INV_OPERATION
|
| + if (!query_id_allocator_->InUse(id)) {
|
| + SetGLError(GL_INVALID_OPERATION, "glBeginQueryEXT", "invalid id");
|
| + return;
|
| + }
|
|
|
| // if id does not have an object
|
| QueryTracker::Query* query = query_tracker_->GetQuery(id);
|
|
|