| 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 47e20d149ee54a844113bcb7e88b61ea754ac15b..22afb00509ccaa1af37ef3a11422725870e053f6 100644
|
| --- a/content/common/gpu/client/command_buffer_proxy_impl.cc
|
| +++ b/content/common/gpu/client/command_buffer_proxy_impl.cc
|
| @@ -52,6 +52,7 @@ CommandBufferProxyImpl::CommandBufferProxyImpl(GpuChannelHost* channel,
|
| verified_fence_sync_release_(0),
|
| next_signal_id_(0) {
|
| DCHECK(channel);
|
| + DCHECK(stream_id);
|
| }
|
|
|
| CommandBufferProxyImpl::~CommandBufferProxyImpl() {
|
| @@ -449,7 +450,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 +520,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 +582,20 @@ 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 == 0)
|
| + return false;
|
| +
|
| + if (release_stream_id != stream_id_)
|
| + channel_->FlushPendingStream(release_stream_id);
|
| +
|
| + return true;
|
| }
|
|
|
| uint32 CommandBufferProxyImpl::InsertSyncPoint() {
|
|
|