| 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 fc12bfe2584ad0f85f485d59a09731588fc15e2f..e737b4b41b48185325e0a70fe853e15fdd2129c5 100644
|
| --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| @@ -688,6 +688,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();
|
| @@ -1989,6 +1992,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_;
|
|
|
| @@ -3948,6 +3953,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);
|
| @@ -12242,6 +12257,42 @@ 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 uint64_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 immediate_data_size,
|
| + const void* cmd_data) {
|
| + 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 gpu::CommandBufferNamespace namespace_id =
|
| + static_cast<gpu::CommandBufferNamespace>(c.namespace_id);
|
| + const uint64_t command_buffer_id = c.command_buffer_id;
|
| + const uint64_t release = c.release_count;
|
| + if (wait_fence_sync_callback_.is_null())
|
| + return error::kNoError;
|
| +
|
| + return wait_fence_sync_callback_.Run(namespace_id, command_buffer_id, release)
|
| + ? error::kNoError
|
| + : error::kDeferCommandUntilLater;
|
| +}
|
| +
|
| error::Error GLES2DecoderImpl::HandleDiscardBackbufferCHROMIUM(
|
| uint32 immediate_data_size,
|
| const void* cmd_data) {
|
|
|