| Index: gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| index 6cef78f5a7916b1068c70a40145440f797f0f4ec..49948e71b93e0f9830ab9c760660699b87d383b6 100644
|
| --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| @@ -1566,8 +1566,9 @@ class GLES2DecoderImpl : public GLES2Decoder,
|
| GLint fake_location, GLsizei count, GLboolean transpose,
|
| const GLfloat* value);
|
|
|
| + template <typename T>
|
| bool SetVertexAttribValue(
|
| - const char* function_name, GLuint index, const GLfloat* value);
|
| + const char* function_name, GLuint index, const T* value);
|
|
|
| // Wrappers for glVertexAttrib??
|
| void DoVertexAttrib1f(GLuint index, GLfloat v0);
|
| @@ -1575,10 +1576,15 @@ class GLES2DecoderImpl : public GLES2Decoder,
|
| void DoVertexAttrib3f(GLuint index, GLfloat v0, GLfloat v1, GLfloat v2);
|
| void DoVertexAttrib4f(
|
| GLuint index, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
|
| - void DoVertexAttrib1fv(GLuint index, const GLfloat *v);
|
| - void DoVertexAttrib2fv(GLuint index, const GLfloat *v);
|
| - void DoVertexAttrib3fv(GLuint index, const GLfloat *v);
|
| - void DoVertexAttrib4fv(GLuint index, const GLfloat *v);
|
| + void DoVertexAttrib1fv(GLuint index, const GLfloat* v);
|
| + void DoVertexAttrib2fv(GLuint index, const GLfloat* v);
|
| + void DoVertexAttrib3fv(GLuint index, const GLfloat* v);
|
| + void DoVertexAttrib4fv(GLuint index, const GLfloat* v);
|
| + void DoVertexAttribI4i(GLuint index, GLint v0, GLint v1, GLint v2, GLint v3);
|
| + void DoVertexAttribI4iv(GLuint index, const GLint* v);
|
| + void DoVertexAttribI4ui(
|
| + GLuint index, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
|
| + void DoVertexAttribI4uiv(GLuint index, const GLuint* v);
|
|
|
| // Wrapper for glViewport
|
| void DoViewport(GLint x, GLint y, GLsizei width, GLsizei height);
|
| @@ -7715,8 +7721,9 @@ void GLES2DecoderImpl::DoGetVertexAttribIuiv(
|
| DoGetVertexAttribImpl<GLuint>(index, pname, params);
|
| }
|
|
|
| +template <typename T>
|
| bool GLES2DecoderImpl::SetVertexAttribValue(
|
| - const char* function_name, GLuint index, const GLfloat* value) {
|
| + const char* function_name, GLuint index, const T* value) {
|
| if (index >= state_.attrib_values.size()) {
|
| LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, "index out of range");
|
| return false;
|
| @@ -7782,6 +7789,34 @@ void GLES2DecoderImpl::DoVertexAttrib4fv(GLuint index, const GLfloat* v) {
|
| }
|
| }
|
|
|
| +void GLES2DecoderImpl::DoVertexAttribI4i(
|
| + GLuint index, GLint v0, GLint v1, GLint v2, GLint v3) {
|
| + GLint v[4] = { v0, v1, v2, v3 };
|
| + if (SetVertexAttribValue("glVertexAttribI4i", index, v)) {
|
| + glVertexAttribI4i(index, v0, v1, v2, v3);
|
| + }
|
| +}
|
| +
|
| +void GLES2DecoderImpl::DoVertexAttribI4iv(GLuint index, const GLint* v) {
|
| + if (SetVertexAttribValue("glVertexAttribI4iv", index, v)) {
|
| + glVertexAttribI4iv(index, v);
|
| + }
|
| +}
|
| +
|
| +void GLES2DecoderImpl::DoVertexAttribI4ui(
|
| + GLuint index, GLuint v0, GLuint v1, GLuint v2, GLuint v3) {
|
| + GLuint v[4] = { v0, v1, v2, v3 };
|
| + if (SetVertexAttribValue("glVertexAttribI4ui", index, v)) {
|
| + glVertexAttribI4ui(index, v0, v1, v2, v3);
|
| + }
|
| +}
|
| +
|
| +void GLES2DecoderImpl::DoVertexAttribI4uiv(GLuint index, const GLuint* v) {
|
| + if (SetVertexAttribValue("glVertexAttribI4uiv", index, v)) {
|
| + glVertexAttribI4uiv(index, v);
|
| + }
|
| +}
|
| +
|
| error::Error GLES2DecoderImpl::HandleVertexAttribIPointer(
|
| uint32 immediate_data_size,
|
| const void* cmd_data) {
|
| @@ -7864,7 +7899,8 @@ error::Error GLES2DecoderImpl::HandleVertexAttribIPointer(
|
| GL_FALSE,
|
| stride,
|
| stride != 0 ? stride : component_size * size,
|
| - offset);
|
| + offset,
|
| + GL_TRUE);
|
| glVertexAttribIPointer(indx, size, type, stride, ptr);
|
| return error::kNoError;
|
| }
|
| @@ -7950,7 +7986,8 @@ error::Error GLES2DecoderImpl::HandleVertexAttribPointer(
|
| normalized,
|
| stride,
|
| stride != 0 ? stride : component_size * size,
|
| - offset);
|
| + offset,
|
| + GL_FALSE);
|
| // We support GL_FIXED natively on EGL/GLES2 implementations
|
| if (type != GL_FIXED || feature_info_->gl_version_info().is_es) {
|
| glVertexAttribPointer(indx, size, type, normalized, stride, ptr);
|
|
|