| Index: components/mus/gles2/command_buffer_local.cc
|
| diff --git a/components/mus/gles2/command_buffer_local.cc b/components/mus/gles2/command_buffer_local.cc
|
| index 27442cb3834f78d4e51ea8d1198a36339121a765..bb6f8549aa2ddccc29d1137e71f072ae4a3ca066 100644
|
| --- a/components/mus/gles2/command_buffer_local.cc
|
| +++ b/components/mus/gles2/command_buffer_local.cc
|
| @@ -32,6 +32,7 @@ CommandBufferLocal::CommandBufferLocal(CommandBufferLocalClient* client,
|
| : widget_(widget),
|
| gpu_state_(gpu_state),
|
| client_(client),
|
| + next_fence_sync_release_(1),
|
| weak_factory_(this) {}
|
|
|
| CommandBufferLocal::~CommandBufferLocal() {
|
| @@ -92,6 +93,10 @@ bool CommandBufferLocal::Initialize() {
|
| base::Bind(&CommandBufferLocal::OnResize, base::Unretained(this)));
|
| decoder_->SetWaitSyncPointCallback(
|
| base::Bind(&CommandBufferLocal::OnWaitSyncPoint, base::Unretained(this)));
|
| + decoder_->SetFenceSyncReleaseCallback(base::Bind(
|
| + &CommandBufferLocal::OnFenceSyncRelease, base::Unretained(this)));
|
| + decoder_->SetWaitFenceSyncCallback(
|
| + base::Bind(&CommandBufferLocal::OnWaitFenceSync, base::Unretained(this)));
|
|
|
| gpu::gles2::DisallowedFeatures disallowed_features;
|
|
|
| @@ -220,6 +225,18 @@ uint64_t CommandBufferLocal::GetCommandBufferID() const {
|
| return 0;
|
| }
|
|
|
| +uint64_t CommandBufferLocal::GenerateFenceSyncRelease() {
|
| + return next_fence_sync_release_++;
|
| +}
|
| +
|
| +bool CommandBufferLocal::IsFenceSyncRelease(uint64_t release) {
|
| + return release > 0 && release < next_fence_sync_release_;
|
| +}
|
| +
|
| +bool CommandBufferLocal::IsFenceSyncFlushed(uint64_t release) {
|
| + return IsFenceSyncRelease(release);
|
| +}
|
| +
|
| void CommandBufferLocal::PumpCommands() {
|
| if (!decoder_->MakeCurrent()) {
|
| command_buffer_->SetContextLostReason(decoder_->GetContextLostReason());
|
| @@ -253,6 +270,45 @@ bool CommandBufferLocal::OnWaitSyncPoint(uint32_t sync_point) {
|
| return scheduler_->scheduled();
|
| }
|
|
|
| +void CommandBufferLocal::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();
|
| +}
|
| +
|
| +bool CommandBufferLocal::OnWaitFenceSync(
|
| + gpu::CommandBufferNamespace namespace_id,
|
| + uint64_t command_buffer_id,
|
| + uint64_t release) {
|
| + gpu::SyncPointManager* sync_point_manager = gpu_state_->sync_point_manager();
|
| + DCHECK(sync_point_manager);
|
| +
|
| + scoped_refptr<gpu::SyncPointClientState> release_state =
|
| + sync_point_manager->GetSyncPointClientState(namespace_id,
|
| + command_buffer_id);
|
| +
|
| + if (!release_state)
|
| + return true;
|
| +
|
| + 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(&CommandBufferLocal::OnSyncPointRetired,
|
| + // weak_factory_.GetWeakPtr()));
|
| + NOTIMPLEMENTED();
|
| + return scheduler_->scheduled();
|
| +}
|
| +
|
| void CommandBufferLocal::OnParseError() {
|
| gpu::CommandBuffer::State state = command_buffer_->GetLastState();
|
| OnContextLost(state.context_lost_reason);
|
|
|