| Index: components/mus/gles2/command_buffer_driver.cc
|
| diff --git a/components/mus/gles2/command_buffer_driver.cc b/components/mus/gles2/command_buffer_driver.cc
|
| index 649216a4fb71e8df6e476de135a9516d0c2d13f0..2157ef790e31542e818f117517b0a1b1392b82e2 100644
|
| --- a/components/mus/gles2/command_buffer_driver.cc
|
| +++ b/components/mus/gles2/command_buffer_driver.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "components/mus/gles2/command_buffer_driver.h"
|
|
|
| +#include "base/atomic_sequence_num.h"
|
| #include "base/bind.h"
|
| #include "base/macros.h"
|
| #include "base/memory/shared_memory.h"
|
| @@ -35,10 +36,19 @@
|
|
|
| namespace mus {
|
|
|
| +namespace {
|
| +
|
| +base::StaticAtomicSequenceNumber g_next_command_buffer_id;
|
| +
|
| +}
|
| +
|
| CommandBufferDriver::Client::~Client() {}
|
|
|
| CommandBufferDriver::CommandBufferDriver(scoped_refptr<GpuState> gpu_state)
|
| - : client_(nullptr), gpu_state_(gpu_state), weak_factory_(this) {}
|
| + : command_buffer_id_(g_next_command_buffer_id.GetNext()),
|
| + client_(nullptr),
|
| + gpu_state_(gpu_state),
|
| + weak_factory_(this) {}
|
|
|
| CommandBufferDriver::~CommandBufferDriver() {
|
| DestroyDecoder();
|
| @@ -56,7 +66,10 @@ void CommandBufferDriver::Initialize(
|
| mojom::GpuCapabilitiesPtr capabilities =
|
| success ? mojom::GpuCapabilities::From(decoder_->GetCapabilities())
|
| : nullptr;
|
| - sync_client_->DidInitialize(success, capabilities.Pass());
|
| + sync_client_->DidInitialize(success,
|
| + gpu::CommandBufferNamespace::MOJO,
|
| + command_buffer_id_,
|
| + capabilities.Pass());
|
| }
|
|
|
| bool CommandBufferDriver::MakeCurrent() {
|
| @@ -113,6 +126,10 @@ bool CommandBufferDriver::DoInitialize(
|
| decoder_.reset(::gpu::gles2::GLES2Decoder::Create(context_group.get()));
|
| scheduler_.reset(new gpu::GpuScheduler(command_buffer_.get(), decoder_.get(),
|
| decoder_.get()));
|
| + sync_point_order_data_ = gpu::SyncPointOrderData::Create();
|
| + sync_point_client_ = gpu_state_->sync_point_manager()->CreateSyncPointClient(
|
| + sync_point_order_data_, gpu::CommandBufferNamespace::MOJO,
|
| + command_buffer_id_);
|
| decoder_->set_engine(scheduler_.get());
|
| decoder_->SetWaitSyncPointCallback(base::Bind(
|
| &CommandBufferDriver::OnWaitSyncPoint, base::Unretained(this)));
|
| @@ -299,12 +316,8 @@ bool CommandBufferDriver::OnWaitSyncPoint(uint32_t sync_point) {
|
| }
|
|
|
| void CommandBufferDriver::OnFenceSyncRelease(uint64_t release) {
|
| - // TODO(dyen): Implement once CommandBufferID has been figured out and
|
| - // we have a SyncPointClient. It would probably look like what is commented
|
| - // out below:
|
| - // if (!sync_point_client_->client_state()->IsFenceSyncReleased(release))
|
| - // sync_point_client_->ReleaseFenceSync(release);
|
| - NOTIMPLEMENTED();
|
| + if (!sync_point_client_->client_state()->IsFenceSyncReleased(release))
|
| + sync_point_client_->ReleaseFenceSync(release);
|
| }
|
|
|
| bool CommandBufferDriver::OnWaitFenceSync(
|
| @@ -324,16 +337,13 @@ bool CommandBufferDriver::OnWaitFenceSync(
|
| if (release_state->IsFenceSyncReleased(release))
|
| return true;
|
|
|
| - // TODO(dyen): Implement once CommandBufferID has been figured out and
|
| - // we have a SyncPointClient. It would probably look like what is commented
|
| - // out below:
|
| - // scheduler_->SetScheduled(false);
|
| - // sync_point_client_->Wait(
|
| - // release_state.get(),
|
| - // release,
|
| - // base::Bind(&CommandBufferDriver::OnSyncPointRetired,
|
| - // weak_factory_.GetWeakPtr()));
|
| - NOTIMPLEMENTED();
|
| +
|
| + scheduler_->SetScheduled(false);
|
| + sync_point_client_->Wait(
|
| + release_state.get(),
|
| + release,
|
| + base::Bind(&CommandBufferDriver::OnSyncPointRetired,
|
| + weak_factory_.GetWeakPtr()));
|
| return scheduler_->scheduled();
|
| }
|
|
|
|
|