Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <stack> | 5 #include <stack> |
| 6 #include <vector> | 6 #include <vector> |
| 7 | 7 |
| 8 #include "gpu/command_buffer/client/share_group.h" | 8 #include "gpu/command_buffer/client/share_group.h" |
| 9 | 9 |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 60 (gl_impl->*delete_fn)(n, ids); | 60 (gl_impl->*delete_fn)(n, ids); |
| 61 // We need to ensure that the delete call is evaluated on the service side | 61 // We need to ensure that the delete call is evaluated on the service side |
| 62 // before any other contexts issue commands using these client ids. | 62 // before any other contexts issue commands using these client ids. |
| 63 // TODO(vmiura): Can remove this by virtualizing internal ids, however | 63 // TODO(vmiura): Can remove this by virtualizing internal ids, however |
| 64 // this code only affects PPAPI for now. | 64 // this code only affects PPAPI for now. |
| 65 gl_impl->helper()->CommandBufferHelper::Flush(); | 65 gl_impl->helper()->CommandBufferHelper::Flush(); |
| 66 return true; | 66 return true; |
| 67 } | 67 } |
| 68 | 68 |
| 69 // Overridden from IdHandlerInterface. | 69 // Overridden from IdHandlerInterface. |
| 70 bool MarkAsUsedForBind(GLuint id) override { | 70 bool MarkAsUsedForBind(GLES2Implementation* gl_impl, |
| 71 if (id == 0) | 71 GLenum target, |
| 72 return true; | 72 GLuint id, |
| 73 BindFn bind_fn) override { | |
| 73 base::AutoLock auto_lock(lock_); | 74 base::AutoLock auto_lock(lock_); |
| 74 return id_allocator_.MarkAsUsed(id); | 75 bool result = id ? id_allocator_.MarkAsUsed(id) : true; |
| 76 (gl_impl->*bind_fn)(target, id); | |
| 77 return result; | |
| 75 } | 78 } |
| 76 | 79 |
| 77 void FreeContext(GLES2Implementation* gl_impl) override {} | 80 void FreeContext(GLES2Implementation* gl_impl) override {} |
| 78 | 81 |
| 79 private: | 82 private: |
| 80 base::Lock lock_; | 83 base::Lock lock_; |
| 81 IdAllocator id_allocator_; | 84 IdAllocator id_allocator_; |
| 82 }; | 85 }; |
| 83 | 86 |
| 84 // An id handler that requires Gen before Bind. | 87 // An id handler that requires Gen before Bind. |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 140 id_states_[id - 1] = kIdPendingFree; | 143 id_states_[id - 1] = kIdPendingFree; |
| 141 ctxt_data->freed_ids_.push_back(id); | 144 ctxt_data->freed_ids_.push_back(id); |
| 142 } | 145 } |
| 143 } | 146 } |
| 144 } | 147 } |
| 145 | 148 |
| 146 return true; | 149 return true; |
| 147 } | 150 } |
| 148 | 151 |
| 149 // Overridden from IdHandler. | 152 // Overridden from IdHandler. |
| 150 bool MarkAsUsedForBind(GLuint id) override { | 153 bool MarkAsUsedForBind(GLES2Implementation* gl_impl, |
| 154 GLenum target, | |
| 155 GLuint id, | |
| 156 BindFn bind_fn) override { | |
| 157 base::AutoLock auto_lock(lock_); | |
|
piman
2014/12/05 20:31:13
You don't need to take the lock in the release pat
Peng
2014/12/05 21:04:39
Done.
| |
| 151 #ifndef NDEBUG | 158 #ifndef NDEBUG |
| 152 if (id != 0) { | 159 if (id != 0) { |
| 153 base::AutoLock auto_lock(lock_); | |
| 154 DCHECK(id_states_[id - 1] == kIdInUse); | 160 DCHECK(id_states_[id - 1] == kIdInUse); |
| 155 } | 161 } |
| 156 #endif | 162 #endif |
| 163 (gl_impl->*bind_fn)(target, id); | |
| 157 return true; | 164 return true; |
| 158 } | 165 } |
| 159 | 166 |
| 160 // Overridden from IdHandlerInterface. | 167 // Overridden from IdHandlerInterface. |
| 161 void FreeContext(GLES2Implementation* gl_impl) override { | 168 void FreeContext(GLES2Implementation* gl_impl) override { |
| 162 base::AutoLock auto_lock(lock_); | 169 base::AutoLock auto_lock(lock_); |
| 163 CollectPendingFreeIds(gl_impl); | 170 CollectPendingFreeIds(gl_impl); |
| 164 } | 171 } |
| 165 | 172 |
| 166 private: | 173 private: |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 211 bool FreeIds(GLES2Implementation* gl_impl, | 218 bool FreeIds(GLES2Implementation* gl_impl, |
| 212 GLsizei n, | 219 GLsizei n, |
| 213 const GLuint* ids, | 220 const GLuint* ids, |
| 214 DeleteFn delete_fn) override { | 221 DeleteFn delete_fn) override { |
| 215 // Ids are never freed. | 222 // Ids are never freed. |
| 216 (gl_impl->*delete_fn)(n, ids); | 223 (gl_impl->*delete_fn)(n, ids); |
| 217 return true; | 224 return true; |
| 218 } | 225 } |
| 219 | 226 |
| 220 // Overridden from IdHandlerInterface. | 227 // Overridden from IdHandlerInterface. |
| 221 bool MarkAsUsedForBind(GLuint /* id */) override { | 228 bool MarkAsUsedForBind(GLES2Implementation* /* gl_impl */, |
| 229 GLenum /* target */, | |
| 230 GLuint /* id */, | |
| 231 BindFn /* bind_fn */) override { | |
| 222 // This is only used for Shaders and Programs which have no bind. | 232 // This is only used for Shaders and Programs which have no bind. |
| 223 return false; | 233 return false; |
| 224 } | 234 } |
| 225 | 235 |
| 226 void FreeContext(GLES2Implementation* gl_impl) override {} | 236 void FreeContext(GLES2Implementation* gl_impl) override {} |
| 227 | 237 |
| 228 private: | 238 private: |
| 229 base::Lock lock_; | 239 base::Lock lock_; |
| 230 GLuint last_id_; | 240 GLuint last_id_; |
| 231 }; | 241 }; |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 253 } | 263 } |
| 254 | 264 |
| 255 void ShareGroup::set_program_info_manager(ProgramInfoManager* manager) { | 265 void ShareGroup::set_program_info_manager(ProgramInfoManager* manager) { |
| 256 program_info_manager_.reset(manager); | 266 program_info_manager_.reset(manager); |
| 257 } | 267 } |
| 258 | 268 |
| 259 ShareGroup::~ShareGroup() {} | 269 ShareGroup::~ShareGroup() {} |
| 260 | 270 |
| 261 } // namespace gles2 | 271 } // namespace gles2 |
| 262 } // namespace gpu | 272 } // namespace gpu |
| OLD | NEW |