summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gpu/GLES2/gl2chromium_autogen.h2
-rwxr-xr-xgpu/command_buffer/build_gles2_cmd_buffer.py10
-rw-r--r--gpu/command_buffer/client/gles2_c_lib_autogen.h7
-rw-r--r--gpu/command_buffer/client/gles2_cmd_helper_autogen.h9
-rw-r--r--gpu/command_buffer/client/gles2_implementation.cc35
-rw-r--r--gpu/command_buffer/client/gles2_implementation_autogen.h2
-rw-r--r--gpu/command_buffer/client/gles2_implementation_unittest.cc59
-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.h1
-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/client/query_tracker.cc41
-rw-r--r--gpu/command_buffer/client/query_tracker.h17
-rw-r--r--gpu/command_buffer/cmd_buffer_functions.txt1
-rw-r--r--gpu/command_buffer/common/gles2_cmd_format_autogen.h42
-rw-r--r--gpu/command_buffer/common/gles2_cmd_format_test_autogen.h13
-rw-r--r--gpu/command_buffer/common/gles2_cmd_ids_autogen.h149
-rw-r--r--gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h2
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder.cc11
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h2
-rw-r--r--gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h2
-rw-r--r--mojo/gpu/mojo_gles2_impl_autogen.cc3
-rw-r--r--mojo/gpu/mojo_gles2_impl_autogen.h1
24 files changed, 343 insertions, 75 deletions
diff --git a/gpu/GLES2/gl2chromium_autogen.h b/gpu/GLES2/gl2chromium_autogen.h
index 2fc96aa..5ce4f26 100644
--- a/gpu/GLES2/gl2chromium_autogen.h
+++ b/gpu/GLES2/gl2chromium_autogen.h
@@ -254,6 +254,8 @@
#define glGetQueryivEXT GLES2_GET_FUN(GetQueryivEXT)
#define glGetQueryObjectuivEXT GLES2_GET_FUN(GetQueryObjectuivEXT)
#define glGetQueryObjectui64vEXT GLES2_GET_FUN(GetQueryObjectui64vEXT)
+#define glSetDisjointValueSyncCHROMIUM \
+ GLES2_GET_FUN(SetDisjointValueSyncCHROMIUM)
#define glInsertEventMarkerEXT GLES2_GET_FUN(InsertEventMarkerEXT)
#define glPushGroupMarkerEXT GLES2_GET_FUN(PushGroupMarkerEXT)
#define glPopGroupMarkerEXT GLES2_GET_FUN(PopGroupMarkerEXT)
diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py
index bb61e18..ed7a323 100755
--- a/gpu/command_buffer/build_gles2_cmd_buffer.py
+++ b/gpu/command_buffer/build_gles2_cmd_buffer.py
@@ -812,6 +812,7 @@ _NAMED_TYPE_INFO = {
'GL_DRAW_BUFFER15',
'GL_DRAW_FRAMEBUFFER_BINDING',
'GL_FRAGMENT_SHADER_DERIVATIVE_HINT',
+ 'GL_GPU_DISJOINT_EXT',
'GL_MAJOR_VERSION',
'GL_MAX_3D_TEXTURE_SIZE',
'GL_MAX_ARRAY_TEXTURE_LAYERS',
@@ -852,6 +853,7 @@ _NAMED_TYPE_INFO = {
'GL_READ_BUFFER',
'GL_READ_FRAMEBUFFER_BINDING',
'GL_SAMPLER_BINDING',
+ 'GL_TIMESTAMP_EXT',
'GL_TEXTURE_BINDING_2D_ARRAY',
'GL_TEXTURE_BINDING_3D',
'GL_TRANSFORM_FEEDBACK_BINDING',
@@ -3886,6 +3888,14 @@ _FUNCTION_INFO = {
'gl_test_func': 'glGetQueryObjectui64v',
'extension': "disjoint_timer_query_EXT",
},
+ 'SetDisjointValueSyncCHROMIUM': {
+ 'type': 'Manual',
+ 'data_transfer_methods': ['shm'],
+ 'client_test': False,
+ 'cmd_args': 'void* sync_data',
+ 'extension': True,
+ 'chromium': True,
+ },
'BindUniformLocationCHROMIUM': {
'type': 'GLchar',
'extension': True,
diff --git a/gpu/command_buffer/client/gles2_c_lib_autogen.h b/gpu/command_buffer/client/gles2_c_lib_autogen.h
index 20a745a..0a22a5a 100644
--- a/gpu/command_buffer/client/gles2_c_lib_autogen.h
+++ b/gpu/command_buffer/client/gles2_c_lib_autogen.h
@@ -1170,6 +1170,9 @@ void GL_APIENTRY GLES2GetQueryObjectui64vEXT(GLuint id,
GLuint64* params) {
gles2::GetGLContext()->GetQueryObjectui64vEXT(id, pname, params);
}
+void GL_APIENTRY GLES2SetDisjointValueSyncCHROMIUM() {
+ gles2::GetGLContext()->SetDisjointValueSyncCHROMIUM();
+}
void GL_APIENTRY GLES2InsertEventMarkerEXT(GLsizei length,
const GLchar* marker) {
gles2::GetGLContext()->InsertEventMarkerEXT(length, marker);
@@ -2469,6 +2472,10 @@ extern const NameToFunc g_gles2_function_table[] = {
reinterpret_cast<GLES2FunctionPointer>(glGetQueryObjectui64vEXT),
},
{
+ "glSetDisjointValueSyncCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glSetDisjointValueSyncCHROMIUM),
+ },
+ {
"glInsertEventMarkerEXT",
reinterpret_cast<GLES2FunctionPointer>(glInsertEventMarkerEXT),
},
diff --git a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
index e185306..46eb093 100644
--- a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
+++ b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
@@ -2283,6 +2283,15 @@ void EndTransformFeedback() {
}
}
+void SetDisjointValueSyncCHROMIUM(uint32_t sync_data_shm_id,
+ uint32_t sync_data_shm_offset) {
+ gles2::cmds::SetDisjointValueSyncCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::SetDisjointValueSyncCHROMIUM>();
+ if (c) {
+ c->Init(sync_data_shm_id, sync_data_shm_offset);
+ }
+}
+
void InsertEventMarkerEXT(GLuint bucket_id) {
gles2::cmds::InsertEventMarkerEXT* c =
GetCmdSpace<gles2::cmds::InsertEventMarkerEXT>();
diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc
index c57abb9..dcc2bb6 100644
--- a/gpu/command_buffer/client/gles2_implementation.cc
+++ b/gpu/command_buffer/client/gles2_implementation.cc
@@ -724,6 +724,9 @@ bool GLES2Implementation::GetHelper(GLenum pname, GLint* params) {
(base::TraceTicks::Now() - base::TraceTicks()).InMicroseconds()
* base::Time::kNanosecondsPerMicrosecond);
return true;
+ case GL_GPU_DISJOINT_EXT:
+ *params = static_cast<GLint>(query_tracker_->CheckAndResetDisjoint());
+ return true;
// Non-cached parameters.
case GL_ALIASED_LINE_WIDTH_RANGE:
@@ -4917,6 +4920,20 @@ void GLES2Implementation::BeginQueryEXT(GLenum target, GLuint id) {
return;
}
+ // Extra setups some targets might need.
+ switch (target) {
+ case GL_TIME_ELAPSED_EXT:
+ if (!query_tracker_->SetDisjointSync(this)) {
+ SetGLError(GL_OUT_OF_MEMORY,
+ "glBeginQueryEXT",
+ "buffer allocation failed");
+ return;
+ }
+ break;
+ default:
+ break;
+ }
+
if (query_tracker_->BeginQuery(id, target, this))
CheckGLError();
}
@@ -4965,6 +4982,20 @@ void GLES2Implementation::QueryCounterEXT(GLuint id, GLenum target) {
return;
}
+ // Extra setups some targets might need.
+ switch (target) {
+ case GL_TIMESTAMP_EXT:
+ if (!query_tracker_->SetDisjointSync(this)) {
+ SetGLError(GL_OUT_OF_MEMORY,
+ "glQueryCounterEXT",
+ "buffer allocation failed");
+ return;
+ }
+ break;
+ default:
+ break;
+ }
+
if (query_tracker_->QueryCounter(id, target, this))
CheckGLError();
}
@@ -5004,6 +5035,10 @@ void GLES2Implementation::GetQueryObjectui64vEXT(
*params = result;
}
+void GLES2Implementation::SetDisjointValueSyncCHROMIUM() {
+ query_tracker_->SetDisjointSync(this);
+}
+
void GLES2Implementation::DrawArraysInstancedANGLE(
GLenum mode, GLint first, GLsizei count, GLsizei primcount) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
diff --git a/gpu/command_buffer/client/gles2_implementation_autogen.h b/gpu/command_buffer/client/gles2_implementation_autogen.h
index 06ac948..0fe57a1 100644
--- a/gpu/command_buffer/client/gles2_implementation_autogen.h
+++ b/gpu/command_buffer/client/gles2_implementation_autogen.h
@@ -811,6 +811,8 @@ void GetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint* params) override;
void GetQueryObjectui64vEXT(GLuint id, GLenum pname, GLuint64* params) override;
+void SetDisjointValueSyncCHROMIUM() override;
+
void InsertEventMarkerEXT(GLsizei length, const GLchar* marker) override;
void PushGroupMarkerEXT(GLsizei length, const GLchar* marker) override;
diff --git a/gpu/command_buffer/client/gles2_implementation_unittest.cc b/gpu/command_buffer/client/gles2_implementation_unittest.cc
index 2580c8c..329a92e 100644
--- a/gpu/command_buffer/client/gles2_implementation_unittest.cc
+++ b/gpu/command_buffer/client/gles2_implementation_unittest.cc
@@ -544,6 +544,10 @@ class GLES2ImplementationTest : public testing::Test {
return gl_->query_tracker_->GetQuery(id);
}
+ QueryTracker* GetQueryTracker() {
+ return gl_->query_tracker_.get();
+ }
+
struct ContextInitOptions {
ContextInitOptions()
: bind_generates_resource_client(true),
@@ -2209,6 +2213,42 @@ TEST_F(GLES2ImplementationTest, GetIntegerCacheRead) {
EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), gl_->GetError());
}
+TEST_F(GLES2ImplementationTest, GetIntegerDisjointValue) {
+ ExpectedMemoryInfo mem = GetExpectedMappedMemory(sizeof(DisjointValueSync));
+ gl_->SetDisjointValueSyncCHROMIUM();
+ ASSERT_EQ(mem.id, GetQueryTracker()->DisjointCountSyncShmID());
+ ASSERT_EQ(mem.offset, GetQueryTracker()->DisjointCountSyncShmOffset());
+ DisjointValueSync* disjoint_sync =
+ reinterpret_cast<DisjointValueSync*>(mem.ptr);
+
+ ClearCommands();
+ GLint disjoint_value = -1;
+ gl_->GetIntegerv(GL_GPU_DISJOINT_EXT, &disjoint_value);
+ EXPECT_TRUE(NoCommandsWritten());
+ EXPECT_EQ(0, disjoint_value);
+
+ // After setting disjoint, it should be true.
+ disjoint_value = -1;
+ disjoint_sync->SetDisjointCount(1);
+ gl_->GetIntegerv(GL_GPU_DISJOINT_EXT, &disjoint_value);
+ EXPECT_TRUE(NoCommandsWritten());
+ EXPECT_EQ(1, disjoint_value);
+
+ // After checking disjoint, it should be false again.
+ disjoint_value = -1;
+ gl_->GetIntegerv(GL_GPU_DISJOINT_EXT, &disjoint_value);
+ EXPECT_TRUE(NoCommandsWritten());
+ EXPECT_EQ(0, disjoint_value);
+
+ // Check for errors.
+ ExpectedMemoryInfo result1 =
+ GetExpectedResultMemory(sizeof(cmds::GetError::Result));
+ EXPECT_CALL(*command_buffer(), OnFlush())
+ .WillOnce(SetMemory(result1.ptr, GLuint(GL_NO_ERROR)))
+ .RetiresOnSaturation();
+ EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), gl_->GetError());
+}
+
TEST_F(GLES2ImplementationTest, GetIntegerCacheWrite) {
struct PNameValue {
GLenum pname;
@@ -3258,6 +3298,21 @@ TEST_F(GLES2ImplementationManualInitTest, BadQueryTargets) {
EXPECT_EQ(nullptr, GetQuery(id));
}
+TEST_F(GLES2ImplementationTest, SetDisjointSync) {
+ struct SetDisjointSyncCmd {
+ cmds::SetDisjointValueSyncCHROMIUM disjoint_sync;
+ };
+ SetDisjointSyncCmd expected_disjoint_sync_cmd;
+ const void* commands = GetPut();
+ gl_->SetDisjointValueSyncCHROMIUM();
+ expected_disjoint_sync_cmd.disjoint_sync.Init(
+ GetQueryTracker()->DisjointCountSyncShmID(),
+ GetQueryTracker()->DisjointCountSyncShmOffset());
+
+ EXPECT_EQ(0, memcmp(&expected_disjoint_sync_cmd, commands,
+ sizeof(expected_disjoint_sync_cmd)));
+}
+
TEST_F(GLES2ImplementationTest, QueryCounterEXT) {
GLuint expected_ids[2] = { 1, 2 }; // These must match what's actually genned.
struct GenCmds {
@@ -3274,6 +3329,10 @@ TEST_F(GLES2ImplementationTest, QueryCounterEXT) {
GLuint id2 = ids[1];
ClearCommands();
+ // Make sure disjoint value is synchronized already.
+ gl_->SetDisjointValueSyncCHROMIUM();
+ ClearCommands();
+
// Test QueryCounterEXT fails if id = 0.
gl_->QueryCounterEXT(0, GL_TIMESTAMP_EXT);
EXPECT_TRUE(NoCommandsWritten());
diff --git a/gpu/command_buffer/client/gles2_interface_autogen.h b/gpu/command_buffer/client/gles2_interface_autogen.h
index d246617..7665d02 100644
--- a/gpu/command_buffer/client/gles2_interface_autogen.h
+++ b/gpu/command_buffer/client/gles2_interface_autogen.h
@@ -604,6 +604,7 @@ virtual void GetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint* params) = 0;
virtual void GetQueryObjectui64vEXT(GLuint id,
GLenum pname,
GLuint64* params) = 0;
+virtual void SetDisjointValueSyncCHROMIUM() = 0;
virtual void InsertEventMarkerEXT(GLsizei length, const GLchar* marker) = 0;
virtual void PushGroupMarkerEXT(GLsizei length, const GLchar* marker) = 0;
virtual void PopGroupMarkerEXT() = 0;
diff --git a/gpu/command_buffer/client/gles2_interface_stub_autogen.h b/gpu/command_buffer/client/gles2_interface_stub_autogen.h
index 4d9d9bd..076af55 100644
--- a/gpu/command_buffer/client/gles2_interface_stub_autogen.h
+++ b/gpu/command_buffer/client/gles2_interface_stub_autogen.h
@@ -585,6 +585,7 @@ void EndTransformFeedback() override;
void GetQueryivEXT(GLenum target, GLenum pname, GLint* params) override;
void GetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint* params) override;
void GetQueryObjectui64vEXT(GLuint id, GLenum pname, GLuint64* params) override;
+void SetDisjointValueSyncCHROMIUM() override;
void InsertEventMarkerEXT(GLsizei length, const GLchar* marker) override;
void PushGroupMarkerEXT(GLsizei length, const GLchar* marker) override;
void PopGroupMarkerEXT() 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 0f62e31..61ab8a1 100644
--- a/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h
+++ b/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h
@@ -793,6 +793,7 @@ void GLES2InterfaceStub::GetQueryObjectuivEXT(GLuint /* id */,
void GLES2InterfaceStub::GetQueryObjectui64vEXT(GLuint /* id */,
GLenum /* pname */,
GLuint64* /* params */) {}
+void GLES2InterfaceStub::SetDisjointValueSyncCHROMIUM() {}
void GLES2InterfaceStub::InsertEventMarkerEXT(GLsizei /* length */,
const GLchar* /* marker */) {}
void GLES2InterfaceStub::PushGroupMarkerEXT(GLsizei /* length */,
diff --git a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
index a94ac76..0156c84 100644
--- a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
+++ b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
@@ -585,6 +585,7 @@ void EndTransformFeedback() override;
void GetQueryivEXT(GLenum target, GLenum pname, GLint* params) override;
void GetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint* params) override;
void GetQueryObjectui64vEXT(GLuint id, GLenum pname, GLuint64* params) override;
+void SetDisjointValueSyncCHROMIUM() override;
void InsertEventMarkerEXT(GLsizei length, const GLchar* marker) override;
void PushGroupMarkerEXT(GLsizei length, const GLchar* marker) override;
void PopGroupMarkerEXT() 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 94378c7..99c17ba 100644
--- a/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h
+++ b/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h
@@ -1700,6 +1700,12 @@ void GLES2TraceImplementation::GetQueryObjectui64vEXT(GLuint id,
gl_->GetQueryObjectui64vEXT(id, pname, params);
}
+void GLES2TraceImplementation::SetDisjointValueSyncCHROMIUM() {
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu",
+ "GLES2Trace::SetDisjointValueSyncCHROMIUM");
+ gl_->SetDisjointValueSyncCHROMIUM();
+}
+
void GLES2TraceImplementation::InsertEventMarkerEXT(GLsizei length,
const GLchar* marker) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::InsertEventMarkerEXT");
diff --git a/gpu/command_buffer/client/query_tracker.cc b/gpu/command_buffer/client/query_tracker.cc
index c85c6bb..a258f93 100644
--- a/gpu/command_buffer/client/query_tracker.cc
+++ b/gpu/command_buffer/client/query_tracker.cc
@@ -214,7 +214,12 @@ uint64 QueryTracker::Query::GetResult() const {
}
QueryTracker::QueryTracker(MappedMemoryManager* manager)
- : query_sync_manager_(manager) {
+ : query_sync_manager_(manager),
+ mapped_memory_(manager),
+ disjoint_count_sync_shm_id_(-1),
+ disjoint_count_sync_shm_offset_(0),
+ disjoint_count_sync_(nullptr),
+ local_disjoint_count_(0) {
}
QueryTracker::~QueryTracker() {
@@ -226,6 +231,10 @@ QueryTracker::~QueryTracker() {
delete removed_queries_.front();
removed_queries_.pop_front();
}
+ if (disjoint_count_sync_) {
+ mapped_memory_->Free(disjoint_count_sync_);
+ disjoint_count_sync_ = nullptr;
+ }
}
QueryTracker::Query* QueryTracker::CreateQuery(GLuint id, GLenum target) {
@@ -354,5 +363,35 @@ bool QueryTracker::QueryCounter(GLuint id, GLenum target,
return true;
}
+bool QueryTracker::SetDisjointSync(GLES2Implementation* gl) {
+ if (!disjoint_count_sync_) {
+ // Allocate memory for disjoint value sync.
+ int32_t shm_id = -1;
+ uint32_t shm_offset;
+ void* mem = mapped_memory_->Alloc(sizeof(*disjoint_count_sync_),
+ &shm_id,
+ &shm_offset);
+ if (mem) {
+ disjoint_count_sync_shm_id_ = shm_id;
+ disjoint_count_sync_shm_offset_ = shm_offset;
+ disjoint_count_sync_ = static_cast<DisjointValueSync*>(mem);
+ disjoint_count_sync_->Reset();
+ gl->helper()->SetDisjointValueSyncCHROMIUM(shm_id, shm_offset);
+ }
+ }
+ return disjoint_count_sync_ != nullptr;
+}
+
+bool QueryTracker::CheckAndResetDisjoint() {
+ if (disjoint_count_sync_) {
+ const uint32_t disjoint_count = disjoint_count_sync_->GetDisjointCount();
+ if (local_disjoint_count_ != disjoint_count) {
+ local_disjoint_count_ = disjoint_count;
+ return true;
+ }
+ }
+ return false;
+}
+
} // namespace gles2
} // namespace gpu
diff --git a/gpu/command_buffer/client/query_tracker.h b/gpu/command_buffer/client/query_tracker.h
index 45f5681..986b9f2 100644
--- a/gpu/command_buffer/client/query_tracker.h
+++ b/gpu/command_buffer/client/query_tracker.h
@@ -169,6 +169,16 @@ class GLES2_IMPL_EXPORT QueryTracker {
bool BeginQuery(GLuint id, GLenum target, GLES2Implementation* gl);
bool EndQuery(GLenum target, GLES2Implementation* gl);
bool QueryCounter(GLuint id, GLenum target, GLES2Implementation* gl);
+ bool SetDisjointSync(GLES2Implementation* gl);
+ bool CheckAndResetDisjoint();
+
+ int32_t DisjointCountSyncShmID() const {
+ return disjoint_count_sync_shm_id_;
+ }
+
+ uint32_t DisjointCountSyncShmOffset() const {
+ return disjoint_count_sync_shm_offset_;
+ }
private:
typedef base::hash_map<GLuint, Query*> QueryIdMap;
@@ -180,6 +190,13 @@ class GLES2_IMPL_EXPORT QueryTracker {
QueryList removed_queries_;
QuerySyncManager query_sync_manager_;
+ // The shared memory used for synchronizing timer disjoint values.
+ MappedMemoryManager* mapped_memory_;
+ int32_t disjoint_count_sync_shm_id_;
+ uint32_t disjoint_count_sync_shm_offset_;
+ DisjointValueSync* disjoint_count_sync_;
+ uint32_t local_disjoint_count_;
+
DISALLOW_COPY_AND_ASSIGN(QueryTracker);
};
diff --git a/gpu/command_buffer/cmd_buffer_functions.txt b/gpu/command_buffer/cmd_buffer_functions.txt
index 27e8d06..370d049 100644
--- a/gpu/command_buffer/cmd_buffer_functions.txt
+++ b/gpu/command_buffer/cmd_buffer_functions.txt
@@ -241,6 +241,7 @@ GL_APICALL void GL_APIENTRY glEndTransformFeedback (void);
GL_APICALL void GL_APIENTRY glGetQueryivEXT (GLenumQueryTarget target, GLenumQueryParameter pname, GLint* params);
GL_APICALL void GL_APIENTRY glGetQueryObjectuivEXT (GLidQuery id, GLenumQueryObjectParameter pname, GLuint* params);
GL_APICALL void GL_APIENTRY glGetQueryObjectui64vEXT (GLidQuery id, GLenumQueryObjectParameter pname, GLuint64* params);
+GL_APICALL void GL_APIENTRY glSetDisjointValueSyncCHROMIUM (void);
GL_APICALL void GL_APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar* marker);
GL_APICALL void GL_APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar* marker);
GL_APICALL void GL_APIENTRY glPopGroupMarkerEXT (void);
diff --git a/gpu/command_buffer/common/gles2_cmd_format_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_autogen.h
index a316183..4b76c2ef 100644
--- a/gpu/command_buffer/common/gles2_cmd_format_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_format_autogen.h
@@ -11319,6 +11319,48 @@ static_assert(sizeof(EndTransformFeedback) == 4,
static_assert(offsetof(EndTransformFeedback, header) == 0,
"offset of EndTransformFeedback header should be 0");
+struct SetDisjointValueSyncCHROMIUM {
+ typedef SetDisjointValueSyncCHROMIUM ValueType;
+ static const CommandId kCmdId = kSetDisjointValueSyncCHROMIUM;
+ static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
+
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
+ }
+
+ void SetHeader() { header.SetCmd<ValueType>(); }
+
+ void Init(uint32_t _sync_data_shm_id, uint32_t _sync_data_shm_offset) {
+ SetHeader();
+ sync_data_shm_id = _sync_data_shm_id;
+ sync_data_shm_offset = _sync_data_shm_offset;
+ }
+
+ void* Set(void* cmd,
+ uint32_t _sync_data_shm_id,
+ uint32_t _sync_data_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_sync_data_shm_id, _sync_data_shm_offset);
+ return NextCmdAddress<ValueType>(cmd);
+ }
+
+ gpu::CommandHeader header;
+ uint32_t sync_data_shm_id;
+ uint32_t sync_data_shm_offset;
+};
+
+static_assert(sizeof(SetDisjointValueSyncCHROMIUM) == 12,
+ "size of SetDisjointValueSyncCHROMIUM should be 12");
+static_assert(offsetof(SetDisjointValueSyncCHROMIUM, header) == 0,
+ "offset of SetDisjointValueSyncCHROMIUM header should be 0");
+static_assert(
+ offsetof(SetDisjointValueSyncCHROMIUM, sync_data_shm_id) == 4,
+ "offset of SetDisjointValueSyncCHROMIUM sync_data_shm_id should be 4");
+static_assert(
+ offsetof(SetDisjointValueSyncCHROMIUM, sync_data_shm_offset) == 8,
+ "offset of SetDisjointValueSyncCHROMIUM sync_data_shm_offset should be 8");
+
struct InsertEventMarkerEXT {
typedef InsertEventMarkerEXT ValueType;
static const CommandId kCmdId = kInsertEventMarkerEXT;
diff --git a/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h
index 7166d5a..e362eab 100644
--- a/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h
@@ -3862,6 +3862,19 @@ TEST_F(GLES2FormatTest, EndTransformFeedback) {
CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
+TEST_F(GLES2FormatTest, SetDisjointValueSyncCHROMIUM) {
+ cmds::SetDisjointValueSyncCHROMIUM& cmd =
+ *GetBufferAs<cmds::SetDisjointValueSyncCHROMIUM>();
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<uint32_t>(11), static_cast<uint32_t>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::SetDisjointValueSyncCHROMIUM::kCmdId),
+ cmd.header.command);
+ EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
+ EXPECT_EQ(static_cast<uint32_t>(11), cmd.sync_data_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.sync_data_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
+}
+
TEST_F(GLES2FormatTest, InsertEventMarkerEXT) {
cmds::InsertEventMarkerEXT& cmd = *GetBufferAs<cmds::InsertEventMarkerEXT>();
void* next_cmd = cmd.Set(&cmd, static_cast<GLuint>(11));
diff --git a/gpu/command_buffer/common/gles2_cmd_ids_autogen.h b/gpu/command_buffer/common/gles2_cmd_ids_autogen.h
index 9a956ec..448dc8e 100644
--- a/gpu/command_buffer/common/gles2_cmd_ids_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_ids_autogen.h
@@ -245,80 +245,81 @@
OP(BeginTransformFeedback) /* 486 */ \
OP(EndQueryEXT) /* 487 */ \
OP(EndTransformFeedback) /* 488 */ \
- OP(InsertEventMarkerEXT) /* 489 */ \
- OP(PushGroupMarkerEXT) /* 490 */ \
- OP(PopGroupMarkerEXT) /* 491 */ \
- OP(GenVertexArraysOESImmediate) /* 492 */ \
- OP(DeleteVertexArraysOESImmediate) /* 493 */ \
- OP(IsVertexArrayOES) /* 494 */ \
- OP(BindVertexArrayOES) /* 495 */ \
- OP(SwapBuffers) /* 496 */ \
- OP(GetMaxValueInBufferCHROMIUM) /* 497 */ \
- OP(EnableFeatureCHROMIUM) /* 498 */ \
- OP(MapBufferRange) /* 499 */ \
- OP(UnmapBuffer) /* 500 */ \
- OP(ResizeCHROMIUM) /* 501 */ \
- OP(GetRequestableExtensionsCHROMIUM) /* 502 */ \
- OP(RequestExtensionCHROMIUM) /* 503 */ \
- OP(GetProgramInfoCHROMIUM) /* 504 */ \
- OP(GetUniformBlocksCHROMIUM) /* 505 */ \
- OP(GetTransformFeedbackVaryingsCHROMIUM) /* 506 */ \
- OP(GetUniformsES3CHROMIUM) /* 507 */ \
- OP(GetTranslatedShaderSourceANGLE) /* 508 */ \
- OP(PostSubBufferCHROMIUM) /* 509 */ \
- OP(TexImageIOSurface2DCHROMIUM) /* 510 */ \
- OP(CopyTextureCHROMIUM) /* 511 */ \
- OP(CopySubTextureCHROMIUM) /* 512 */ \
- OP(CompressedCopyTextureCHROMIUM) /* 513 */ \
- OP(DrawArraysInstancedANGLE) /* 514 */ \
- OP(DrawElementsInstancedANGLE) /* 515 */ \
- OP(VertexAttribDivisorANGLE) /* 516 */ \
- OP(GenMailboxCHROMIUM) /* 517 */ \
- OP(ProduceTextureCHROMIUMImmediate) /* 518 */ \
- OP(ProduceTextureDirectCHROMIUMImmediate) /* 519 */ \
- OP(ConsumeTextureCHROMIUMImmediate) /* 520 */ \
- OP(CreateAndConsumeTextureCHROMIUMImmediate) /* 521 */ \
- OP(BindUniformLocationCHROMIUMBucket) /* 522 */ \
- OP(GenValuebuffersCHROMIUMImmediate) /* 523 */ \
- OP(DeleteValuebuffersCHROMIUMImmediate) /* 524 */ \
- OP(IsValuebufferCHROMIUM) /* 525 */ \
- OP(BindValuebufferCHROMIUM) /* 526 */ \
- OP(SubscribeValueCHROMIUM) /* 527 */ \
- OP(PopulateSubscribedValuesCHROMIUM) /* 528 */ \
- OP(UniformValuebufferCHROMIUM) /* 529 */ \
- OP(BindTexImage2DCHROMIUM) /* 530 */ \
- OP(ReleaseTexImage2DCHROMIUM) /* 531 */ \
- OP(TraceBeginCHROMIUM) /* 532 */ \
- OP(TraceEndCHROMIUM) /* 533 */ \
- OP(AsyncTexSubImage2DCHROMIUM) /* 534 */ \
- OP(AsyncTexImage2DCHROMIUM) /* 535 */ \
- OP(WaitAsyncTexImage2DCHROMIUM) /* 536 */ \
- OP(WaitAllAsyncTexImage2DCHROMIUM) /* 537 */ \
- OP(DiscardFramebufferEXTImmediate) /* 538 */ \
- OP(LoseContextCHROMIUM) /* 539 */ \
- OP(InsertSyncPointCHROMIUM) /* 540 */ \
- OP(WaitSyncPointCHROMIUM) /* 541 */ \
- OP(DrawBuffersEXTImmediate) /* 542 */ \
- OP(DiscardBackbufferCHROMIUM) /* 543 */ \
- OP(ScheduleOverlayPlaneCHROMIUM) /* 544 */ \
- OP(SwapInterval) /* 545 */ \
- OP(FlushDriverCachesCHROMIUM) /* 546 */ \
- OP(MatrixLoadfCHROMIUMImmediate) /* 547 */ \
- OP(MatrixLoadIdentityCHROMIUM) /* 548 */ \
- OP(GenPathsCHROMIUM) /* 549 */ \
- OP(DeletePathsCHROMIUM) /* 550 */ \
- OP(IsPathCHROMIUM) /* 551 */ \
- OP(PathCommandsCHROMIUM) /* 552 */ \
- OP(PathParameterfCHROMIUM) /* 553 */ \
- OP(PathParameteriCHROMIUM) /* 554 */ \
- OP(PathStencilFuncCHROMIUM) /* 555 */ \
- OP(StencilFillPathCHROMIUM) /* 556 */ \
- OP(StencilStrokePathCHROMIUM) /* 557 */ \
- OP(CoverFillPathCHROMIUM) /* 558 */ \
- OP(CoverStrokePathCHROMIUM) /* 559 */ \
- OP(StencilThenCoverFillPathCHROMIUM) /* 560 */ \
- OP(StencilThenCoverStrokePathCHROMIUM) /* 561 */ \
- OP(BlendBarrierKHR) /* 562 */
+ OP(SetDisjointValueSyncCHROMIUM) /* 489 */ \
+ OP(InsertEventMarkerEXT) /* 490 */ \
+ OP(PushGroupMarkerEXT) /* 491 */ \
+ OP(PopGroupMarkerEXT) /* 492 */ \
+ OP(GenVertexArraysOESImmediate) /* 493 */ \
+ OP(DeleteVertexArraysOESImmediate) /* 494 */ \
+ OP(IsVertexArrayOES) /* 495 */ \
+ OP(BindVertexArrayOES) /* 496 */ \
+ OP(SwapBuffers) /* 497 */ \
+ OP(GetMaxValueInBufferCHROMIUM) /* 498 */ \
+ OP(EnableFeatureCHROMIUM) /* 499 */ \
+ OP(MapBufferRange) /* 500 */ \
+ OP(UnmapBuffer) /* 501 */ \
+ OP(ResizeCHROMIUM) /* 502 */ \
+ OP(GetRequestableExtensionsCHROMIUM) /* 503 */ \
+ OP(RequestExtensionCHROMIUM) /* 504 */ \
+ OP(GetProgramInfoCHROMIUM) /* 505 */ \
+ OP(GetUniformBlocksCHROMIUM) /* 506 */ \
+ OP(GetTransformFeedbackVaryingsCHROMIUM) /* 507 */ \
+ OP(GetUniformsES3CHROMIUM) /* 508 */ \
+ OP(GetTranslatedShaderSourceANGLE) /* 509 */ \
+ OP(PostSubBufferCHROMIUM) /* 510 */ \
+ OP(TexImageIOSurface2DCHROMIUM) /* 511 */ \
+ OP(CopyTextureCHROMIUM) /* 512 */ \
+ OP(CopySubTextureCHROMIUM) /* 513 */ \
+ OP(CompressedCopyTextureCHROMIUM) /* 514 */ \
+ OP(DrawArraysInstancedANGLE) /* 515 */ \
+ OP(DrawElementsInstancedANGLE) /* 516 */ \
+ OP(VertexAttribDivisorANGLE) /* 517 */ \
+ OP(GenMailboxCHROMIUM) /* 518 */ \
+ OP(ProduceTextureCHROMIUMImmediate) /* 519 */ \
+ OP(ProduceTextureDirectCHROMIUMImmediate) /* 520 */ \
+ OP(ConsumeTextureCHROMIUMImmediate) /* 521 */ \
+ OP(CreateAndConsumeTextureCHROMIUMImmediate) /* 522 */ \
+ OP(BindUniformLocationCHROMIUMBucket) /* 523 */ \
+ OP(GenValuebuffersCHROMIUMImmediate) /* 524 */ \
+ OP(DeleteValuebuffersCHROMIUMImmediate) /* 525 */ \
+ OP(IsValuebufferCHROMIUM) /* 526 */ \
+ OP(BindValuebufferCHROMIUM) /* 527 */ \
+ OP(SubscribeValueCHROMIUM) /* 528 */ \
+ OP(PopulateSubscribedValuesCHROMIUM) /* 529 */ \
+ OP(UniformValuebufferCHROMIUM) /* 530 */ \
+ OP(BindTexImage2DCHROMIUM) /* 531 */ \
+ OP(ReleaseTexImage2DCHROMIUM) /* 532 */ \
+ OP(TraceBeginCHROMIUM) /* 533 */ \
+ OP(TraceEndCHROMIUM) /* 534 */ \
+ OP(AsyncTexSubImage2DCHROMIUM) /* 535 */ \
+ OP(AsyncTexImage2DCHROMIUM) /* 536 */ \
+ OP(WaitAsyncTexImage2DCHROMIUM) /* 537 */ \
+ OP(WaitAllAsyncTexImage2DCHROMIUM) /* 538 */ \
+ OP(DiscardFramebufferEXTImmediate) /* 539 */ \
+ OP(LoseContextCHROMIUM) /* 540 */ \
+ OP(InsertSyncPointCHROMIUM) /* 541 */ \
+ OP(WaitSyncPointCHROMIUM) /* 542 */ \
+ OP(DrawBuffersEXTImmediate) /* 543 */ \
+ OP(DiscardBackbufferCHROMIUM) /* 544 */ \
+ OP(ScheduleOverlayPlaneCHROMIUM) /* 545 */ \
+ OP(SwapInterval) /* 546 */ \
+ OP(FlushDriverCachesCHROMIUM) /* 547 */ \
+ OP(MatrixLoadfCHROMIUMImmediate) /* 548 */ \
+ OP(MatrixLoadIdentityCHROMIUM) /* 549 */ \
+ OP(GenPathsCHROMIUM) /* 550 */ \
+ OP(DeletePathsCHROMIUM) /* 551 */ \
+ OP(IsPathCHROMIUM) /* 552 */ \
+ OP(PathCommandsCHROMIUM) /* 553 */ \
+ OP(PathParameterfCHROMIUM) /* 554 */ \
+ OP(PathParameteriCHROMIUM) /* 555 */ \
+ OP(PathStencilFuncCHROMIUM) /* 556 */ \
+ OP(StencilFillPathCHROMIUM) /* 557 */ \
+ OP(StencilStrokePathCHROMIUM) /* 558 */ \
+ OP(CoverFillPathCHROMIUM) /* 559 */ \
+ OP(CoverStrokePathCHROMIUM) /* 560 */ \
+ OP(StencilThenCoverFillPathCHROMIUM) /* 561 */ \
+ OP(StencilThenCoverStrokePathCHROMIUM) /* 562 */ \
+ OP(BlendBarrierKHR) /* 563 */
enum CommandId {
kStartPoint = cmd::kLastCommonId, // All GLES2 commands start after this.
diff --git a/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h b/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h
index aa7d230..0196461 100644
--- a/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h
@@ -3801,6 +3801,7 @@ std::string GLES2Util::GetStringGLState(uint32_t value) {
{GL_DRAW_FRAMEBUFFER_BINDING, "GL_DRAW_FRAMEBUFFER_BINDING"},
{GL_FRAGMENT_SHADER_DERIVATIVE_HINT,
"GL_FRAGMENT_SHADER_DERIVATIVE_HINT"},
+ {GL_GPU_DISJOINT_EXT, "GL_GPU_DISJOINT_EXT"},
{GL_MAJOR_VERSION, "GL_MAJOR_VERSION"},
{GL_MAX_3D_TEXTURE_SIZE, "GL_MAX_3D_TEXTURE_SIZE"},
{GL_MAX_ARRAY_TEXTURE_LAYERS, "GL_MAX_ARRAY_TEXTURE_LAYERS"},
@@ -3847,6 +3848,7 @@ std::string GLES2Util::GetStringGLState(uint32_t value) {
{GL_READ_BUFFER, "GL_READ_BUFFER"},
{GL_READ_FRAMEBUFFER_BINDING, "GL_READ_FRAMEBUFFER_BINDING"},
{GL_SAMPLER_BINDING, "GL_SAMPLER_BINDING"},
+ {GL_TIMESTAMP_EXT, "GL_TIMESTAMP_EXT"},
{GL_TEXTURE_BINDING_2D_ARRAY, "GL_TEXTURE_BINDING_2D_ARRAY"},
{GL_TEXTURE_BINDING_3D, "GL_TEXTURE_BINDING_3D"},
{GL_TRANSFORM_FEEDBACK_BINDING, "GL_TRANSFORM_FEEDBACK_BINDING"},
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 2de670a..1f72f24 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -11890,6 +11890,17 @@ error::Error GLES2DecoderImpl::HandleQueryCounterEXT(uint32 immediate_data_size,
return error::kNoError;
}
+error::Error GLES2DecoderImpl::HandleSetDisjointValueSyncCHROMIUM(
+ uint32 immediate_data_size, const void* cmd_data) {
+ const gles2::cmds::SetDisjointValueSyncCHROMIUM& c =
+ *static_cast<const gles2::cmds::SetDisjointValueSyncCHROMIUM*>(cmd_data);
+ int32 sync_shm_id = static_cast<int32>(c.sync_data_shm_id);
+ uint32 sync_shm_offset = static_cast<uint32>(c.sync_data_shm_offset);
+
+ query_manager_->SetDisjointSync(sync_shm_id, sync_shm_offset);
+ return error::kNoError;
+}
+
bool GLES2DecoderImpl::GenVertexArraysOESHelper(
GLsizei n, const GLuint* client_ids) {
for (GLsizei ii = 0; ii < n; ++ii) {
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 9a92d60..997d425 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
@@ -371,6 +371,8 @@ TEST_P(GLES2DecoderTest3, EndTransformFeedbackValidArgs) {
decoder_->set_unsafe_es3_apis_enabled(false);
EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
}
+// TODO(gman): SetDisjointValueSyncCHROMIUM
+
// TODO(gman): InsertEventMarkerEXT
// TODO(gman): PushGroupMarkerEXT
diff --git a/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h b/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h
index 3b06b56..958e67a 100644
--- a/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h
+++ b/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h
@@ -277,6 +277,7 @@ static const GLenum valid_g_l_state_table_es3[] = {
GL_DRAW_BUFFER15,
GL_DRAW_FRAMEBUFFER_BINDING,
GL_FRAGMENT_SHADER_DERIVATIVE_HINT,
+ GL_GPU_DISJOINT_EXT,
GL_MAJOR_VERSION,
GL_MAX_3D_TEXTURE_SIZE,
GL_MAX_ARRAY_TEXTURE_LAYERS,
@@ -317,6 +318,7 @@ static const GLenum valid_g_l_state_table_es3[] = {
GL_READ_BUFFER,
GL_READ_FRAMEBUFFER_BINDING,
GL_SAMPLER_BINDING,
+ GL_TIMESTAMP_EXT,
GL_TEXTURE_BINDING_2D_ARRAY,
GL_TEXTURE_BINDING_3D,
GL_TRANSFORM_FEEDBACK_BINDING,
diff --git a/mojo/gpu/mojo_gles2_impl_autogen.cc b/mojo/gpu/mojo_gles2_impl_autogen.cc
index 8f1b9d0c..a61befb 100644
--- a/mojo/gpu/mojo_gles2_impl_autogen.cc
+++ b/mojo/gpu/mojo_gles2_impl_autogen.cc
@@ -1296,6 +1296,9 @@ void MojoGLES2Impl::GetQueryObjectui64vEXT(GLuint id,
GLuint64* params) {
NOTREACHED() << "Unimplemented GetQueryObjectui64vEXT.";
}
+void MojoGLES2Impl::SetDisjointValueSyncCHROMIUM() {
+ NOTREACHED() << "Unimplemented SetDisjointValueSyncCHROMIUM.";
+}
void MojoGLES2Impl::InsertEventMarkerEXT(GLsizei length, const GLchar* marker) {
NOTREACHED() << "Unimplemented InsertEventMarkerEXT.";
}
diff --git a/mojo/gpu/mojo_gles2_impl_autogen.h b/mojo/gpu/mojo_gles2_impl_autogen.h
index 13690f7..074b144 100644
--- a/mojo/gpu/mojo_gles2_impl_autogen.h
+++ b/mojo/gpu/mojo_gles2_impl_autogen.h
@@ -609,6 +609,7 @@ class MojoGLES2Impl : public gpu::gles2::GLES2Interface {
void GetQueryObjectui64vEXT(GLuint id,
GLenum pname,
GLuint64* params) override;
+ void SetDisjointValueSyncCHROMIUM() override;
void InsertEventMarkerEXT(GLsizei length, const GLchar* marker) override;
void PushGroupMarkerEXT(GLsizei length, const GLchar* marker) override;
void PopGroupMarkerEXT() override;