Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(179)

Side by Side Diff: gpu/command_buffer/service/gles2_cmd_decoder.cc

Issue 1136713003: Add ES3 commands GetVertexAttribI{u}iv to GPU command buffer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: switch to union Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
6 6
7 #include <stdio.h> 7 #include <stdio.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <cmath> 10 #include <cmath>
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 return gfx::OVERLAY_TRANSFORM_ROTATE_90; 166 return gfx::OVERLAY_TRANSFORM_ROTATE_90;
167 case GL_OVERLAY_TRANSFORM_ROTATE_180_CHROMIUM: 167 case GL_OVERLAY_TRANSFORM_ROTATE_180_CHROMIUM:
168 return gfx::OVERLAY_TRANSFORM_ROTATE_180; 168 return gfx::OVERLAY_TRANSFORM_ROTATE_180;
169 case GL_OVERLAY_TRANSFORM_ROTATE_270_CHROMIUM: 169 case GL_OVERLAY_TRANSFORM_ROTATE_270_CHROMIUM:
170 return gfx::OVERLAY_TRANSFORM_ROTATE_270; 170 return gfx::OVERLAY_TRANSFORM_ROTATE_270;
171 default: 171 default:
172 return gfx::OVERLAY_TRANSFORM_INVALID; 172 return gfx::OVERLAY_TRANSFORM_INVALID;
173 } 173 }
174 } 174 }
175 175
176 struct Vec4f {
177 explicit Vec4f(const Vec4& data) {
178 data.GetValues(v);
179 }
180
181 GLfloat v[4];
182 };
183
176 } // namespace 184 } // namespace
177 185
178 class GLES2DecoderImpl; 186 class GLES2DecoderImpl;
179 187
180 // Local versions of the SET_GL_ERROR macros 188 // Local versions of the SET_GL_ERROR macros
181 #define LOCAL_SET_GL_ERROR(error, function_name, msg) \ 189 #define LOCAL_SET_GL_ERROR(error, function_name, msg) \
182 ERRORSTATE_SET_GL_ERROR(state_.GetErrorState(), error, function_name, msg) 190 ERRORSTATE_SET_GL_ERROR(state_.GetErrorState(), error, function_name, msg)
183 #define LOCAL_SET_GL_ERROR_INVALID_ENUM(function_name, value, label) \ 191 #define LOCAL_SET_GL_ERROR_INVALID_ENUM(function_name, value, label) \
184 ERRORSTATE_SET_GL_ERROR_INVALID_ENUM(state_.GetErrorState(), \ 192 ERRORSTATE_SET_GL_ERROR_INVALID_ENUM(state_.GetErrorState(), \
185 function_name, value, label) 193 function_name, value, label)
(...skipping 1279 matching lines...) Expand 10 before | Expand all | Expand 10 after
1465 1473
1466 // Wrapper for glGetShaderiv 1474 // Wrapper for glGetShaderiv
1467 void DoGetShaderiv(GLuint shader, GLenum pname, GLint* params); 1475 void DoGetShaderiv(GLuint shader, GLenum pname, GLint* params);
1468 1476
1469 // Wrappers for glGetTexParameter. 1477 // Wrappers for glGetTexParameter.
1470 void DoGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params); 1478 void DoGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params);
1471 void DoGetTexParameteriv(GLenum target, GLenum pname, GLint* params); 1479 void DoGetTexParameteriv(GLenum target, GLenum pname, GLint* params);
1472 void InitTextureMaxAnisotropyIfNeeded(GLenum target, GLenum pname); 1480 void InitTextureMaxAnisotropyIfNeeded(GLenum target, GLenum pname);
1473 1481
1474 // Wrappers for glGetVertexAttrib. 1482 // Wrappers for glGetVertexAttrib.
1475 void DoGetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params); 1483 template <typename T>
1476 void DoGetVertexAttribiv(GLuint index, GLenum pname, GLint *params); 1484 void DoGetVertexAttribImpl(GLuint index, GLenum pname, T* params);
1485 void DoGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params);
1486 void DoGetVertexAttribiv(GLuint index, GLenum pname, GLint* params);
1487 void DoGetVertexAttribIiv(GLuint index, GLenum pname, GLint* params);
1488 void DoGetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params);
1477 1489
1478 // Wrappers for glIsXXX functions. 1490 // Wrappers for glIsXXX functions.
1479 bool DoIsEnabled(GLenum cap); 1491 bool DoIsEnabled(GLenum cap);
1480 bool DoIsBuffer(GLuint client_id); 1492 bool DoIsBuffer(GLuint client_id);
1481 bool DoIsFramebuffer(GLuint client_id); 1493 bool DoIsFramebuffer(GLuint client_id);
1482 bool DoIsProgram(GLuint client_id); 1494 bool DoIsProgram(GLuint client_id);
1483 bool DoIsRenderbuffer(GLuint client_id); 1495 bool DoIsRenderbuffer(GLuint client_id);
1484 bool DoIsShader(GLuint client_id); 1496 bool DoIsShader(GLuint client_id);
1485 bool DoIsTexture(GLuint client_id); 1497 bool DoIsTexture(GLuint client_id);
1486 bool DoIsVertexArrayOES(GLuint client_id); 1498 bool DoIsVertexArrayOES(GLuint client_id);
(...skipping 972 matching lines...) Expand 10 before | Expand all | Expand 10 after
2459 gpu_decoder_category_(TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED( 2471 gpu_decoder_category_(TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED(
2460 TRACE_DISABLED_BY_DEFAULT("gpu_decoder"))), 2472 TRACE_DISABLED_BY_DEFAULT("gpu_decoder"))),
2461 gpu_trace_level_(2), 2473 gpu_trace_level_(2),
2462 gpu_trace_commands_(false), 2474 gpu_trace_commands_(false),
2463 gpu_debug_commands_(false), 2475 gpu_debug_commands_(false),
2464 validation_texture_(0), 2476 validation_texture_(0),
2465 validation_fbo_multisample_(0), 2477 validation_fbo_multisample_(0),
2466 validation_fbo_(0) { 2478 validation_fbo_(0) {
2467 DCHECK(group); 2479 DCHECK(group);
2468 2480
2469 attrib_0_value_.v[0] = 0.0f;
2470 attrib_0_value_.v[1] = 0.0f;
2471 attrib_0_value_.v[2] = 0.0f;
2472 attrib_0_value_.v[3] = 1.0f;
2473
2474 // The shader translator is used for WebGL even when running on EGL 2481 // The shader translator is used for WebGL even when running on EGL
2475 // because additional restrictions are needed (like only enabling 2482 // because additional restrictions are needed (like only enabling
2476 // GL_OES_standard_derivatives on demand). It is used for the unit 2483 // GL_OES_standard_derivatives on demand). It is used for the unit
2477 // tests because GLES2DecoderWithShaderTest.GetShaderInfoLogValidArgs passes 2484 // tests because GLES2DecoderWithShaderTest.GetShaderInfoLogValidArgs passes
2478 // the empty string to CompileShader and this is not a valid shader. 2485 // the empty string to CompileShader and this is not a valid shader.
2479 if (gfx::GetGLImplementation() == gfx::kGLImplementationMockGL || 2486 if (gfx::GetGLImplementation() == gfx::kGLImplementationMockGL ||
2480 base::CommandLine::ForCurrentProcess()->HasSwitch( 2487 base::CommandLine::ForCurrentProcess()->HasSwitch(
2481 switches::kDisableGLSLTranslator)) { 2488 switches::kDisableGLSLTranslator)) {
2482 use_shader_translator_ = false; 2489 use_shader_translator_ = false;
2483 } 2490 }
(...skipping 4361 matching lines...) Expand 10 before | Expand all | Expand 10 after
6845 return true; 6852 return true;
6846 } 6853 }
6847 6854
6848 // Make a buffer with a single repeated vec4 value enough to 6855 // Make a buffer with a single repeated vec4 value enough to
6849 // simulate the constant value that is supposed to be here. 6856 // simulate the constant value that is supposed to be here.
6850 // This is required to emulate GLES2 on GL. 6857 // This is required to emulate GLES2 on GL.
6851 GLuint num_vertices = max_vertex_accessed + 1; 6858 GLuint num_vertices = max_vertex_accessed + 1;
6852 uint32 size_needed = 0; 6859 uint32 size_needed = 0;
6853 6860
6854 if (num_vertices == 0 || 6861 if (num_vertices == 0 ||
6855 !SafeMultiplyUint32(num_vertices, sizeof(Vec4), &size_needed) || 6862 !SafeMultiplyUint32(num_vertices, sizeof(Vec4f), &size_needed) ||
6856 size_needed > 0x7FFFFFFFU) { 6863 size_needed > 0x7FFFFFFFU) {
6857 LOCAL_SET_GL_ERROR(GL_OUT_OF_MEMORY, function_name, "Simulating attrib 0"); 6864 LOCAL_SET_GL_ERROR(GL_OUT_OF_MEMORY, function_name, "Simulating attrib 0");
6858 return false; 6865 return false;
6859 } 6866 }
6860 6867
6861 LOCAL_PERFORMANCE_WARNING( 6868 LOCAL_PERFORMANCE_WARNING(
6862 "Attribute 0 is disabled. This has signficant performance penalty"); 6869 "Attribute 0 is disabled. This has signficant performance penalty");
6863 6870
6864 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER(function_name); 6871 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER(function_name);
6865 glBindBuffer(GL_ARRAY_BUFFER, attrib_0_buffer_id_); 6872 glBindBuffer(GL_ARRAY_BUFFER, attrib_0_buffer_id_);
6866 6873
6867 bool new_buffer = static_cast<GLsizei>(size_needed) > attrib_0_size_; 6874 bool new_buffer = static_cast<GLsizei>(size_needed) > attrib_0_size_;
6868 if (new_buffer) { 6875 if (new_buffer) {
6869 glBufferData(GL_ARRAY_BUFFER, size_needed, NULL, GL_DYNAMIC_DRAW); 6876 glBufferData(GL_ARRAY_BUFFER, size_needed, NULL, GL_DYNAMIC_DRAW);
6870 GLenum error = glGetError(); 6877 GLenum error = glGetError();
6871 if (error != GL_NO_ERROR) { 6878 if (error != GL_NO_ERROR) {
6872 LOCAL_SET_GL_ERROR( 6879 LOCAL_SET_GL_ERROR(
6873 GL_OUT_OF_MEMORY, function_name, "Simulating attrib 0"); 6880 GL_OUT_OF_MEMORY, function_name, "Simulating attrib 0");
6874 return false; 6881 return false;
6875 } 6882 }
6876 } 6883 }
6877 6884
6878 const Vec4& value = state_.attrib_values[0]; 6885 const Vec4& value = state_.attrib_values[0];
6879 if (new_buffer || 6886 if (new_buffer ||
6880 (attrib_0_used && 6887 (attrib_0_used &&
6881 (!attrib_0_buffer_matches_value_ || 6888 (!attrib_0_buffer_matches_value_ || !value.Equal(attrib_0_value_)))){
6882 (value.v[0] != attrib_0_value_.v[0] || 6889 // TODO(zmo): This is not 100% correct because we might lose data when
6883 value.v[1] != attrib_0_value_.v[1] || 6890 // casting to float type, but it is a corner case and once we migrate to
6884 value.v[2] != attrib_0_value_.v[2] || 6891 // core profiles on desktop GL, it is no longer relevant.
6885 value.v[3] != attrib_0_value_.v[3])))) { 6892 Vec4f fvalue(value);
6886 std::vector<Vec4> temp(num_vertices, value); 6893 std::vector<Vec4f> temp(num_vertices, fvalue);
6887 glBufferSubData(GL_ARRAY_BUFFER, 0, size_needed, &temp[0].v[0]); 6894 glBufferSubData(GL_ARRAY_BUFFER, 0, size_needed, &temp[0].v[0]);
6888 attrib_0_buffer_matches_value_ = true; 6895 attrib_0_buffer_matches_value_ = true;
6889 attrib_0_value_ = value; 6896 attrib_0_value_ = value;
6890 attrib_0_size_ = size_needed; 6897 attrib_0_size_ = size_needed;
6891 } 6898 }
6892 6899
6893 glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, NULL); 6900 glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, NULL);
6894 6901
6895 if (attrib->divisor()) 6902 if (attrib->divisor())
6896 glVertexAttribDivisorANGLE(0, 0); 6903 glVertexAttribDivisorANGLE(0, 0);
(...skipping 692 matching lines...) Expand 10 before | Expand all | Expand 10 after
7589 program_client_id, "glValidateProgram"); 7596 program_client_id, "glValidateProgram");
7590 if (!program) { 7597 if (!program) {
7591 return; 7598 return;
7592 } 7599 }
7593 program->Validate(); 7600 program->Validate();
7594 } 7601 }
7595 7602
7596 void GLES2DecoderImpl::GetVertexAttribHelper( 7603 void GLES2DecoderImpl::GetVertexAttribHelper(
7597 const VertexAttrib* attrib, GLenum pname, GLint* params) { 7604 const VertexAttrib* attrib, GLenum pname, GLint* params) {
7598 switch (pname) { 7605 switch (pname) {
7599 case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: { 7606 case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:
7607 {
7600 Buffer* buffer = attrib->buffer(); 7608 Buffer* buffer = attrib->buffer();
7601 if (buffer && !buffer->IsDeleted()) { 7609 if (buffer && !buffer->IsDeleted()) {
7602 GLuint client_id; 7610 GLuint client_id;
7603 buffer_manager()->GetClientId(buffer->service_id(), &client_id); 7611 buffer_manager()->GetClientId(buffer->service_id(), &client_id);
7604 *params = client_id; 7612 *params = client_id;
7605 } 7613 }
7606 break; 7614 break;
7607 } 7615 }
7608 case GL_VERTEX_ATTRIB_ARRAY_ENABLED: 7616 case GL_VERTEX_ATTRIB_ARRAY_ENABLED:
7609 *params = attrib->enabled(); 7617 *params = attrib->enabled();
7610 break; 7618 break;
7611 case GL_VERTEX_ATTRIB_ARRAY_SIZE: 7619 case GL_VERTEX_ATTRIB_ARRAY_SIZE:
7612 *params = attrib->size(); 7620 *params = attrib->size();
7613 break; 7621 break;
7614 case GL_VERTEX_ATTRIB_ARRAY_STRIDE: 7622 case GL_VERTEX_ATTRIB_ARRAY_STRIDE:
7615 *params = attrib->gl_stride(); 7623 *params = attrib->gl_stride();
7616 break; 7624 break;
7617 case GL_VERTEX_ATTRIB_ARRAY_TYPE: 7625 case GL_VERTEX_ATTRIB_ARRAY_TYPE:
7618 *params = attrib->type(); 7626 *params = attrib->type();
7619 break; 7627 break;
7620 case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED: 7628 case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED:
7621 *params = attrib->normalized(); 7629 *params = attrib->normalized();
7622 break; 7630 break;
7623 case GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE: 7631 case GL_VERTEX_ATTRIB_ARRAY_DIVISOR:
7624 *params = attrib->divisor(); 7632 *params = attrib->divisor();
7625 break; 7633 break;
7634 case GL_VERTEX_ATTRIB_ARRAY_INTEGER:
7635 *params = attrib->integer();
7636 break;
7626 default: 7637 default:
7627 NOTREACHED(); 7638 NOTREACHED();
7628 break; 7639 break;
7629 } 7640 }
7630 } 7641 }
7631 7642
7632 void GLES2DecoderImpl::DoGetTexParameterfv( 7643 void GLES2DecoderImpl::DoGetTexParameterfv(
7633 GLenum target, GLenum pname, GLfloat* params) { 7644 GLenum target, GLenum pname, GLfloat* params) {
7634 InitTextureMaxAnisotropyIfNeeded(target, pname); 7645 InitTextureMaxAnisotropyIfNeeded(target, pname);
7635 glGetTexParameterfv(target, pname, params); 7646 glGetTexParameterfv(target, pname, params);
(...skipping 19 matching lines...) Expand all
7655 if (!texture_ref) { 7666 if (!texture_ref) {
7656 LOCAL_SET_GL_ERROR( 7667 LOCAL_SET_GL_ERROR(
7657 GL_INVALID_OPERATION, 7668 GL_INVALID_OPERATION,
7658 "glGetTexParamter{fi}v", "unknown texture for target"); 7669 "glGetTexParamter{fi}v", "unknown texture for target");
7659 return; 7670 return;
7660 } 7671 }
7661 Texture* texture = texture_ref->texture(); 7672 Texture* texture = texture_ref->texture();
7662 texture->InitTextureMaxAnisotropyIfNeeded(target); 7673 texture->InitTextureMaxAnisotropyIfNeeded(target);
7663 } 7674 }
7664 7675
7665 void GLES2DecoderImpl::DoGetVertexAttribfv( 7676 template <typename T>
7666 GLuint index, GLenum pname, GLfloat* params) { 7677 void GLES2DecoderImpl::DoGetVertexAttribImpl(
7678 GLuint index, GLenum pname, T* params) {
7667 VertexAttrib* attrib = state_.vertex_attrib_manager->GetVertexAttrib(index); 7679 VertexAttrib* attrib = state_.vertex_attrib_manager->GetVertexAttrib(index);
7668 if (!attrib) { 7680 if (!attrib) {
7669 LOCAL_SET_GL_ERROR( 7681 LOCAL_SET_GL_ERROR(
7670 GL_INVALID_VALUE, "glGetVertexAttribfv", "index out of range"); 7682 GL_INVALID_VALUE, "glGetVertexAttrib", "index out of range");
7671 return; 7683 return;
7672 } 7684 }
7673 switch (pname) { 7685 switch (pname) {
7674 case GL_CURRENT_VERTEX_ATTRIB: { 7686 case GL_CURRENT_VERTEX_ATTRIB:
7675 const Vec4& value = state_.attrib_values[index]; 7687 state_.attrib_values[index].GetValues(params);
7676 params[0] = value.v[0];
7677 params[1] = value.v[1];
7678 params[2] = value.v[2];
7679 params[3] = value.v[3];
7680 break; 7688 break;
7681 }
7682 default: { 7689 default: {
7683 GLint value = 0; 7690 GLint value = 0;
7684 GetVertexAttribHelper(attrib, pname, &value); 7691 GetVertexAttribHelper(attrib, pname, &value);
7685 *params = static_cast<GLfloat>(value); 7692 *params = static_cast<T>(value);
7686 break; 7693 break;
7687 } 7694 }
7688 } 7695 }
7689 } 7696 }
7690 7697
7698 void GLES2DecoderImpl::DoGetVertexAttribfv(
7699 GLuint index, GLenum pname, GLfloat* params) {
7700 DoGetVertexAttribImpl<GLfloat>(index, pname, params);
7701 }
7702
7691 void GLES2DecoderImpl::DoGetVertexAttribiv( 7703 void GLES2DecoderImpl::DoGetVertexAttribiv(
7692 GLuint index, GLenum pname, GLint* params) { 7704 GLuint index, GLenum pname, GLint* params) {
7693 VertexAttrib* attrib = state_.vertex_attrib_manager->GetVertexAttrib(index); 7705 DoGetVertexAttribImpl<GLint>(index, pname, params);
7694 if (!attrib) { 7706 }
7695 LOCAL_SET_GL_ERROR( 7707
7696 GL_INVALID_VALUE, "glGetVertexAttribiv", "index out of range"); 7708 void GLES2DecoderImpl::DoGetVertexAttribIiv(
7697 return; 7709 GLuint index, GLenum pname, GLint* params) {
7698 } 7710 DoGetVertexAttribImpl<GLint>(index, pname, params);
7699 switch (pname) { 7711 }
7700 case GL_CURRENT_VERTEX_ATTRIB: { 7712
7701 const Vec4& value = state_.attrib_values[index]; 7713 void GLES2DecoderImpl::DoGetVertexAttribIuiv(
7702 params[0] = static_cast<GLint>(value.v[0]); 7714 GLuint index, GLenum pname, GLuint* params) {
7703 params[1] = static_cast<GLint>(value.v[1]); 7715 DoGetVertexAttribImpl<GLuint>(index, pname, params);
7704 params[2] = static_cast<GLint>(value.v[2]);
7705 params[3] = static_cast<GLint>(value.v[3]);
7706 break;
7707 }
7708 default:
7709 GetVertexAttribHelper(attrib, pname, params);
7710 break;
7711 }
7712 } 7716 }
7713 7717
7714 bool GLES2DecoderImpl::SetVertexAttribValue( 7718 bool GLES2DecoderImpl::SetVertexAttribValue(
7715 const char* function_name, GLuint index, const GLfloat* value) { 7719 const char* function_name, GLuint index, const GLfloat* value) {
7716 if (index >= state_.attrib_values.size()) { 7720 if (index >= state_.attrib_values.size()) {
7717 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, "index out of range"); 7721 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, "index out of range");
7718 return false; 7722 return false;
7719 } 7723 }
7720 Vec4& v = state_.attrib_values[index]; 7724 state_.attrib_values[index].SetValues(value);
7721 v.v[0] = value[0];
7722 v.v[1] = value[1];
7723 v.v[2] = value[2];
7724 v.v[3] = value[3];
7725 return true; 7725 return true;
7726 } 7726 }
7727 7727
7728 void GLES2DecoderImpl::DoVertexAttrib1f(GLuint index, GLfloat v0) { 7728 void GLES2DecoderImpl::DoVertexAttrib1f(GLuint index, GLfloat v0) {
7729 GLfloat v[4] = { v0, 0.0f, 0.0f, 1.0f, }; 7729 GLfloat v[4] = { v0, 0.0f, 0.0f, 1.0f, };
7730 if (SetVertexAttribValue("glVertexAttrib1f", index, v)) { 7730 if (SetVertexAttribValue("glVertexAttrib1f", index, v)) {
7731 glVertexAttrib1f(index, v0); 7731 glVertexAttrib1f(index, v0);
7732 } 7732 }
7733 } 7733 }
7734 7734
(...skipping 5408 matching lines...) Expand 10 before | Expand all | Expand 10 after
13143 } 13143 }
13144 } 13144 }
13145 13145
13146 // Include the auto-generated part of this file. We split this because it means 13146 // Include the auto-generated part of this file. We split this because it means
13147 // we can easily edit the non-auto generated parts right here in this file 13147 // we can easily edit the non-auto generated parts right here in this file
13148 // instead of having to edit some template or the code generator. 13148 // instead of having to edit some template or the code generator.
13149 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 13149 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
13150 13150
13151 } // namespace gles2 13151 } // namespace gles2
13152 } // namespace gpu 13152 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698