Skip to content

Commit

Permalink
Add ES3 commands GetVertexAttribI{u}iv to GPU command buffer.
Browse files Browse the repository at this point in the history
BUG=429053
TEST=gpu_unittests
R=piman@chromium.org

Review URL: https://codereview.chromium.org/1136713003

Cr-Commit-Position: refs/heads/master@{#329892}
  • Loading branch information
zhenyao authored and Commit bot committed May 14, 2015
1 parent 55c68a9 commit 5ee097e
Show file tree
Hide file tree
Showing 33 changed files with 1,029 additions and 271 deletions.
1 change: 1 addition & 0 deletions gpu/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@ test("gpu_unittests") {
"command_buffer/service/command_buffer_service_unittest.cc",
"command_buffer/service/common_decoder_unittest.cc",
"command_buffer/service/context_group_unittest.cc",
"command_buffer/service/context_state_unittest.cc",
"command_buffer/service/feature_info_unittest.cc",
"command_buffer/service/framebuffer_manager_unittest.cc",
"command_buffer/service/gl_context_mock.cc",
Expand Down
2 changes: 2 additions & 0 deletions gpu/GLES2/gl2chromium_autogen.h
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,8 @@
#define glGetUniformLocation GLES2_GET_FUN(GetUniformLocation)
#define glGetVertexAttribfv GLES2_GET_FUN(GetVertexAttribfv)
#define glGetVertexAttribiv GLES2_GET_FUN(GetVertexAttribiv)
#define glGetVertexAttribIiv GLES2_GET_FUN(GetVertexAttribIiv)
#define glGetVertexAttribIuiv GLES2_GET_FUN(GetVertexAttribIuiv)
#define glGetVertexAttribPointerv GLES2_GET_FUN(GetVertexAttribPointerv)
#define glHint GLES2_GET_FUN(Hint)
#define glInvalidateFramebuffer GLES2_GET_FUN(InvalidateFramebuffer)
Expand Down
18 changes: 18 additions & 0 deletions gpu/command_buffer/build_gles2_cmd_buffer.py
Original file line number Diff line number Diff line change
Expand Up @@ -2918,6 +2918,24 @@
'expectation': False,
'client_test': False,
},
'GetVertexAttribIiv': {
'type': 'GETn',
'result': ['SizedResult<GLint>'],
'impl_decl': False,
'decoder_func': 'DoGetVertexAttribIiv',
'expectation': False,
'client_test': False,
'unsafe': True,
},
'GetVertexAttribIuiv': {
'type': 'GETn',
'result': ['SizedResult<GLuint>'],
'impl_decl': False,
'decoder_func': 'DoGetVertexAttribIuiv',
'expectation': False,
'client_test': False,
'unsafe': True,
},
'GetVertexAttribPointerv': {
'type': 'Custom',
'data_transfer_methods': ['shm'],
Expand Down
14 changes: 14 additions & 0 deletions gpu/command_buffer/client/gles2_c_lib_autogen.h
Original file line number Diff line number Diff line change
Expand Up @@ -546,6 +546,12 @@ void GLES2GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params) {
void GLES2GetVertexAttribiv(GLuint index, GLenum pname, GLint* params) {
gles2::GetGLContext()->GetVertexAttribiv(index, pname, params);
}
void GLES2GetVertexAttribIiv(GLuint index, GLenum pname, GLint* params) {
gles2::GetGLContext()->GetVertexAttribIiv(index, pname, params);
}
void GLES2GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params) {
gles2::GetGLContext()->GetVertexAttribIuiv(index, pname, params);
}
void GLES2GetVertexAttribPointerv(GLuint index, GLenum pname, void** pointer) {
gles2::GetGLContext()->GetVertexAttribPointerv(index, pname, pointer);
}
Expand Down Expand Up @@ -1851,6 +1857,14 @@ extern const NameToFunc g_gles2_function_table[] = {
"glGetVertexAttribiv",
reinterpret_cast<GLES2FunctionPointer>(glGetVertexAttribiv),
},
{
"glGetVertexAttribIiv",
reinterpret_cast<GLES2FunctionPointer>(glGetVertexAttribIiv),
},
{
"glGetVertexAttribIuiv",
reinterpret_cast<GLES2FunctionPointer>(glGetVertexAttribIuiv),
},
{
"glGetVertexAttribPointerv",
reinterpret_cast<GLES2FunctionPointer>(glGetVertexAttribPointerv),
Expand Down
22 changes: 22 additions & 0 deletions gpu/command_buffer/client/gles2_cmd_helper_autogen.h
Original file line number Diff line number Diff line change
Expand Up @@ -1176,6 +1176,28 @@ void GetVertexAttribiv(GLuint index,
}
}

void GetVertexAttribIiv(GLuint index,
GLenum pname,
uint32_t params_shm_id,
uint32_t params_shm_offset) {
gles2::cmds::GetVertexAttribIiv* c =
GetCmdSpace<gles2::cmds::GetVertexAttribIiv>();
if (c) {
c->Init(index, pname, params_shm_id, params_shm_offset);
}
}

void GetVertexAttribIuiv(GLuint index,
GLenum pname,
uint32_t params_shm_id,
uint32_t params_shm_offset) {
gles2::cmds::GetVertexAttribIuiv* c =
GetCmdSpace<gles2::cmds::GetVertexAttribIuiv>();
if (c) {
c->Init(index, pname, params_shm_id, params_shm_offset);
}
}

void GetVertexAttribPointerv(GLuint index,
GLenum pname,
uint32_t pointer_shm_id,
Expand Down
66 changes: 64 additions & 2 deletions gpu/command_buffer/client/gles2_implementation.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3875,7 +3875,7 @@ void GLES2Implementation::GetVertexAttribfv(
<< static_cast<const void*>(params) << ")");
uint32 value = 0;
if (vertex_array_object_manager_->GetVertexAttrib(index, pname, &value)) {
*params = static_cast<float>(value);
*params = static_cast<GLfloat>(value);
return;
}
TRACE_EVENT0("gpu", "GLES2::GetVertexAttribfv");
Expand Down Expand Up @@ -3906,7 +3906,7 @@ void GLES2Implementation::GetVertexAttribiv(
<< static_cast<const void*>(params) << ")");
uint32 value = 0;
if (vertex_array_object_manager_->GetVertexAttrib(index, pname, &value)) {
*params = value;
*params = static_cast<GLint>(value);
return;
}
TRACE_EVENT0("gpu", "GLES2::GetVertexAttribiv");
Expand All @@ -3928,6 +3928,68 @@ void GLES2Implementation::GetVertexAttribiv(
CheckGLError();
}

void GLES2Implementation::GetVertexAttribIiv(
GLuint index, GLenum pname, GLint* params) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetVertexAttribIiv("
<< index << ", "
<< GLES2Util::GetStringVertexAttribute(pname) << ", "
<< static_cast<const void*>(params) << ")");
uint32 value = 0;
if (vertex_array_object_manager_->GetVertexAttrib(index, pname, &value)) {
*params = static_cast<GLint>(value);
return;
}
TRACE_EVENT0("gpu", "GLES2::GetVertexAttribIiv");
typedef cmds::GetVertexAttribiv::Result Result;
Result* result = GetResultAs<Result*>();
if (!result) {
return;
}
result->SetNumResults(0);
helper_->GetVertexAttribIiv(
index, pname, GetResultShmId(), GetResultShmOffset());
WaitForCmd();
result->CopyResult(params);
GPU_CLIENT_LOG_CODE_BLOCK({
for (int32 i = 0; i < result->GetNumResults(); ++i) {
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
CheckGLError();
}

void GLES2Implementation::GetVertexAttribIuiv(
GLuint index, GLenum pname, GLuint* params) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetVertexAttribIuiv("
<< index << ", "
<< GLES2Util::GetStringVertexAttribute(pname) << ", "
<< static_cast<const void*>(params) << ")");
uint32 value = 0;
if (vertex_array_object_manager_->GetVertexAttrib(index, pname, &value)) {
*params = static_cast<GLuint>(value);
return;
}
TRACE_EVENT0("gpu", "GLES2::GetVertexAttribIuiv");
typedef cmds::GetVertexAttribiv::Result Result;
Result* result = GetResultAs<Result*>();
if (!result) {
return;
}
result->SetNumResults(0);
helper_->GetVertexAttribIuiv(
index, pname, GetResultShmId(), GetResultShmOffset());
WaitForCmd();
result->CopyResult(params);
GPU_CLIENT_LOG_CODE_BLOCK({
for (int32 i = 0; i < result->GetNumResults(); ++i) {
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
CheckGLError();
}

void GLES2Implementation::Swap() {
SwapBuffers();
}
Expand Down
2 changes: 2 additions & 0 deletions gpu/command_buffer/client/gles2_implementation.h
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,8 @@ class GLES2_IMPL_EXPORT GLES2Implementation
void EnableVertexAttribArray(GLuint index) override;
void GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params) override;
void GetVertexAttribiv(GLuint index, GLenum pname, GLint* params) override;
void GetVertexAttribIiv(GLuint index, GLenum pname, GLint* params) override;
void GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params) override;

// ContextSupport implementation.
void Swap() override;
Expand Down
38 changes: 38 additions & 0 deletions gpu/command_buffer/client/gles2_implementation_unittest_autogen.h
Original file line number Diff line number Diff line change
Expand Up @@ -1122,6 +1122,44 @@ TEST_F(GLES2ImplementationTest, GetVertexAttribiv) {
EXPECT_EQ(static_cast<ResultType>(1), result);
}

TEST_F(GLES2ImplementationTest, GetVertexAttribIiv) {
struct Cmds {
cmds::GetVertexAttribIiv cmd;
};
typedef cmds::GetVertexAttribIiv::Result::Type ResultType;
ResultType result = 0;
Cmds expected;
ExpectedMemoryInfo result1 =
GetExpectedResultMemory(sizeof(uint32_t) + sizeof(ResultType));
expected.cmd.Init(123, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, result1.id,
result1.offset);
EXPECT_CALL(*command_buffer(), OnFlush())
.WillOnce(SetMemory(result1.ptr, SizedResultHelper<ResultType>(1)))
.RetiresOnSaturation();
gl_->GetVertexAttribIiv(123, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, &result);
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
EXPECT_EQ(static_cast<ResultType>(1), result);
}

TEST_F(GLES2ImplementationTest, GetVertexAttribIuiv) {
struct Cmds {
cmds::GetVertexAttribIuiv cmd;
};
typedef cmds::GetVertexAttribIuiv::Result::Type ResultType;
ResultType result = 0;
Cmds expected;
ExpectedMemoryInfo result1 =
GetExpectedResultMemory(sizeof(uint32_t) + sizeof(ResultType));
expected.cmd.Init(123, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, result1.id,
result1.offset);
EXPECT_CALL(*command_buffer(), OnFlush())
.WillOnce(SetMemory(result1.ptr, SizedResultHelper<ResultType>(1)))
.RetiresOnSaturation();
gl_->GetVertexAttribIuiv(123, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, &result);
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
EXPECT_EQ(static_cast<ResultType>(1), result);
}

TEST_F(GLES2ImplementationTest, Hint) {
struct Cmds {
cmds::Hint cmd;
Expand Down
4 changes: 4 additions & 0 deletions gpu/command_buffer/client/gles2_interface_autogen.h
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,10 @@ virtual void GetUniformIndices(GLuint program,
virtual GLint GetUniformLocation(GLuint program, const char* name) = 0;
virtual void GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params) = 0;
virtual void GetVertexAttribiv(GLuint index, GLenum pname, GLint* params) = 0;
virtual void GetVertexAttribIiv(GLuint index, GLenum pname, GLint* params) = 0;
virtual void GetVertexAttribIuiv(GLuint index,
GLenum pname,
GLuint* params) = 0;
virtual void GetVertexAttribPointerv(GLuint index,
GLenum pname,
void** pointer) = 0;
Expand Down
2 changes: 2 additions & 0 deletions gpu/command_buffer/client/gles2_interface_stub_autogen.h
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,8 @@ void GetUniformIndices(GLuint program,
GLint GetUniformLocation(GLuint program, const char* name) override;
void GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params) override;
void GetVertexAttribiv(GLuint index, GLenum pname, GLint* params) override;
void GetVertexAttribIiv(GLuint index, GLenum pname, GLint* params) override;
void GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params) override;
void GetVertexAttribPointerv(GLuint index,
GLenum pname,
void** pointer) override;
Expand Down
8 changes: 8 additions & 0 deletions gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h
Original file line number Diff line number Diff line change
Expand Up @@ -485,6 +485,14 @@ void GLES2InterfaceStub::GetVertexAttribiv(GLuint /* index */,
GLenum /* pname */,
GLint* /* params */) {
}
void GLES2InterfaceStub::GetVertexAttribIiv(GLuint /* index */,
GLenum /* pname */,
GLint* /* params */) {
}
void GLES2InterfaceStub::GetVertexAttribIuiv(GLuint /* index */,
GLenum /* pname */,
GLuint* /* params */) {
}
void GLES2InterfaceStub::GetVertexAttribPointerv(GLuint /* index */,
GLenum /* pname */,
void** /* pointer */) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,8 @@ void GetUniformIndices(GLuint program,
GLint GetUniformLocation(GLuint program, const char* name) override;
void GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params) override;
void GetVertexAttribiv(GLuint index, GLenum pname, GLint* params) override;
void GetVertexAttribIiv(GLuint index, GLenum pname, GLint* params) override;
void GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params) override;
void GetVertexAttribPointerv(GLuint index,
GLenum pname,
void** pointer) override;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -822,6 +822,20 @@ void GLES2TraceImplementation::GetVertexAttribiv(GLuint index,
gl_->GetVertexAttribiv(index, pname, params);
}

void GLES2TraceImplementation::GetVertexAttribIiv(GLuint index,
GLenum pname,
GLint* params) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetVertexAttribIiv");
gl_->GetVertexAttribIiv(index, pname, params);
}

void GLES2TraceImplementation::GetVertexAttribIuiv(GLuint index,
GLenum pname,
GLuint* params) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetVertexAttribIuiv");
gl_->GetVertexAttribIuiv(index, pname, params);
}

void GLES2TraceImplementation::GetVertexAttribPointerv(GLuint index,
GLenum pname,
void** pointer) {
Expand Down
4 changes: 3 additions & 1 deletion gpu/command_buffer/client/vertex_array_object_manager.cc
Original file line number Diff line number Diff line change
Expand Up @@ -282,9 +282,11 @@ bool VertexArrayObject::GetVertexAttrib(
case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED:
*param = attrib->normalized();
break;
case GL_VERTEX_ATTRIB_ARRAY_INTEGER:
// TODO(zmo): cache this on the client side.
return false;
default:
return false; // pass through to service side.
break;
}
return true;
}
Expand Down
2 changes: 2 additions & 0 deletions gpu/command_buffer/cmd_buffer_functions.txt
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,8 @@ GL_APICALL void GL_APIENTRY glGetUniformIndices (GLidProgram program, GL
GL_APICALL GLint GL_APIENTRY glGetUniformLocation (GLidProgram program, const char* name);
GL_APICALL void GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenumVertexAttribute pname, GLfloat* params);
GL_APICALL void GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenumVertexAttribute pname, GLint* params);
GL_APICALL void GL_APIENTRY glGetVertexAttribIiv (GLuint index, GLenumVertexAttribute pname, GLint* params);
GL_APICALL void GL_APIENTRY glGetVertexAttribIuiv (GLuint index, GLenumVertexAttribute pname, GLuint* params);
GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenumVertexPointer pname, void** pointer);
GL_APICALL void GL_APIENTRY glHint (GLenumHintTarget target, GLenumHintMode mode);
GL_APICALL void GL_APIENTRY glInvalidateFramebuffer (GLenumInvalidateFrameBufferTarget target, GLsizeiNotNegative count, const GLenum* attachments);
Expand Down
Loading

0 comments on commit 5ee097e

Please sign in to comment.