| Index: gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| index ef63e55efad18b7a2ca4a226b9c308728a4a6dad..f2235611a2990c00126c439858ddec9d1b32cd85 100644
|
| --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| @@ -687,6 +687,9 @@ class GLES2DecoderImpl : public GLES2Decoder,
|
|
|
| void SetShaderCacheCallback(const ShaderCacheCallback& callback) override;
|
| void SetWaitSyncPointCallback(const WaitSyncPointCallback& callback) override;
|
| + void SetFenceSyncReleaseCallback(
|
| + const FenceSyncReleaseCallback& callback) override;
|
| + void SetWaitFenceSyncCallback(const WaitFenceSyncCallback& callback) override;
|
|
|
| void SetIgnoreCachedStateForTest(bool ignore) override;
|
| void ProcessFinishedAsyncTransfers();
|
| @@ -1965,6 +1968,8 @@ class GLES2DecoderImpl : public GLES2Decoder,
|
| base::Callback<void(gfx::Size, float)> resize_callback_;
|
|
|
| WaitSyncPointCallback wait_sync_point_callback_;
|
| + FenceSyncReleaseCallback fence_sync_release_callback_;
|
| + WaitFenceSyncCallback wait_fence_sync_callback_;
|
|
|
| ShaderCacheCallback shader_cache_callback_;
|
|
|
| @@ -3929,6 +3934,16 @@ void GLES2DecoderImpl::SetWaitSyncPointCallback(
|
| wait_sync_point_callback_ = callback;
|
| }
|
|
|
| +void GLES2DecoderImpl::SetFenceSyncReleaseCallback(
|
| + const FenceSyncReleaseCallback& callback) {
|
| + fence_sync_release_callback_ = callback;
|
| +}
|
| +
|
| +void GLES2DecoderImpl::SetWaitFenceSyncCallback(
|
| + const WaitFenceSyncCallback& callback) {
|
| + wait_fence_sync_callback_ = callback;
|
| +}
|
| +
|
| bool GLES2DecoderImpl::GetServiceTextureId(uint32 client_texture_id,
|
| uint32* service_texture_id) {
|
| TextureRef* texture_ref = texture_manager()->GetTexture(client_texture_id);
|
| @@ -12002,6 +12017,41 @@ error::Error GLES2DecoderImpl::HandleWaitSyncPointCHROMIUM(
|
| error::kNoError : error::kDeferCommandUntilLater;
|
| }
|
|
|
| +error::Error GLES2DecoderImpl::HandleInsertFenceSyncCHROMIUM(
|
| + uint32 immediate_data_size,
|
| + const void* cmd_data) {
|
| + const gles2::cmds::InsertFenceSyncCHROMIUM& c =
|
| + *static_cast<const gles2::cmds::InsertFenceSyncCHROMIUM*>(cmd_data);
|
| +
|
| + const uint32_t release_count = c.release_count;
|
| + if (!fence_sync_release_callback_.is_null())
|
| + fence_sync_release_callback_.Run(release_count);
|
| + return error::kNoError;
|
| +}
|
| +
|
| +error::Error GLES2DecoderImpl::HandleGenSyncTokenCHROMIUMImmediate(
|
| + uint32_t fence_sync,
|
| + const void* sync_token) {
|
| + return error::kUnknownCommand;
|
| +}
|
| +
|
| +error::Error GLES2DecoderImpl::HandleWaitSyncTokenCHROMIUM(
|
| + uint32 immediate_data_size,
|
| + const void* cmd_data) {
|
| + const gles2::cmds::WaitSyncTokenCHROMIUM& c =
|
| + *static_cast<const gles2::cmds::WaitSyncTokenCHROMIUM*>(cmd_data);
|
| +
|
| + const int channel_client_id = c.channel_id;
|
| + const uint32_t route_id = c.routing_id;
|
| + const uint32_t release = c.release_count;
|
| + if (wait_fence_sync_callback_.is_null())
|
| + return error::kNoError;
|
| +
|
| + return wait_fence_sync_callback_.Run(channel_client_id, route_id, release)
|
| + ? error::kNoError
|
| + : error::kDeferCommandUntilLater;
|
| +}
|
| +
|
| error::Error GLES2DecoderImpl::HandleDiscardBackbufferCHROMIUM(
|
| uint32 immediate_data_size,
|
| const void* cmd_data) {
|
|
|