| 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 // A class to emulate GLES2 over command buffers. | 5 // A class to emulate GLES2 over command buffers. |
| 6 | 6 |
| 7 #include "gpu/command_buffer/client/gles2_implementation.h" | 7 #include "gpu/command_buffer/client/gles2_implementation.h" |
| 8 | 8 |
| 9 #include <GLES2/gl2.h> | 9 #include <GLES2/gl2.h> |
| 10 #include <GLES2/gl2ext.h> | 10 #include <GLES2/gl2ext.h> |
| (...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 // GL_BIND_GENERATES_RESOURCE_CHROMIUM state must be the same | 255 // GL_BIND_GENERATES_RESOURCE_CHROMIUM state must be the same |
| 256 // on Client & Service. | 256 // on Client & Service. |
| 257 if (capabilities_.bind_generates_resource_chromium != | 257 if (capabilities_.bind_generates_resource_chromium != |
| 258 (share_group_->bind_generates_resource() ? 1 : 0)) { | 258 (share_group_->bind_generates_resource() ? 1 : 0)) { |
| 259 SetGLError(GL_INVALID_OPERATION, | 259 SetGLError(GL_INVALID_OPERATION, |
| 260 "Initialize", | 260 "Initialize", |
| 261 "Service bind_generates_resource mismatch."); | 261 "Service bind_generates_resource mismatch."); |
| 262 return false; | 262 return false; |
| 263 } | 263 } |
| 264 | 264 |
| 265 // In certain cases, ThreadTaskRunnerHandle isn't set (Android Webview). | |
| 266 // Don't register a dump provider in these cases. | |
| 267 // TODO(ericrk): Get this working in Android Webview. crbug.com/517156 | |
| 268 if (base::ThreadTaskRunnerHandle::IsSet()) { | |
| 269 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( | |
| 270 this, "GLES2Implementation", base::ThreadTaskRunnerHandle::Get()); | |
| 271 } | |
| 272 | |
| 273 return true; | 265 return true; |
| 274 } | 266 } |
| 275 | 267 |
| 276 GLES2Implementation::~GLES2Implementation() { | 268 GLES2Implementation::~GLES2Implementation() { |
| 277 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( | |
| 278 this); | |
| 279 | |
| 280 // Make sure the queries are finished otherwise we'll delete the | 269 // Make sure the queries are finished otherwise we'll delete the |
| 281 // shared memory (mapped_memory_) which will free the memory used | 270 // shared memory (mapped_memory_) which will free the memory used |
| 282 // by the queries. The GPU process when validating that memory is still | 271 // by the queries. The GPU process when validating that memory is still |
| 283 // shared will fail and abort (ie, it will stop running). | 272 // shared will fail and abort (ie, it will stop running). |
| 284 WaitForCmd(); | 273 WaitForCmd(); |
| 285 query_tracker_.reset(); | 274 query_tracker_.reset(); |
| 286 | 275 |
| 287 // GLES2Implementation::Initialize() could fail before allocating | 276 // GLES2Implementation::Initialize() could fail before allocating |
| 288 // reserved_ids_, so we need delete them carefully. | 277 // reserved_ids_, so we need delete them carefully. |
| 289 if (support_client_side_arrays_ && reserved_ids_[0]) { | 278 if (support_client_side_arrays_ && reserved_ids_[0]) { |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 398 intermediate_sync_token, | 387 intermediate_sync_token, |
| 399 base::Bind(&GLES2Implementation::RunIfContextNotLost, | 388 base::Bind(&GLES2Implementation::RunIfContextNotLost, |
| 400 weak_ptr_factory_.GetWeakPtr(), | 389 weak_ptr_factory_.GetWeakPtr(), |
| 401 callback)); | 390 callback)); |
| 402 } else { | 391 } else { |
| 403 // Invalid sync token, just call the callback immediately. | 392 // Invalid sync token, just call the callback immediately. |
| 404 callback.Run(); | 393 callback.Run(); |
| 405 } | 394 } |
| 406 } | 395 } |
| 407 | 396 |
| 397 // For some command buffer implementations this can be called from any thread. |
| 398 // It's safe to access gpu_control_ without the lock because it is const. |
| 399 bool GLES2Implementation::IsFenceSyncReleased(uint64_t release_count) { |
| 400 return gpu_control_->IsFenceSyncReleased(release_count); |
| 401 } |
| 402 |
| 408 void GLES2Implementation::SignalQuery(uint32_t query, | 403 void GLES2Implementation::SignalQuery(uint32_t query, |
| 409 const base::Closure& callback) { | 404 const base::Closure& callback) { |
| 410 // Flush previously entered commands to ensure ordering with any | 405 // Flush previously entered commands to ensure ordering with any |
| 411 // glBeginQueryEXT() calls that may have been put into the context. | 406 // glBeginQueryEXT() calls that may have been put into the context. |
| 412 ShallowFlushCHROMIUM(); | 407 ShallowFlushCHROMIUM(); |
| 413 gpu_control_->SignalQuery( | 408 gpu_control_->SignalQuery( |
| 414 query, | 409 query, |
| 415 base::Bind(&GLES2Implementation::RunIfContextNotLost, | 410 base::Bind(&GLES2Implementation::RunIfContextNotLost, |
| 416 weak_ptr_factory_.GetWeakPtr(), | 411 weak_ptr_factory_.GetWeakPtr(), |
| 417 callback)); | 412 callback)); |
| (...skipping 6612 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7030 cached_extensions_.clear(); | 7025 cached_extensions_.clear(); |
| 7031 } | 7026 } |
| 7032 | 7027 |
| 7033 // Include the auto-generated part of this file. We split this because it means | 7028 // Include the auto-generated part of this file. We split this because it means |
| 7034 // we can easily edit the non-auto generated parts right here in this file | 7029 // we can easily edit the non-auto generated parts right here in this file |
| 7035 // instead of having to edit some template or the code generator. | 7030 // instead of having to edit some template or the code generator. |
| 7036 #include "gpu/command_buffer/client/gles2_implementation_impl_autogen.h" | 7031 #include "gpu/command_buffer/client/gles2_implementation_impl_autogen.h" |
| 7037 | 7032 |
| 7038 } // namespace gles2 | 7033 } // namespace gles2 |
| 7039 } // namespace gpu | 7034 } // namespace gpu |
| OLD | NEW |