diff options
author | dyen <dyen@chromium.org> | 2015-12-09 14:13:42 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-12-09 22:14:31 +0000 |
commit | 36bf34f140999029c2ddca0497755a2b0d22897a (patch) | |
tree | 53f2450f39a0c44e83bb9ad991733bac68a3ddf5 | |
parent | 82dee6e429ccf6775024a2dcfa10e745518ca566 (diff) | |
download | chromium_src-36bf34f140999029c2ddca0497755a2b0d22897a.zip chromium_src-36bf34f140999029c2ddca0497755a2b0d22897a.tar.gz chromium_src-36bf34f140999029c2ddca0497755a2b0d22897a.tar.bz2 |
Added VerifySyncTokensCHROMIUM() function to sync_point_CHROMIUM.
R=piman@chromium.org
BUG=514815
Review URL: https://codereview.chromium.org/1477993002
Cr-Commit-Position: refs/heads/master@{#364171}
23 files changed, 252 insertions, 47 deletions
diff --git a/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_sync_point.txt b/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_sync_point.txt index 1d73261..8394847 100644 --- a/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_sync_point.txt +++ b/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_sync_point.txt @@ -85,6 +85,20 @@ New Procedures and Functions The command + void VerifySyncTokensCHROMIUM(GLbyte **sync_tokens, GLsizei count) + + verifies array <sync_tokens> of length <count> and ensures that these + sync tokens have all been verified. The generated sync token did not have + to be generated from the same context but it must be from a context which + flush order guarantee is enough to guarantee order. For example, contexts + which live on the same channel may verify sync tokens for one another. + If a sync token was generated by GenUnverifiedSyncTokenCHROMIUM and the + corresponding context is unable to verify it, an INVALID_OPERATION error + is generated. Sync tokens which have already been verified are ignored, if + all sync tokens were already verified then nothing will be done. + + The command + void WaitSyncTokenCHROMIUM(const GLbyte *sync_token) causes the current context to stop submitting commands until the specified @@ -92,7 +106,7 @@ New Procedures and Functions <sync_token> is a sync token generated by GenSyncTokenCHROMIUM. If <sync_token> was generated by GenUnverifiedSyncTokenCHROMIUM and the corresponding fence sync context required more than just flush ordering - to guarantee synchronization, a INVALID_OPERATION error is generated. If + to guarantee synchronization, an INVALID_OPERATION error is generated. If <sync_token> isn't a valid sync token returned by GenSyncTokenCHROMIUM or GenUnverifiedSyncTokenCHROMIUM, the result is undefined. @@ -119,8 +133,9 @@ Errors or queued to be flushed using an ordering barrier. INVALID_OPERATION is generated if the <sync_token> parameter of - WaitSyncTokenCHROMIUM was generated using GenUnverifiedSyncTokenCHROMIUM, - but the two contexts must be synchronized with more than just flush order. + WaitSyncTokenCHROMIUM or VerifySyncTokensCHROMIUM was generated using + GenUnverifiedSyncTokenCHROMIUM, but the two contexts must be synchronized + with more than just flush order. New State @@ -137,3 +152,5 @@ Revision History 11/24/2015 Clarified that GenUnverifiedSyncTokenCHROMIUM only needs an ordering barrier and added proper error values. + + 11/25/2015 Added function VerifySyncTokensCHROMIUM. diff --git a/gpu/GLES2/gl2chromium_autogen.h b/gpu/GLES2/gl2chromium_autogen.h index f01a448..153472e 100644 --- a/gpu/GLES2/gl2chromium_autogen.h +++ b/gpu/GLES2/gl2chromium_autogen.h @@ -330,6 +330,7 @@ #define glGenSyncTokenCHROMIUM GLES2_GET_FUN(GenSyncTokenCHROMIUM) #define glGenUnverifiedSyncTokenCHROMIUM \ GLES2_GET_FUN(GenUnverifiedSyncTokenCHROMIUM) +#define glVerifySyncTokensCHROMIUM GLES2_GET_FUN(VerifySyncTokensCHROMIUM) #define glWaitSyncTokenCHROMIUM GLES2_GET_FUN(WaitSyncTokenCHROMIUM) #define glDrawBuffersEXT GLES2_GET_FUN(DrawBuffersEXT) #define glDiscardBackbufferCHROMIUM GLES2_GET_FUN(DiscardBackbufferCHROMIUM) diff --git a/gpu/GLES2/gl2extchromium.h b/gpu/GLES2/gl2extchromium.h index 8118de0..51af9dc 100644 --- a/gpu/GLES2/gl2extchromium.h +++ b/gpu/GLES2/gl2extchromium.h @@ -690,12 +690,20 @@ GL_APICALL GLuint GL_APIENTRY glInsertSyncPointCHROMIUM(); GL_APICALL GLuint64 GL_APIENTRY glInsertFenceSyncCHROMIUM(); GL_APICALL void GL_APIENTRY glGenSyncTokenCHROMIUM(GLuint64 fence_sync, GLbyte* sync_token); +GL_APICALL void GL_APIENTRY glGenUnverifiedSyncTokenCHROMIUM( + GLuint64 fence_sync, GLbyte* sync_token); +GL_APICALL void GL_APIENTRY glVerifySyncTokensCHROMIUM(GLbyte **sync_tokens, + GLsizei count); GL_APICALL void GL_APIENTRY glWaitSyncTokenCHROMIUM(const GLbyte* sync_token); #endif typedef GLuint (GL_APIENTRYP PFNGLINSERTSYNCPOINTCHROMIUMPROC) (); typedef GLuint64 (GL_APIENTRYP PFNGLINSERTFENCESYNCCHROMIUMPROC) (); typedef void (GL_APIENTRYP PFNGLGENSYNCTOKENCHROMIUMPROC) (GLuint64 fence_sync, GLbyte* sync_token); +typedef void (GL_APIENTRYP PFNGLGENUNVERIFIEDSYNCTOKENCHROMIUMPROC) ( + GLuint64 fence_sync, GLbyte* sync_token); +typedef void (GL_APIENTRYP PFNGLVERIFYSYNCTOKENSCHROMIUMPROC) ( + GLbyte **sync_tokens, GLsizei count); typedef void (GL_APIENTRYP PFNGLWAITSYNCTOKENCHROMIUM) ( const GLbyte* sync_tokens); #endif /* GL_CHROMIUM_sync_point */ diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py index d1e3531..671cf72 100755 --- a/gpu/command_buffer/build_gles2_cmd_buffer.py +++ b/gpu/command_buffer/build_gles2_cmd_buffer.py @@ -4219,6 +4219,12 @@ _FUNCTION_INFO = { 'extension': "CHROMIUM_sync_point", 'chromium': True, }, + 'VerifySyncTokensCHROMIUM' : { + 'type': 'Custom', + 'impl_func': False, + 'extension': "CHROMIUM_sync_point", + 'chromium': True, + }, 'WaitSyncTokenCHROMIUM': { 'type': 'Custom', 'impl_func': False, diff --git a/gpu/command_buffer/client/gles2_c_lib_autogen.h b/gpu/command_buffer/client/gles2_c_lib_autogen.h index 8cb59a9..b8b4bd9 100644 --- a/gpu/command_buffer/client/gles2_c_lib_autogen.h +++ b/gpu/command_buffer/client/gles2_c_lib_autogen.h @@ -1490,6 +1490,10 @@ void GL_APIENTRY GLES2GenUnverifiedSyncTokenCHROMIUM(GLuint64 fence_sync, GLbyte* sync_token) { gles2::GetGLContext()->GenUnverifiedSyncTokenCHROMIUM(fence_sync, sync_token); } +void GL_APIENTRY GLES2VerifySyncTokensCHROMIUM(GLbyte** sync_tokens, + GLsizei count) { + gles2::GetGLContext()->VerifySyncTokensCHROMIUM(sync_tokens, count); +} void GL_APIENTRY GLES2WaitSyncTokenCHROMIUM(const GLbyte* sync_token) { gles2::GetGLContext()->WaitSyncTokenCHROMIUM(sync_token); } @@ -2862,6 +2866,10 @@ extern const NameToFunc g_gles2_function_table[] = { glGenUnverifiedSyncTokenCHROMIUM), }, { + "glVerifySyncTokensCHROMIUM", + reinterpret_cast<GLES2FunctionPointer>(glVerifySyncTokensCHROMIUM), + }, + { "glWaitSyncTokenCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(glWaitSyncTokenCHROMIUM), }, diff --git a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h index b87750a..6d7fcf6 100644 --- a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h +++ b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h @@ -2790,6 +2790,16 @@ void GenUnverifiedSyncTokenCHROMIUMImmediate(GLuint64 fence_sync) { } } +void VerifySyncTokensCHROMIUMImmediate(GLsizei count) { + const uint32_t s = 0; + gles2::cmds::VerifySyncTokensCHROMIUMImmediate* c = + GetImmediateCmdSpaceTotalSize< + gles2::cmds::VerifySyncTokensCHROMIUMImmediate>(s); + if (c) { + c->Init(count); + } +} + void WaitSyncTokenCHROMIUM(GLint namespace_id, GLuint64 command_buffer_id, GLuint64 release_count) { diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc index d77fa2c..587a5db 100644 --- a/gpu/command_buffer/client/gles2_implementation.cc +++ b/gpu/command_buffer/client/gles2_implementation.cc @@ -5581,6 +5581,39 @@ void GLES2Implementation::GenUnverifiedSyncTokenCHROMIUM(GLuint64 fence_sync, memcpy(sync_token, &sync_token_data, sizeof(sync_token_data)); } +void GLES2Implementation::VerifySyncTokensCHROMIUM(GLbyte **sync_tokens, + GLsizei count) { + bool sync_tokens_verified = false; + for (GLsizei i = 0; i < count; ++i) { + if (sync_tokens[i]) { + SyncToken sync_token; + memcpy(&sync_token, sync_tokens[i], sizeof(sync_token)); + + if (!sync_token.verified_flush()) { + if (!gpu_control_->CanWaitUnverifiedSyncToken(&sync_token)) { + SetGLError(GL_INVALID_VALUE, "glVerifySyncTokensCHROMIUM", + "Cannot verify sync token using this context."); + return; + } + if (!sync_tokens_verified) { + // Insert a fence sync here and ensure it is received immediately. + // This will require a flush but simplifies things a bit because + // unverified sync tokens only need an ordering barrier. + const uint64_t release = gpu_control_->GenerateFenceSyncRelease(); + FlushHelper(); + const bool verified = gpu_control_->IsFenceSyncFlushReceived(release); + DCHECK(verified); + + sync_tokens_verified = true; + } + + sync_token.SetVerifyFlush(); + memcpy(sync_tokens[i], &sync_token, sizeof(sync_token)); + } + } + } +} + void GLES2Implementation::WaitSyncTokenCHROMIUM(const GLbyte* sync_token) { if (sync_token) { // Copy the data over before data access to ensure alignment. diff --git a/gpu/command_buffer/client/gles2_implementation_autogen.h b/gpu/command_buffer/client/gles2_implementation_autogen.h index 10ebcc3..eb1b63c 100644 --- a/gpu/command_buffer/client/gles2_implementation_autogen.h +++ b/gpu/command_buffer/client/gles2_implementation_autogen.h @@ -1035,6 +1035,8 @@ void GenSyncTokenCHROMIUM(GLuint64 fence_sync, GLbyte* sync_token) override; void GenUnverifiedSyncTokenCHROMIUM(GLuint64 fence_sync, GLbyte* sync_token) override; +void VerifySyncTokensCHROMIUM(GLbyte** sync_tokens, GLsizei count) override; + void WaitSyncTokenCHROMIUM(const GLbyte* sync_token) override; void DrawBuffersEXT(GLsizei count, const GLenum* bufs) override; diff --git a/gpu/command_buffer/client/gles2_implementation_unittest.cc b/gpu/command_buffer/client/gles2_implementation_unittest.cc index c59db58..0d6c03e 100644 --- a/gpu/command_buffer/client/gles2_implementation_unittest.cc +++ b/gpu/command_buffer/client/gles2_implementation_unittest.cc @@ -3862,6 +3862,60 @@ TEST_F(GLES2ImplementationTest, GenUnverifiedSyncTokenCHROMIUM) { EXPECT_EQ(kFenceSync, sync_token.release_count()); } +TEST_F(GLES2ImplementationTest, VerifySyncTokensCHROMIUM) { + ExpectedMemoryInfo result = + GetExpectedResultMemory(sizeof(cmds::GetError::Result)); + EXPECT_CALL(*command_buffer(), OnFlush()) + .WillRepeatedly(SetMemory(result.ptr, GLuint(GL_NO_ERROR))) + .RetiresOnSaturation(); + + const CommandBufferNamespace kNamespaceId = CommandBufferNamespace::GPU_IO; + const GLuint64 kCommandBufferId = 234u; + const GLuint64 kFenceSync = 123u; + gpu::SyncToken sync_token; + GLbyte* sync_token_datas[] = { sync_token.GetData() }; + + EXPECT_CALL(*gpu_control_, GetNamespaceID()) + .WillRepeatedly(testing::Return(kNamespaceId)); + EXPECT_CALL(*gpu_control_, GetCommandBufferID()) + .WillRepeatedly(testing::Return(kCommandBufferId)); + EXPECT_CALL(*gpu_control_, GetExtraCommandBufferData()) + .WillRepeatedly(testing::Return(0)); + + EXPECT_CALL(*gpu_control_, IsFenceSyncRelease(kFenceSync)) + .WillOnce(testing::Return(true)); + EXPECT_CALL(*gpu_control_, IsFenceSyncFlushed(kFenceSync)) + .WillOnce(testing::Return(true)); + gl_->GenUnverifiedSyncTokenCHROMIUM(kFenceSync, sync_token.GetData()); + ASSERT_TRUE(sync_token.HasData()); + ASSERT_FALSE(sync_token.verified_flush()); + + ClearCommands(); + EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(_)) + .WillOnce(testing::Return(false)); + gl_->VerifySyncTokensCHROMIUM(sync_token_datas, 1); + EXPECT_TRUE(NoCommandsWritten()); + EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), gl_->GetError()); + EXPECT_FALSE(sync_token.verified_flush()); + + ClearCommands(); + const GLuint64 kVerifyFenceSync = 234u; + EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(_)) + .WillOnce(testing::Return(true)); + EXPECT_CALL(*gpu_control_, GenerateFenceSyncRelease()) + .WillOnce(testing::Return(kVerifyFenceSync)); + EXPECT_CALL(*gpu_control_, IsFenceSyncFlushReceived(kVerifyFenceSync)) + .WillOnce(testing::Return(true)); + gl_->VerifySyncTokensCHROMIUM(sync_token_datas, 1); + EXPECT_TRUE(NoCommandsWritten()); + EXPECT_EQ(GL_NO_ERROR, CheckError()); + + EXPECT_EQ(kNamespaceId, sync_token.namespace_id()); + EXPECT_EQ(kCommandBufferId, sync_token.command_buffer_id()); + EXPECT_EQ(kFenceSync, sync_token.release_count()); + EXPECT_TRUE(sync_token.verified_flush()); +} + TEST_F(GLES2ImplementationTest, WaitSyncTokenCHROMIUM) { const CommandBufferNamespace kNamespaceId = CommandBufferNamespace::GPU_IO; const GLuint64 kCommandBufferId = 234u; diff --git a/gpu/command_buffer/client/gles2_interface_autogen.h b/gpu/command_buffer/client/gles2_interface_autogen.h index 374cb26..382a371 100644 --- a/gpu/command_buffer/client/gles2_interface_autogen.h +++ b/gpu/command_buffer/client/gles2_interface_autogen.h @@ -766,6 +766,7 @@ virtual GLuint64 InsertFenceSyncCHROMIUM() = 0; virtual void GenSyncTokenCHROMIUM(GLuint64 fence_sync, GLbyte* sync_token) = 0; virtual void GenUnverifiedSyncTokenCHROMIUM(GLuint64 fence_sync, GLbyte* sync_token) = 0; +virtual void VerifySyncTokensCHROMIUM(GLbyte** sync_tokens, GLsizei count) = 0; virtual void WaitSyncTokenCHROMIUM(const GLbyte* sync_token) = 0; virtual void DrawBuffersEXT(GLsizei count, const GLenum* bufs) = 0; virtual void DiscardBackbufferCHROMIUM() = 0; diff --git a/gpu/command_buffer/client/gles2_interface_stub_autogen.h b/gpu/command_buffer/client/gles2_interface_stub_autogen.h index 489afa2..1bfac6a 100644 --- a/gpu/command_buffer/client/gles2_interface_stub_autogen.h +++ b/gpu/command_buffer/client/gles2_interface_stub_autogen.h @@ -744,6 +744,7 @@ GLuint64 InsertFenceSyncCHROMIUM() override; void GenSyncTokenCHROMIUM(GLuint64 fence_sync, GLbyte* sync_token) override; void GenUnverifiedSyncTokenCHROMIUM(GLuint64 fence_sync, GLbyte* sync_token) override; +void VerifySyncTokensCHROMIUM(GLbyte** sync_tokens, GLsizei count) override; void WaitSyncTokenCHROMIUM(const GLbyte* sync_token) override; void DrawBuffersEXT(GLsizei count, const GLenum* bufs) override; void DiscardBackbufferCHROMIUM() override; diff --git a/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h b/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h index 148f3af..1bf1512 100644 --- a/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h +++ b/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h @@ -1017,6 +1017,8 @@ void GLES2InterfaceStub::GenSyncTokenCHROMIUM(GLuint64 /* fence_sync */, void GLES2InterfaceStub::GenUnverifiedSyncTokenCHROMIUM( GLuint64 /* fence_sync */, GLbyte* /* sync_token */) {} +void GLES2InterfaceStub::VerifySyncTokensCHROMIUM(GLbyte** /* sync_tokens */, + GLsizei /* count */) {} void GLES2InterfaceStub::WaitSyncTokenCHROMIUM(const GLbyte* /* sync_token */) { } void GLES2InterfaceStub::DrawBuffersEXT(GLsizei /* count */, diff --git a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h index 8347572..9206943 100644 --- a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h +++ b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h @@ -744,6 +744,7 @@ GLuint64 InsertFenceSyncCHROMIUM() override; void GenSyncTokenCHROMIUM(GLuint64 fence_sync, GLbyte* sync_token) override; void GenUnverifiedSyncTokenCHROMIUM(GLuint64 fence_sync, GLbyte* sync_token) override; +void VerifySyncTokensCHROMIUM(GLbyte** sync_tokens, GLsizei count) override; void WaitSyncTokenCHROMIUM(const GLbyte* sync_token) override; void DrawBuffersEXT(GLsizei count, const GLenum* bufs) override; void DiscardBackbufferCHROMIUM() override; diff --git a/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h b/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h index 5f67456..c8dea68 100644 --- a/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h +++ b/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h @@ -2174,6 +2174,12 @@ void GLES2TraceImplementation::GenUnverifiedSyncTokenCHROMIUM( gl_->GenUnverifiedSyncTokenCHROMIUM(fence_sync, sync_token); } +void GLES2TraceImplementation::VerifySyncTokensCHROMIUM(GLbyte** sync_tokens, + GLsizei count) { + TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::VerifySyncTokensCHROMIUM"); + gl_->VerifySyncTokensCHROMIUM(sync_tokens, count); +} + void GLES2TraceImplementation::WaitSyncTokenCHROMIUM(const GLbyte* sync_token) { TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::WaitSyncTokenCHROMIUM"); gl_->WaitSyncTokenCHROMIUM(sync_token); diff --git a/gpu/command_buffer/cmd_buffer_functions.txt b/gpu/command_buffer/cmd_buffer_functions.txt index 8c9baf0..ba5336a 100644 --- a/gpu/command_buffer/cmd_buffer_functions.txt +++ b/gpu/command_buffer/cmd_buffer_functions.txt @@ -309,6 +309,7 @@ GL_APICALL void GL_APIENTRY glWaitSyncPointCHROMIUM (GLuint sync_point); GL_APICALL GLuint64 GL_APIENTRY glInsertFenceSyncCHROMIUM (void); GL_APICALL void GL_APIENTRY glGenSyncTokenCHROMIUM (GLuint64 fence_sync, GLbyte* sync_token); GL_APICALL void GL_APIENTRY glGenUnverifiedSyncTokenCHROMIUM (GLuint64 fence_sync, GLbyte* sync_token); +GL_APICALL void GL_APIENTRY glVerifySyncTokensCHROMIUM (GLbyte** sync_tokens, GLsizei count); GL_APICALL void GL_APIENTRY glWaitSyncTokenCHROMIUM (const GLbyte* sync_token); GL_APICALL void GL_APIENTRY glDrawBuffersEXT (GLsizei count, const GLenum* bufs); GL_APICALL void GL_APIENTRY glDiscardBackbufferCHROMIUM (void); diff --git a/gpu/command_buffer/common/gles2_cmd_format_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_autogen.h index ec3a09b..a9aeef0 100644 --- a/gpu/command_buffer/common/gles2_cmd_format_autogen.h +++ b/gpu/command_buffer/common/gles2_cmd_format_autogen.h @@ -13601,6 +13601,44 @@ static_assert( offsetof(GenUnverifiedSyncTokenCHROMIUMImmediate, fence_sync) == 4, "offset of GenUnverifiedSyncTokenCHROMIUMImmediate fence_sync should be 4"); +struct VerifySyncTokensCHROMIUMImmediate { + typedef VerifySyncTokensCHROMIUMImmediate ValueType; + static const CommandId kCmdId = kVerifySyncTokensCHROMIUMImmediate; + static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN; + static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3); + + static uint32_t ComputeSize(uint32_t size_in_bytes) { + return static_cast<uint32_t>(sizeof(ValueType) + // NOLINT + RoundSizeToMultipleOfEntries(size_in_bytes)); + } + + void SetHeader(uint32_t size_in_bytes) { + header.SetCmdByTotalSize<ValueType>(size_in_bytes); + } + + void Init(GLsizei _count) { + uint32_t total_size = 0; // WARNING: compute correct size. + SetHeader(total_size); + count = _count; + } + + void* Set(void* cmd, GLsizei _count) { + uint32_t total_size = 0; // WARNING: compute correct size. + static_cast<ValueType*>(cmd)->Init(_count); + return NextImmediateCmdAddressTotalSize<ValueType>(cmd, total_size); + } + + gpu::CommandHeader header; + int32_t count; +}; + +static_assert(sizeof(VerifySyncTokensCHROMIUMImmediate) == 8, + "size of VerifySyncTokensCHROMIUMImmediate should be 8"); +static_assert(offsetof(VerifySyncTokensCHROMIUMImmediate, header) == 0, + "offset of VerifySyncTokensCHROMIUMImmediate header should be 0"); +static_assert(offsetof(VerifySyncTokensCHROMIUMImmediate, count) == 4, + "offset of VerifySyncTokensCHROMIUMImmediate count should be 4"); + struct WaitSyncTokenCHROMIUM { typedef WaitSyncTokenCHROMIUM ValueType; static const CommandId kCmdId = kWaitSyncTokenCHROMIUM; diff --git a/gpu/command_buffer/common/gles2_cmd_ids_autogen.h b/gpu/command_buffer/common/gles2_cmd_ids_autogen.h index 38dad79..b8f19a5 100644 --- a/gpu/command_buffer/common/gles2_cmd_ids_autogen.h +++ b/gpu/command_buffer/common/gles2_cmd_ids_autogen.h @@ -299,42 +299,43 @@ OP(InsertFenceSyncCHROMIUM) /* 540 */ \ OP(GenSyncTokenCHROMIUMImmediate) /* 541 */ \ OP(GenUnverifiedSyncTokenCHROMIUMImmediate) /* 542 */ \ - OP(WaitSyncTokenCHROMIUM) /* 543 */ \ - OP(DrawBuffersEXTImmediate) /* 544 */ \ - OP(DiscardBackbufferCHROMIUM) /* 545 */ \ - OP(ScheduleOverlayPlaneCHROMIUM) /* 546 */ \ - OP(ScheduleCALayerCHROMIUM) /* 547 */ \ - OP(CommitOverlayPlanesCHROMIUM) /* 548 */ \ - OP(SwapInterval) /* 549 */ \ - OP(FlushDriverCachesCHROMIUM) /* 550 */ \ - OP(MatrixLoadfCHROMIUMImmediate) /* 551 */ \ - OP(MatrixLoadIdentityCHROMIUM) /* 552 */ \ - OP(GenPathsCHROMIUM) /* 553 */ \ - OP(DeletePathsCHROMIUM) /* 554 */ \ - OP(IsPathCHROMIUM) /* 555 */ \ - OP(PathCommandsCHROMIUM) /* 556 */ \ - OP(PathParameterfCHROMIUM) /* 557 */ \ - OP(PathParameteriCHROMIUM) /* 558 */ \ - OP(PathStencilFuncCHROMIUM) /* 559 */ \ - OP(StencilFillPathCHROMIUM) /* 560 */ \ - OP(StencilStrokePathCHROMIUM) /* 561 */ \ - OP(CoverFillPathCHROMIUM) /* 562 */ \ - OP(CoverStrokePathCHROMIUM) /* 563 */ \ - OP(StencilThenCoverFillPathCHROMIUM) /* 564 */ \ - OP(StencilThenCoverStrokePathCHROMIUM) /* 565 */ \ - OP(StencilFillPathInstancedCHROMIUM) /* 566 */ \ - OP(StencilStrokePathInstancedCHROMIUM) /* 567 */ \ - OP(CoverFillPathInstancedCHROMIUM) /* 568 */ \ - OP(CoverStrokePathInstancedCHROMIUM) /* 569 */ \ - OP(StencilThenCoverFillPathInstancedCHROMIUM) /* 570 */ \ - OP(StencilThenCoverStrokePathInstancedCHROMIUM) /* 571 */ \ - OP(BindFragmentInputLocationCHROMIUMBucket) /* 572 */ \ - OP(ProgramPathFragmentInputGenCHROMIUM) /* 573 */ \ - OP(BlendBarrierKHR) /* 574 */ \ - OP(ApplyScreenSpaceAntialiasingCHROMIUM) /* 575 */ \ - OP(BindFragDataLocationIndexedEXTBucket) /* 576 */ \ - OP(BindFragDataLocationEXTBucket) /* 577 */ \ - OP(GetFragDataIndexEXT) /* 578 */ + OP(VerifySyncTokensCHROMIUMImmediate) /* 543 */ \ + OP(WaitSyncTokenCHROMIUM) /* 544 */ \ + OP(DrawBuffersEXTImmediate) /* 545 */ \ + OP(DiscardBackbufferCHROMIUM) /* 546 */ \ + OP(ScheduleOverlayPlaneCHROMIUM) /* 547 */ \ + OP(ScheduleCALayerCHROMIUM) /* 548 */ \ + OP(CommitOverlayPlanesCHROMIUM) /* 549 */ \ + OP(SwapInterval) /* 550 */ \ + OP(FlushDriverCachesCHROMIUM) /* 551 */ \ + OP(MatrixLoadfCHROMIUMImmediate) /* 552 */ \ + OP(MatrixLoadIdentityCHROMIUM) /* 553 */ \ + OP(GenPathsCHROMIUM) /* 554 */ \ + OP(DeletePathsCHROMIUM) /* 555 */ \ + OP(IsPathCHROMIUM) /* 556 */ \ + OP(PathCommandsCHROMIUM) /* 557 */ \ + OP(PathParameterfCHROMIUM) /* 558 */ \ + OP(PathParameteriCHROMIUM) /* 559 */ \ + OP(PathStencilFuncCHROMIUM) /* 560 */ \ + OP(StencilFillPathCHROMIUM) /* 561 */ \ + OP(StencilStrokePathCHROMIUM) /* 562 */ \ + OP(CoverFillPathCHROMIUM) /* 563 */ \ + OP(CoverStrokePathCHROMIUM) /* 564 */ \ + OP(StencilThenCoverFillPathCHROMIUM) /* 565 */ \ + OP(StencilThenCoverStrokePathCHROMIUM) /* 566 */ \ + OP(StencilFillPathInstancedCHROMIUM) /* 567 */ \ + OP(StencilStrokePathInstancedCHROMIUM) /* 568 */ \ + OP(CoverFillPathInstancedCHROMIUM) /* 569 */ \ + OP(CoverStrokePathInstancedCHROMIUM) /* 570 */ \ + OP(StencilThenCoverFillPathInstancedCHROMIUM) /* 571 */ \ + OP(StencilThenCoverStrokePathInstancedCHROMIUM) /* 572 */ \ + OP(BindFragmentInputLocationCHROMIUMBucket) /* 573 */ \ + OP(ProgramPathFragmentInputGenCHROMIUM) /* 574 */ \ + OP(BlendBarrierKHR) /* 575 */ \ + OP(ApplyScreenSpaceAntialiasingCHROMIUM) /* 576 */ \ + OP(BindFragDataLocationIndexedEXTBucket) /* 577 */ \ + OP(BindFragDataLocationEXTBucket) /* 578 */ \ + OP(GetFragDataIndexEXT) /* 579 */ enum CommandId { kStartPoint = cmd::kLastCommonId, // All GLES2 commands start after this. diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index d1235e1..e8bbe58 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc @@ -12578,6 +12578,12 @@ error::Error GLES2DecoderImpl::HandleGenUnverifiedSyncTokenCHROMIUMImmediate( return error::kUnknownCommand; } +error::Error GLES2DecoderImpl::HandleVerifySyncTokensCHROMIUMImmediate( + uint32 immediate_data_size, + const void* cmd_data) { + return error::kUnknownCommand; +} + error::Error GLES2DecoderImpl::HandleWaitSyncTokenCHROMIUM( uint32 immediate_data_size, const void* cmd_data) { diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h index e8b9eb6..5cda2e1 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h @@ -394,12 +394,4 @@ TEST_P(GLES2DecoderTest3, IsValuebufferCHROMIUMInvalidArgsBadSharedMemoryId) { kInvalidSharedMemoryOffset); EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); } - -TEST_P(GLES2DecoderTest3, SwapIntervalValidArgs) { - SpecializedSetup<cmds::SwapInterval, 0>(true); - cmds::SwapInterval cmd; - cmd.Init(1); - EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); - EXPECT_EQ(GL_NO_ERROR, GetGLError()); -} #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_3_AUTOGEN_H_ diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_4_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_4_autogen.h index 9abba52..166ced9 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_4_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_4_autogen.h @@ -12,4 +12,11 @@ #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_4_AUTOGEN_H_ #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_4_AUTOGEN_H_ +TEST_P(GLES2DecoderTest4, SwapIntervalValidArgs) { + SpecializedSetup<cmds::SwapInterval, 0>(true); + cmds::SwapInterval cmd; + cmd.Init(1); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); +} #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_4_AUTOGEN_H_ diff --git a/mojo/gpu/mojo_gles2_impl_autogen.cc b/mojo/gpu/mojo_gles2_impl_autogen.cc index 2b2538a..6380a30 100644 --- a/mojo/gpu/mojo_gles2_impl_autogen.cc +++ b/mojo/gpu/mojo_gles2_impl_autogen.cc @@ -1668,6 +1668,11 @@ void MojoGLES2Impl::GenUnverifiedSyncTokenCHROMIUM(GLuint64 fence_sync, MojoGLES2MakeCurrent(context_); glGenUnverifiedSyncTokenCHROMIUM(fence_sync, sync_token); } +void MojoGLES2Impl::VerifySyncTokensCHROMIUM(GLbyte** sync_tokens, + GLsizei count) { + MojoGLES2MakeCurrent(context_); + glVerifySyncTokensCHROMIUM(sync_tokens, count); +} void MojoGLES2Impl::WaitSyncTokenCHROMIUM(const GLbyte* sync_token) { MojoGLES2MakeCurrent(context_); glWaitSyncTokenCHROMIUM(sync_token); diff --git a/mojo/gpu/mojo_gles2_impl_autogen.h b/mojo/gpu/mojo_gles2_impl_autogen.h index c00372dd..ca855bc 100644 --- a/mojo/gpu/mojo_gles2_impl_autogen.h +++ b/mojo/gpu/mojo_gles2_impl_autogen.h @@ -769,6 +769,7 @@ class MojoGLES2Impl : public gpu::gles2::GLES2Interface { void GenSyncTokenCHROMIUM(GLuint64 fence_sync, GLbyte* sync_token) override; void GenUnverifiedSyncTokenCHROMIUM(GLuint64 fence_sync, GLbyte* sync_token) override; + void VerifySyncTokensCHROMIUM(GLbyte** sync_tokens, GLsizei count) override; void WaitSyncTokenCHROMIUM(const GLbyte* sync_token) override; void DrawBuffersEXT(GLsizei count, const GLenum* bufs) override; void DiscardBackbufferCHROMIUM() override; diff --git a/mojo/public/c/gles2/gles2_call_visitor_chromium_extension_autogen.h b/mojo/public/c/gles2/gles2_call_visitor_chromium_extension_autogen.h index c0668d3..ba6a5e9 100644 --- a/mojo/public/c/gles2/gles2_call_visitor_chromium_extension_autogen.h +++ b/mojo/public/c/gles2/gles2_call_visitor_chromium_extension_autogen.h @@ -336,6 +336,10 @@ VISIT_GL_CALL(GenUnverifiedSyncTokenCHROMIUM, void, (GLuint64 fence_sync, GLbyte* sync_token), (fence_sync, sync_token)) +VISIT_GL_CALL(VerifySyncTokensCHROMIUM, + void, + (GLbyte * *sync_tokens, GLsizei count), + (sync_tokens, count)) VISIT_GL_CALL(WaitSyncTokenCHROMIUM, void, (const GLbyte* sync_token), |