Chromium Code Reviews| 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..ab8cb20ada3d834b30a8e07c219f03d2340d5891 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_; |
| } |
| +uint32_t CommandBufferProxyImpl::GetExtraCommandBufferData() const { |
| + return static_cast<uint32_t>(stream_id_); |
|
dcheng
2015/12/01 01:29:14
Wouldn't it be easier just to make the signs match
David Yen
2015/12/01 21:29:45
Done.
|
| +} |
| + |
| uint64_t CommandBufferProxyImpl::GenerateFenceSyncRelease() { |
| return next_fence_sync_release_++; |
| } |
| @@ -577,8 +581,18 @@ 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 = |
| + static_cast<int32_t>(sync_token->extra_data_field()); |
| + if (release_stream_id != stream_id_) |
| + channel_->FlushPendingStream(release_stream_id); |
| + |
| + return true; |
| } |
| uint32 CommandBufferProxyImpl::InsertSyncPoint() { |