| Index: content/common/gpu/client/command_buffer_proxy_impl.cc
|
| diff --git a/content/common/gpu/client/command_buffer_proxy_impl.cc b/content/common/gpu/client/command_buffer_proxy_impl.cc
|
| index b8785bc64a6fe12bee74f6c88a3e595c0b9084bc..cbdb0869a661e1eb1ef45961f1ebf27130cc3d7c 100644
|
| --- a/content/common/gpu/client/command_buffer_proxy_impl.cc
|
| +++ b/content/common/gpu/client/command_buffer_proxy_impl.cc
|
| @@ -449,7 +449,7 @@ int32_t CommandBufferProxyImpl::CreateImage(ClientBuffer buffer,
|
|
|
| if (image_fence_sync) {
|
| gpu::SyncToken sync_token(GetNamespaceID(), GetCommandBufferID(),
|
| - image_fence_sync);
|
| + GetExtraCommandBufferData(), image_fence_sync);
|
|
|
| // Force a synchronous IPC to validate sync token.
|
| channel_->ValidateFlushIDReachedServer(stream_id_, true);
|
| @@ -519,6 +519,10 @@ uint64_t CommandBufferProxyImpl::GetCommandBufferID() const {
|
| return command_buffer_id_;
|
| }
|
|
|
| +int32_t CommandBufferProxyImpl::GetExtraCommandBufferData() const {
|
| + return stream_id_;
|
| +}
|
| +
|
| uint64_t CommandBufferProxyImpl::GenerateFenceSyncRelease() {
|
| return next_fence_sync_release_++;
|
| }
|
| @@ -577,8 +581,17 @@ bool CommandBufferProxyImpl::CanWaitUnverifiedSyncToken(
|
| // Can only wait on an unverified sync token if it is from the same channel.
|
| const uint64_t token_channel = sync_token->command_buffer_id() >> 32;
|
| const uint64_t channel = command_buffer_id_ >> 32;
|
| - return (sync_token->namespace_id() == gpu::CommandBufferNamespace::GPU_IO &&
|
| - token_channel == channel);
|
| + if (sync_token->namespace_id() != gpu::CommandBufferNamespace::GPU_IO ||
|
| + token_channel != channel) {
|
| + return false;
|
| + }
|
| +
|
| + // If waiting on a different stream, flush pending commands on that stream.
|
| + const int32_t release_stream_id = sync_token->extra_data_field();
|
| + if (release_stream_id != stream_id_)
|
| + channel_->FlushPendingStream(release_stream_id);
|
| +
|
| + return true;
|
| }
|
|
|
| uint32 CommandBufferProxyImpl::InsertSyncPoint() {
|
|
|