summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordyen <dyen@chromium.org>2015-12-09 14:13:42 -0800
committerCommit bot <commit-bot@chromium.org>2015-12-09 22:14:31 +0000
commit36bf34f140999029c2ddca0497755a2b0d22897a (patch)
tree53f2450f39a0c44e83bb9ad991733bac68a3ddf5
parent82dee6e429ccf6775024a2dcfa10e745518ca566 (diff)
downloadchromium_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}
-rw-r--r--gpu/GLES2/extensions/CHROMIUM/CHROMIUM_sync_point.txt23
-rw-r--r--gpu/GLES2/gl2chromium_autogen.h1
-rw-r--r--gpu/GLES2/gl2extchromium.h8
-rwxr-xr-xgpu/command_buffer/build_gles2_cmd_buffer.py6
-rw-r--r--gpu/command_buffer/client/gles2_c_lib_autogen.h8
-rw-r--r--gpu/command_buffer/client/gles2_cmd_helper_autogen.h10
-rw-r--r--gpu/command_buffer/client/gles2_implementation.cc33
-rw-r--r--gpu/command_buffer/client/gles2_implementation_autogen.h2
-rw-r--r--gpu/command_buffer/client/gles2_implementation_unittest.cc54
-rw-r--r--gpu/command_buffer/client/gles2_interface_autogen.h1
-rw-r--r--gpu/command_buffer/client/gles2_interface_stub_autogen.h1
-rw-r--r--gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h2
-rw-r--r--gpu/command_buffer/client/gles2_trace_implementation_autogen.h1
-rw-r--r--gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h6
-rw-r--r--gpu/command_buffer/cmd_buffer_functions.txt1
-rw-r--r--gpu/command_buffer/common/gles2_cmd_format_autogen.h38
-rw-r--r--gpu/command_buffer/common/gles2_cmd_ids_autogen.h73
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder.cc6
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h8
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder_unittest_4_autogen.h7
-rw-r--r--mojo/gpu/mojo_gles2_impl_autogen.cc5
-rw-r--r--mojo/gpu/mojo_gles2_impl_autogen.h1
-rw-r--r--mojo/public/c/gles2/gles2_call_visitor_chromium_extension_autogen.h4
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),