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 584353f07f26e4d8e0d8dfcf201880fb68cce162..51e571e74aeea1a32d435c443b677ffa3fa2ce8a 100644 |
--- a/gpu/command_buffer/client/gles2_implementation.cc |
+++ b/gpu/command_buffer/client/gles2_implementation.cc |
@@ -245,7 +245,9 @@ bool GLES2Implementation::Initialize( |
query_tracker_.reset(new QueryTracker(mapped_memory_.get())); |
buffer_tracker_.reset(new BufferTracker(mapped_memory_.get())); |
- query_id_allocator_.reset(new IdAllocator()); |
+ for (int i = 0; i < id_namespaces::kNumIdNamespaces; ++i) |
+ id_allocators_[i].reset(new IdAllocator()); |
Zhenyao Mo
2017/04/19 20:24:28
Some of these allocators are never used. Why?
Chandan
2017/04/20 10:56:07
As of now, 3 allocators are created, one each for
|
+ |
if (support_client_side_arrays_) { |
GetIdHandler(id_namespaces::kBuffers)->MakeIds( |
this, kClientSideArrayId, arraysize(reserved_ids_), &reserved_ids_[0]); |
@@ -313,10 +315,7 @@ RangeIdHandlerInterface* GLES2Implementation::GetRangeIdHandler( |
} |
IdAllocator* GLES2Implementation::GetIdAllocator(int namespace_id) const { |
- if (namespace_id == id_namespaces::kQueries) |
- return query_id_allocator_.get(); |
- NOTREACHED(); |
- return NULL; |
+ return id_allocators_[namespace_id].get(); |
} |
void GLES2Implementation::OnGpuControlLostContext() { |
@@ -4398,18 +4397,14 @@ void GLES2Implementation::BindFramebufferHelper( |
} |
if (changed) { |
- GetIdHandler(id_namespaces::kFramebuffers)->MarkAsUsedForBind( |
- this, target, framebuffer, &GLES2Implementation::BindFramebufferStub); |
+ if (framebuffer != 0) |
+ GetIdAllocator(id_namespaces::kFramebuffers)->MarkAsUsed(framebuffer); |
+ helper_->BindFramebuffer(target, framebuffer); |
+ if (share_group_->bind_generates_resource()) |
+ helper_->CommandBufferHelper::OrderingBarrier(); |
} |
} |
-void GLES2Implementation::BindFramebufferStub(GLenum target, |
- GLuint framebuffer) { |
- helper_->BindFramebuffer(target, framebuffer); |
- if (share_group_->bind_generates_resource()) |
- helper_->CommandBufferHelper::OrderingBarrier(); |
-} |
- |
void GLES2Implementation::BindRenderbufferHelper( |
GLenum target, GLuint renderbuffer) { |
// TODO(gman): See note #1 above. |
@@ -4573,14 +4568,10 @@ void GLES2Implementation::DeleteBuffersStub( |
void GLES2Implementation::DeleteFramebuffersHelper( |
GLsizei n, const GLuint* framebuffers) { |
- if (!GetIdHandler(id_namespaces::kFramebuffers)->FreeIds( |
- this, n, framebuffers, &GLES2Implementation::DeleteFramebuffersStub)) { |
- SetGLError( |
- GL_INVALID_VALUE, |
- "glDeleteFramebuffers", "id not created by this context."); |
- return; |
- } |
+ helper_->DeleteFramebuffersImmediate(n, framebuffers); |
+ IdAllocator* id_allocator = GetIdAllocator(id_namespaces::kFramebuffers); |
for (GLsizei ii = 0; ii < n; ++ii) { |
+ id_allocator->FreeID(framebuffers[ii]); |
if (framebuffers[ii] == bound_framebuffer_) { |
bound_framebuffer_ = 0; |
} |
@@ -4590,11 +4581,6 @@ void GLES2Implementation::DeleteFramebuffersHelper( |
} |
} |
-void GLES2Implementation::DeleteFramebuffersStub( |
- GLsizei n, const GLuint* framebuffers) { |
- helper_->DeleteFramebuffersImmediate(n, framebuffers); |
-} |
- |
void GLES2Implementation::DeleteRenderbuffersHelper( |
GLsizei n, const GLuint* renderbuffers) { |
if (!GetIdHandler(id_namespaces::kRenderbuffers)->FreeIds( |
@@ -4650,18 +4636,10 @@ void GLES2Implementation::DeleteTexturesStub(GLsizei n, |
void GLES2Implementation::DeleteVertexArraysOESHelper( |
GLsizei n, const GLuint* arrays) { |
vertex_array_object_manager_->DeleteVertexArrays(n, arrays); |
- if (!GetIdHandler(id_namespaces::kVertexArrays)->FreeIds( |
- this, n, arrays, &GLES2Implementation::DeleteVertexArraysOESStub)) { |
- SetGLError( |
- GL_INVALID_VALUE, |
- "glDeleteVertexArraysOES", "id not created by this context."); |
- return; |
- } |
-} |
- |
-void GLES2Implementation::DeleteVertexArraysOESStub( |
- GLsizei n, const GLuint* arrays) { |
helper_->DeleteVertexArraysOESImmediate(n, arrays); |
+ IdAllocator* id_allocator = GetIdAllocator(id_namespaces::kVertexArrays); |
+ for (GLsizei ii = 0; ii < n; ++ii) |
+ id_allocator->FreeID(arrays[ii]); |
} |
void GLES2Implementation::DeleteSamplersStub( |
@@ -5566,9 +5544,10 @@ void GLES2Implementation::PostSubBufferCHROMIUM( |
void GLES2Implementation::DeleteQueriesEXTHelper( |
GLsizei n, const GLuint* queries) { |
+ IdAllocator* id_allocator = GetIdAllocator(id_namespaces::kQueries); |
for (GLsizei ii = 0; ii < n; ++ii) { |
query_tracker_->RemoveQuery(queries[ii]); |
- query_id_allocator_->FreeID(queries[ii]); |
+ id_allocator->FreeID(queries[ii]); |
} |
helper_->DeleteQueriesEXTImmediate(n, queries); |
@@ -5651,7 +5630,7 @@ void GLES2Implementation::BeginQueryEXT(GLenum target, GLuint id) { |
return; |
} |
- if (!query_id_allocator_->InUse(id)) { |
+ if (!GetIdAllocator(id_namespaces::kQueries)->InUse(id)) { |
SetGLError(GL_INVALID_OPERATION, "glBeginQueryEXT", "invalid id"); |
return; |
} |
@@ -5708,7 +5687,7 @@ void GLES2Implementation::QueryCounterEXT(GLuint id, GLenum target) { |
return; |
} |
- if (!query_id_allocator_->InUse(id)) { |
+ if (!GetIdAllocator(id_namespaces::kQueries)->InUse(id)) { |
SetGLError(GL_INVALID_OPERATION, "glQueryCounterEXT", "invalid id"); |
return; |
} |