| OLD | NEW |
| 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 <limits.h> | 7 #include <limits.h> |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 #include <stdio.h> | 10 #include <stdio.h> |
| (...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 472 } | 472 } |
| 473 | 473 |
| 474 uint32_t GLES2Decoder::GetAndClearBackbufferClearBitsForTest() { | 474 uint32_t GLES2Decoder::GetAndClearBackbufferClearBitsForTest() { |
| 475 return 0; | 475 return 0; |
| 476 } | 476 } |
| 477 | 477 |
| 478 GLES2Decoder::GLES2Decoder() | 478 GLES2Decoder::GLES2Decoder() |
| 479 : initialized_(false), | 479 : initialized_(false), |
| 480 debug_(false), | 480 debug_(false), |
| 481 log_commands_(false), | 481 log_commands_(false), |
| 482 unsafe_es3_apis_enabled_(false) { | 482 es3_apis_enabled_(false) { |
| 483 } | 483 } |
| 484 | 484 |
| 485 GLES2Decoder::~GLES2Decoder() { | 485 GLES2Decoder::~GLES2Decoder() { |
| 486 } | 486 } |
| 487 | 487 |
| 488 void GLES2Decoder::BeginDecoding() {} | 488 void GLES2Decoder::BeginDecoding() {} |
| 489 | 489 |
| 490 void GLES2Decoder::EndDecoding() {} | 490 void GLES2Decoder::EndDecoding() {} |
| 491 | 491 |
| 492 error::Error GLES2Decoder::DoCommand(unsigned int command, | 492 error::Error GLES2Decoder::DoCommand(unsigned int command, |
| (...skipping 2617 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3110 transform_feedback_manager_.reset(new TransformFeedbackManager( | 3110 transform_feedback_manager_.reset(new TransformFeedbackManager( |
| 3111 group_->max_transform_feedback_separate_attribs(), needs_emulation)); | 3111 group_->max_transform_feedback_separate_attribs(), needs_emulation)); |
| 3112 | 3112 |
| 3113 if (feature_info_->IsWebGL2OrES3Context()) { | 3113 if (feature_info_->IsWebGL2OrES3Context()) { |
| 3114 if (!feature_info_->IsES3Capable()) { | 3114 if (!feature_info_->IsES3Capable()) { |
| 3115 LOG(ERROR) << "Underlying driver does not support ES3."; | 3115 LOG(ERROR) << "Underlying driver does not support ES3."; |
| 3116 Destroy(true); | 3116 Destroy(true); |
| 3117 return false; | 3117 return false; |
| 3118 } | 3118 } |
| 3119 feature_info_->EnableES3Validators(); | 3119 feature_info_->EnableES3Validators(); |
| 3120 set_unsafe_es3_apis_enabled(true); | 3120 set_es3_apis_enabled(true); |
| 3121 | 3121 |
| 3122 frag_depth_explicitly_enabled_ = true; | 3122 frag_depth_explicitly_enabled_ = true; |
| 3123 draw_buffers_explicitly_enabled_ = true; | 3123 draw_buffers_explicitly_enabled_ = true; |
| 3124 // TODO(zmo): Look into shader_texture_lod_explicitly_enabled_ situation. | 3124 // TODO(zmo): Look into shader_texture_lod_explicitly_enabled_ situation. |
| 3125 | 3125 |
| 3126 // Create a fake default transform feedback and bind to it. | 3126 // Create a fake default transform feedback and bind to it. |
| 3127 GLuint default_transform_feedback = 0; | 3127 GLuint default_transform_feedback = 0; |
| 3128 glGenTransformFeedbacks(1, &default_transform_feedback); | 3128 glGenTransformFeedbacks(1, &default_transform_feedback); |
| 3129 state_.default_transform_feedback = | 3129 state_.default_transform_feedback = |
| 3130 transform_feedback_manager_->CreateTransformFeedback( | 3130 transform_feedback_manager_->CreateTransformFeedback( |
| (...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3549 DoGetIntegerv(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, | 3549 DoGetIntegerv(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, |
| 3550 &caps.max_vertex_texture_image_units, 1); | 3550 &caps.max_vertex_texture_image_units, 1); |
| 3551 DoGetIntegerv(GL_MAX_VERTEX_UNIFORM_VECTORS, &caps.max_vertex_uniform_vectors, | 3551 DoGetIntegerv(GL_MAX_VERTEX_UNIFORM_VECTORS, &caps.max_vertex_uniform_vectors, |
| 3552 1); | 3552 1); |
| 3553 DoGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, | 3553 DoGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, |
| 3554 &caps.num_compressed_texture_formats, 1); | 3554 &caps.num_compressed_texture_formats, 1); |
| 3555 DoGetIntegerv(GL_NUM_SHADER_BINARY_FORMATS, &caps.num_shader_binary_formats, | 3555 DoGetIntegerv(GL_NUM_SHADER_BINARY_FORMATS, &caps.num_shader_binary_formats, |
| 3556 1); | 3556 1); |
| 3557 DoGetIntegerv(GL_BIND_GENERATES_RESOURCE_CHROMIUM, | 3557 DoGetIntegerv(GL_BIND_GENERATES_RESOURCE_CHROMIUM, |
| 3558 &caps.bind_generates_resource_chromium, 1); | 3558 &caps.bind_generates_resource_chromium, 1); |
| 3559 if (unsafe_es3_apis_enabled()) { | 3559 if (es3_apis_enabled()) { |
| 3560 // TODO(zmo): Note that some parameter values could be more than 32-bit, | 3560 // TODO(zmo): Note that some parameter values could be more than 32-bit, |
| 3561 // but for now we clamp them to 32-bit max. | 3561 // but for now we clamp them to 32-bit max. |
| 3562 DoGetIntegerv(GL_MAX_3D_TEXTURE_SIZE, &caps.max_3d_texture_size, 1); | 3562 DoGetIntegerv(GL_MAX_3D_TEXTURE_SIZE, &caps.max_3d_texture_size, 1); |
| 3563 DoGetIntegerv(GL_MAX_ARRAY_TEXTURE_LAYERS, &caps.max_array_texture_layers, | 3563 DoGetIntegerv(GL_MAX_ARRAY_TEXTURE_LAYERS, &caps.max_array_texture_layers, |
| 3564 1); | 3564 1); |
| 3565 DoGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &caps.max_color_attachments, 1); | 3565 DoGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &caps.max_color_attachments, 1); |
| 3566 DoGetInteger64v(GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS, | 3566 DoGetInteger64v(GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS, |
| 3567 &caps.max_combined_fragment_uniform_components, 1); | 3567 &caps.max_combined_fragment_uniform_components, 1); |
| 3568 DoGetIntegerv(GL_MAX_COMBINED_UNIFORM_BLOCKS, | 3568 DoGetIntegerv(GL_MAX_COMBINED_UNIFORM_BLOCKS, |
| 3569 &caps.max_combined_uniform_blocks, 1); | 3569 &caps.max_combined_uniform_blocks, 1); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3611 DoGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, | 3611 DoGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, |
| 3612 &caps.num_program_binary_formats, 1); | 3612 &caps.num_program_binary_formats, 1); |
| 3613 DoGetIntegerv(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, | 3613 DoGetIntegerv(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, |
| 3614 &caps.uniform_buffer_offset_alignment, 1); | 3614 &caps.uniform_buffer_offset_alignment, 1); |
| 3615 // TODO(zmo): once we switch to MANGLE, we should query version numbers. | 3615 // TODO(zmo): once we switch to MANGLE, we should query version numbers. |
| 3616 caps.major_version = 3; | 3616 caps.major_version = 3; |
| 3617 caps.minor_version = 0; | 3617 caps.minor_version = 0; |
| 3618 } | 3618 } |
| 3619 if (feature_info_->feature_flags().multisampled_render_to_texture || | 3619 if (feature_info_->feature_flags().multisampled_render_to_texture || |
| 3620 feature_info_->feature_flags().chromium_framebuffer_multisample || | 3620 feature_info_->feature_flags().chromium_framebuffer_multisample || |
| 3621 unsafe_es3_apis_enabled()) { | 3621 es3_apis_enabled()) { |
| 3622 DoGetIntegerv(GL_MAX_SAMPLES, &caps.max_samples, 1); | 3622 DoGetIntegerv(GL_MAX_SAMPLES, &caps.max_samples, 1); |
| 3623 } | 3623 } |
| 3624 | 3624 |
| 3625 caps.egl_image_external = | 3625 caps.egl_image_external = |
| 3626 feature_info_->feature_flags().oes_egl_image_external; | 3626 feature_info_->feature_flags().oes_egl_image_external; |
| 3627 caps.texture_format_astc = | 3627 caps.texture_format_astc = |
| 3628 feature_info_->feature_flags().ext_texture_format_astc; | 3628 feature_info_->feature_flags().ext_texture_format_astc; |
| 3629 caps.texture_format_atc = | 3629 caps.texture_format_atc = |
| 3630 feature_info_->feature_flags().ext_texture_format_atc; | 3630 feature_info_->feature_flags().ext_texture_format_atc; |
| 3631 caps.texture_format_bgra8888 = | 3631 caps.texture_format_bgra8888 = |
| (...skipping 2605 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6237 } | 6237 } |
| 6238 return true; | 6238 return true; |
| 6239 case GL_MAX_VERTEX_UNIFORM_VECTORS: | 6239 case GL_MAX_VERTEX_UNIFORM_VECTORS: |
| 6240 *num_written = 1; | 6240 *num_written = 1; |
| 6241 if (params) { | 6241 if (params) { |
| 6242 *params = group_->max_vertex_uniform_vectors(); | 6242 *params = group_->max_vertex_uniform_vectors(); |
| 6243 } | 6243 } |
| 6244 return true; | 6244 return true; |
| 6245 } | 6245 } |
| 6246 } | 6246 } |
| 6247 if (unsafe_es3_apis_enabled()) { | 6247 if (es3_apis_enabled()) { |
| 6248 switch (pname) { | 6248 switch (pname) { |
| 6249 case GL_MAX_VARYING_COMPONENTS: { | 6249 case GL_MAX_VARYING_COMPONENTS: { |
| 6250 if (gl_version_info().is_es) { | 6250 if (gl_version_info().is_es) { |
| 6251 // We can just delegate this query to the driver. | 6251 // We can just delegate this query to the driver. |
| 6252 *num_written = 1; | 6252 *num_written = 1; |
| 6253 break; | 6253 break; |
| 6254 } | 6254 } |
| 6255 | 6255 |
| 6256 // GL_MAX_VARYING_COMPONENTS is deprecated in the desktop | 6256 // GL_MAX_VARYING_COMPONENTS is deprecated in the desktop |
| 6257 // OpenGL core profile, so for simplicity, just compute it | 6257 // OpenGL core profile, so for simplicity, just compute it |
| (...skipping 571 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6829 DoGetIntegerv(pname, values.get(), params_size); | 6829 DoGetIntegerv(pname, values.get(), params_size); |
| 6830 for (GLsizei ii = 0; ii < params_size; ++ii) { | 6830 for (GLsizei ii = 0; ii < params_size; ++ii) { |
| 6831 params[ii] = static_cast<GLfloat>(values[ii]); | 6831 params[ii] = static_cast<GLfloat>(values[ii]); |
| 6832 } | 6832 } |
| 6833 } | 6833 } |
| 6834 | 6834 |
| 6835 void GLES2DecoderImpl::DoGetInteger64v(GLenum pname, | 6835 void GLES2DecoderImpl::DoGetInteger64v(GLenum pname, |
| 6836 GLint64* params, | 6836 GLint64* params, |
| 6837 GLsizei params_size) { | 6837 GLsizei params_size) { |
| 6838 DCHECK(params); | 6838 DCHECK(params); |
| 6839 if (unsafe_es3_apis_enabled()) { | 6839 if (es3_apis_enabled()) { |
| 6840 switch (pname) { | 6840 switch (pname) { |
| 6841 case GL_MAX_ELEMENT_INDEX: { | 6841 case GL_MAX_ELEMENT_INDEX: { |
| 6842 DCHECK_EQ(params_size, 1); | 6842 DCHECK_EQ(params_size, 1); |
| 6843 if (gl_version_info().IsAtLeastGLES(3, 0) || | 6843 if (gl_version_info().IsAtLeastGLES(3, 0) || |
| 6844 gl_version_info().IsAtLeastGL(4, 3)) { | 6844 gl_version_info().IsAtLeastGL(4, 3)) { |
| 6845 glGetInteger64v(GL_MAX_ELEMENT_INDEX, params); | 6845 glGetInteger64v(GL_MAX_ELEMENT_INDEX, params); |
| 6846 } else { | 6846 } else { |
| 6847 // Assume that desktop GL implementations can generally support | 6847 // Assume that desktop GL implementations can generally support |
| 6848 // 32-bit indices. | 6848 // 32-bit indices. |
| 6849 if (params) { | 6849 if (params) { |
| (...skipping 861 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7711 | 7711 |
| 7712 void GLES2DecoderImpl::DoGetFramebufferAttachmentParameteriv( | 7712 void GLES2DecoderImpl::DoGetFramebufferAttachmentParameteriv( |
| 7713 GLenum target, | 7713 GLenum target, |
| 7714 GLenum attachment, | 7714 GLenum attachment, |
| 7715 GLenum pname, | 7715 GLenum pname, |
| 7716 GLint* params, | 7716 GLint* params, |
| 7717 GLsizei params_size) { | 7717 GLsizei params_size) { |
| 7718 const char kFunctionName[] = "glGetFramebufferAttachmentParameteriv"; | 7718 const char kFunctionName[] = "glGetFramebufferAttachmentParameteriv"; |
| 7719 Framebuffer* framebuffer = GetFramebufferInfoForTarget(target); | 7719 Framebuffer* framebuffer = GetFramebufferInfoForTarget(target); |
| 7720 if (!framebuffer) { | 7720 if (!framebuffer) { |
| 7721 if (!unsafe_es3_apis_enabled()) { | 7721 if (!es3_apis_enabled()) { |
| 7722 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, kFunctionName, | 7722 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, kFunctionName, |
| 7723 "no framebuffer bound"); | 7723 "no framebuffer bound"); |
| 7724 return; | 7724 return; |
| 7725 } | 7725 } |
| 7726 if (!validators_->backbuffer_attachment.IsValid(attachment)) { | 7726 if (!validators_->backbuffer_attachment.IsValid(attachment)) { |
| 7727 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, kFunctionName, | 7727 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, kFunctionName, |
| 7728 "invalid attachment for backbuffer"); | 7728 "invalid attachment for backbuffer"); |
| 7729 return; | 7729 return; |
| 7730 } | 7730 } |
| 7731 switch (pname) { | 7731 switch (pname) { |
| (...skipping 1319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9051 } | 9051 } |
| 9052 glUniform4uiv(real_location, count, const_cast<const GLuint*>(value)); | 9052 glUniform4uiv(real_location, count, const_cast<const GLuint*>(value)); |
| 9053 } | 9053 } |
| 9054 | 9054 |
| 9055 void GLES2DecoderImpl::DoUniformMatrix2fv(GLint fake_location, | 9055 void GLES2DecoderImpl::DoUniformMatrix2fv(GLint fake_location, |
| 9056 GLsizei count, | 9056 GLsizei count, |
| 9057 GLboolean transpose, | 9057 GLboolean transpose, |
| 9058 const volatile GLfloat* value) { | 9058 const volatile GLfloat* value) { |
| 9059 GLenum type = 0; | 9059 GLenum type = 0; |
| 9060 GLint real_location = -1; | 9060 GLint real_location = -1; |
| 9061 if (transpose && !unsafe_es3_apis_enabled()) { | 9061 if (transpose && !es3_apis_enabled()) { |
| 9062 LOCAL_SET_GL_ERROR( | 9062 LOCAL_SET_GL_ERROR( |
| 9063 GL_INVALID_VALUE, "glUniformMatrix2fv", "transpose not FALSE"); | 9063 GL_INVALID_VALUE, "glUniformMatrix2fv", "transpose not FALSE"); |
| 9064 return; | 9064 return; |
| 9065 } | 9065 } |
| 9066 if (!PrepForSetUniformByLocation(fake_location, | 9066 if (!PrepForSetUniformByLocation(fake_location, |
| 9067 "glUniformMatrix2fv", | 9067 "glUniformMatrix2fv", |
| 9068 Program::kUniformMatrix2f, | 9068 Program::kUniformMatrix2f, |
| 9069 &real_location, | 9069 &real_location, |
| 9070 &type, | 9070 &type, |
| 9071 &count)) { | 9071 &count)) { |
| 9072 return; | 9072 return; |
| 9073 } | 9073 } |
| 9074 glUniformMatrix2fv(real_location, count, transpose, | 9074 glUniformMatrix2fv(real_location, count, transpose, |
| 9075 const_cast<const GLfloat*>(value)); | 9075 const_cast<const GLfloat*>(value)); |
| 9076 } | 9076 } |
| 9077 | 9077 |
| 9078 void GLES2DecoderImpl::DoUniformMatrix3fv(GLint fake_location, | 9078 void GLES2DecoderImpl::DoUniformMatrix3fv(GLint fake_location, |
| 9079 GLsizei count, | 9079 GLsizei count, |
| 9080 GLboolean transpose, | 9080 GLboolean transpose, |
| 9081 const volatile GLfloat* value) { | 9081 const volatile GLfloat* value) { |
| 9082 GLenum type = 0; | 9082 GLenum type = 0; |
| 9083 GLint real_location = -1; | 9083 GLint real_location = -1; |
| 9084 if (transpose && !unsafe_es3_apis_enabled()) { | 9084 if (transpose && !es3_apis_enabled()) { |
| 9085 LOCAL_SET_GL_ERROR( | 9085 LOCAL_SET_GL_ERROR( |
| 9086 GL_INVALID_VALUE, "glUniformMatrix3fv", "transpose not FALSE"); | 9086 GL_INVALID_VALUE, "glUniformMatrix3fv", "transpose not FALSE"); |
| 9087 return; | 9087 return; |
| 9088 } | 9088 } |
| 9089 if (!PrepForSetUniformByLocation(fake_location, | 9089 if (!PrepForSetUniformByLocation(fake_location, |
| 9090 "glUniformMatrix3fv", | 9090 "glUniformMatrix3fv", |
| 9091 Program::kUniformMatrix3f, | 9091 Program::kUniformMatrix3f, |
| 9092 &real_location, | 9092 &real_location, |
| 9093 &type, | 9093 &type, |
| 9094 &count)) { | 9094 &count)) { |
| 9095 return; | 9095 return; |
| 9096 } | 9096 } |
| 9097 glUniformMatrix3fv(real_location, count, transpose, | 9097 glUniformMatrix3fv(real_location, count, transpose, |
| 9098 const_cast<const GLfloat*>(value)); | 9098 const_cast<const GLfloat*>(value)); |
| 9099 } | 9099 } |
| 9100 | 9100 |
| 9101 void GLES2DecoderImpl::DoUniformMatrix4fv(GLint fake_location, | 9101 void GLES2DecoderImpl::DoUniformMatrix4fv(GLint fake_location, |
| 9102 GLsizei count, | 9102 GLsizei count, |
| 9103 GLboolean transpose, | 9103 GLboolean transpose, |
| 9104 const volatile GLfloat* value) { | 9104 const volatile GLfloat* value) { |
| 9105 GLenum type = 0; | 9105 GLenum type = 0; |
| 9106 GLint real_location = -1; | 9106 GLint real_location = -1; |
| 9107 if (transpose && !unsafe_es3_apis_enabled()) { | 9107 if (transpose && !es3_apis_enabled()) { |
| 9108 LOCAL_SET_GL_ERROR( | 9108 LOCAL_SET_GL_ERROR( |
| 9109 GL_INVALID_VALUE, "glUniformMatrix4fv", "transpose not FALSE"); | 9109 GL_INVALID_VALUE, "glUniformMatrix4fv", "transpose not FALSE"); |
| 9110 return; | 9110 return; |
| 9111 } | 9111 } |
| 9112 if (!PrepForSetUniformByLocation(fake_location, | 9112 if (!PrepForSetUniformByLocation(fake_location, |
| 9113 "glUniformMatrix4fv", | 9113 "glUniformMatrix4fv", |
| 9114 Program::kUniformMatrix4f, | 9114 Program::kUniformMatrix4f, |
| 9115 &real_location, | 9115 &real_location, |
| 9116 &type, | 9116 &type, |
| 9117 &count)) { | 9117 &count)) { |
| (...skipping 1599 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10717 if (SetVertexAttribValue("glVertexAttribI4uiv", index, t)) { | 10717 if (SetVertexAttribValue("glVertexAttribI4uiv", index, t)) { |
| 10718 state_.SetGenericVertexAttribBaseType( | 10718 state_.SetGenericVertexAttribBaseType( |
| 10719 index, SHADER_VARIABLE_UINT); | 10719 index, SHADER_VARIABLE_UINT); |
| 10720 glVertexAttribI4uiv(index, t); | 10720 glVertexAttribI4uiv(index, t); |
| 10721 } | 10721 } |
| 10722 } | 10722 } |
| 10723 | 10723 |
| 10724 error::Error GLES2DecoderImpl::HandleVertexAttribIPointer( | 10724 error::Error GLES2DecoderImpl::HandleVertexAttribIPointer( |
| 10725 uint32_t immediate_data_size, | 10725 uint32_t immediate_data_size, |
| 10726 const volatile void* cmd_data) { | 10726 const volatile void* cmd_data) { |
| 10727 if (!unsafe_es3_apis_enabled()) | 10727 if (!es3_apis_enabled()) |
| 10728 return error::kUnknownCommand; | 10728 return error::kUnknownCommand; |
| 10729 const volatile gles2::cmds::VertexAttribIPointer& c = | 10729 const volatile gles2::cmds::VertexAttribIPointer& c = |
| 10730 *static_cast<const volatile gles2::cmds::VertexAttribIPointer*>(cmd_data); | 10730 *static_cast<const volatile gles2::cmds::VertexAttribIPointer*>(cmd_data); |
| 10731 GLuint indx = c.indx; | 10731 GLuint indx = c.indx; |
| 10732 GLint size = c.size; | 10732 GLint size = c.size; |
| 10733 GLenum type = c.type; | 10733 GLenum type = c.type; |
| 10734 GLsizei stride = c.stride; | 10734 GLsizei stride = c.stride; |
| 10735 GLsizei offset = c.offset; | 10735 GLsizei offset = c.offset; |
| 10736 | 10736 |
| 10737 if (!state_.bound_array_buffer.get() || | 10737 if (!state_.bound_array_buffer.get() || |
| (...skipping 1039 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11777 if (!bucket->GetAsString(&name_str)) { | 11777 if (!bucket->GetAsString(&name_str)) { |
| 11778 return error::kInvalidArguments; | 11778 return error::kInvalidArguments; |
| 11779 } | 11779 } |
| 11780 return GetAttribLocationHelper( | 11780 return GetAttribLocationHelper( |
| 11781 c.program, c.location_shm_id, c.location_shm_offset, name_str); | 11781 c.program, c.location_shm_id, c.location_shm_offset, name_str); |
| 11782 } | 11782 } |
| 11783 | 11783 |
| 11784 error::Error GLES2DecoderImpl::HandleGetBufferSubDataAsyncCHROMIUM( | 11784 error::Error GLES2DecoderImpl::HandleGetBufferSubDataAsyncCHROMIUM( |
| 11785 uint32_t immediate_data_size, | 11785 uint32_t immediate_data_size, |
| 11786 const volatile void* cmd_data) { | 11786 const volatile void* cmd_data) { |
| 11787 if (!unsafe_es3_apis_enabled()) { | 11787 if (!es3_apis_enabled()) { |
| 11788 return error::kUnknownCommand; | 11788 return error::kUnknownCommand; |
| 11789 } | 11789 } |
| 11790 const volatile gles2::cmds::GetBufferSubDataAsyncCHROMIUM& c = | 11790 const volatile gles2::cmds::GetBufferSubDataAsyncCHROMIUM& c = |
| 11791 *static_cast<const volatile gles2::cmds::GetBufferSubDataAsyncCHROMIUM*>( | 11791 *static_cast<const volatile gles2::cmds::GetBufferSubDataAsyncCHROMIUM*>( |
| 11792 cmd_data); | 11792 cmd_data); |
| 11793 GLenum target = static_cast<GLenum>(c.target); | 11793 GLenum target = static_cast<GLenum>(c.target); |
| 11794 GLintptr offset = static_cast<GLintptr>(c.offset); | 11794 GLintptr offset = static_cast<GLintptr>(c.offset); |
| 11795 GLsizeiptr size = static_cast<GLsizeiptr>(c.size); | 11795 GLsizeiptr size = static_cast<GLsizeiptr>(c.size); |
| 11796 uint32_t data_shm_id = static_cast<uint32_t>(c.data_shm_id); | 11796 uint32_t data_shm_id = static_cast<uint32_t>(c.data_shm_id); |
| 11797 | 11797 |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11879 if (!bucket->GetAsString(&name_str)) { | 11879 if (!bucket->GetAsString(&name_str)) { |
| 11880 return error::kInvalidArguments; | 11880 return error::kInvalidArguments; |
| 11881 } | 11881 } |
| 11882 return GetUniformLocationHelper( | 11882 return GetUniformLocationHelper( |
| 11883 c.program, c.location_shm_id, c.location_shm_offset, name_str); | 11883 c.program, c.location_shm_id, c.location_shm_offset, name_str); |
| 11884 } | 11884 } |
| 11885 | 11885 |
| 11886 error::Error GLES2DecoderImpl::HandleGetUniformIndices( | 11886 error::Error GLES2DecoderImpl::HandleGetUniformIndices( |
| 11887 uint32_t immediate_data_size, | 11887 uint32_t immediate_data_size, |
| 11888 const volatile void* cmd_data) { | 11888 const volatile void* cmd_data) { |
| 11889 if (!unsafe_es3_apis_enabled()) | 11889 if (!es3_apis_enabled()) |
| 11890 return error::kUnknownCommand; | 11890 return error::kUnknownCommand; |
| 11891 const volatile gles2::cmds::GetUniformIndices& c = | 11891 const volatile gles2::cmds::GetUniformIndices& c = |
| 11892 *static_cast<const volatile gles2::cmds::GetUniformIndices*>(cmd_data); | 11892 *static_cast<const volatile gles2::cmds::GetUniformIndices*>(cmd_data); |
| 11893 Bucket* bucket = GetBucket(c.names_bucket_id); | 11893 Bucket* bucket = GetBucket(c.names_bucket_id); |
| 11894 if (!bucket) { | 11894 if (!bucket) { |
| 11895 return error::kInvalidArguments; | 11895 return error::kInvalidArguments; |
| 11896 } | 11896 } |
| 11897 GLsizei count = 0; | 11897 GLsizei count = 0; |
| 11898 std::vector<char*> names; | 11898 std::vector<char*> names; |
| 11899 std::vector<GLint> len; | 11899 std::vector<GLint> len; |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11960 return error::kNoError; | 11960 return error::kNoError; |
| 11961 } | 11961 } |
| 11962 | 11962 |
| 11963 *location = program->GetFragDataLocation(name_str); | 11963 *location = program->GetFragDataLocation(name_str); |
| 11964 return error::kNoError; | 11964 return error::kNoError; |
| 11965 } | 11965 } |
| 11966 | 11966 |
| 11967 error::Error GLES2DecoderImpl::HandleGetFragDataLocation( | 11967 error::Error GLES2DecoderImpl::HandleGetFragDataLocation( |
| 11968 uint32_t immediate_data_size, | 11968 uint32_t immediate_data_size, |
| 11969 const volatile void* cmd_data) { | 11969 const volatile void* cmd_data) { |
| 11970 if (!unsafe_es3_apis_enabled()) | 11970 if (!es3_apis_enabled()) |
| 11971 return error::kUnknownCommand; | 11971 return error::kUnknownCommand; |
| 11972 const volatile gles2::cmds::GetFragDataLocation& c = | 11972 const volatile gles2::cmds::GetFragDataLocation& c = |
| 11973 *static_cast<const volatile gles2::cmds::GetFragDataLocation*>(cmd_data); | 11973 *static_cast<const volatile gles2::cmds::GetFragDataLocation*>(cmd_data); |
| 11974 Bucket* bucket = GetBucket(c.name_bucket_id); | 11974 Bucket* bucket = GetBucket(c.name_bucket_id); |
| 11975 if (!bucket) { | 11975 if (!bucket) { |
| 11976 return error::kInvalidArguments; | 11976 return error::kInvalidArguments; |
| 11977 } | 11977 } |
| 11978 std::string name_str; | 11978 std::string name_str; |
| 11979 if (!bucket->GetAsString(&name_str)) { | 11979 if (!bucket->GetAsString(&name_str)) { |
| 11980 return error::kInvalidArguments; | 11980 return error::kInvalidArguments; |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12028 if (!bucket->GetAsString(&name_str)) { | 12028 if (!bucket->GetAsString(&name_str)) { |
| 12029 return error::kInvalidArguments; | 12029 return error::kInvalidArguments; |
| 12030 } | 12030 } |
| 12031 return GetFragDataIndexHelper(c.program, c.index_shm_id, c.index_shm_offset, | 12031 return GetFragDataIndexHelper(c.program, c.index_shm_id, c.index_shm_offset, |
| 12032 name_str); | 12032 name_str); |
| 12033 } | 12033 } |
| 12034 | 12034 |
| 12035 error::Error GLES2DecoderImpl::HandleGetUniformBlockIndex( | 12035 error::Error GLES2DecoderImpl::HandleGetUniformBlockIndex( |
| 12036 uint32_t immediate_data_size, | 12036 uint32_t immediate_data_size, |
| 12037 const volatile void* cmd_data) { | 12037 const volatile void* cmd_data) { |
| 12038 if (!unsafe_es3_apis_enabled()) | 12038 if (!es3_apis_enabled()) |
| 12039 return error::kUnknownCommand; | 12039 return error::kUnknownCommand; |
| 12040 const volatile gles2::cmds::GetUniformBlockIndex& c = | 12040 const volatile gles2::cmds::GetUniformBlockIndex& c = |
| 12041 *static_cast<const volatile gles2::cmds::GetUniformBlockIndex*>(cmd_data); | 12041 *static_cast<const volatile gles2::cmds::GetUniformBlockIndex*>(cmd_data); |
| 12042 Bucket* bucket = GetBucket(c.name_bucket_id); | 12042 Bucket* bucket = GetBucket(c.name_bucket_id); |
| 12043 if (!bucket) { | 12043 if (!bucket) { |
| 12044 return error::kInvalidArguments; | 12044 return error::kInvalidArguments; |
| 12045 } | 12045 } |
| 12046 std::string name_str; | 12046 std::string name_str; |
| 12047 if (!bucket->GetAsString(&name_str)) { | 12047 if (!bucket->GetAsString(&name_str)) { |
| 12048 return error::kInvalidArguments; | 12048 return error::kInvalidArguments; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 12072 GLenum name = static_cast<GLenum>(c.name); | 12072 GLenum name = static_cast<GLenum>(c.name); |
| 12073 if (!validators_->string_type.IsValid(name)) { | 12073 if (!validators_->string_type.IsValid(name)) { |
| 12074 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetString", name, "name"); | 12074 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetString", name, "name"); |
| 12075 return error::kNoError; | 12075 return error::kNoError; |
| 12076 } | 12076 } |
| 12077 | 12077 |
| 12078 const char* str = nullptr; | 12078 const char* str = nullptr; |
| 12079 std::string extensions; | 12079 std::string extensions; |
| 12080 switch (name) { | 12080 switch (name) { |
| 12081 case GL_VERSION: | 12081 case GL_VERSION: |
| 12082 if (unsafe_es3_apis_enabled()) | 12082 if (es3_apis_enabled()) |
| 12083 str = "OpenGL ES 3.0 Chromium"; | 12083 str = "OpenGL ES 3.0 Chromium"; |
| 12084 else | 12084 else |
| 12085 str = "OpenGL ES 2.0 Chromium"; | 12085 str = "OpenGL ES 2.0 Chromium"; |
| 12086 break; | 12086 break; |
| 12087 case GL_SHADING_LANGUAGE_VERSION: | 12087 case GL_SHADING_LANGUAGE_VERSION: |
| 12088 if (unsafe_es3_apis_enabled()) | 12088 if (es3_apis_enabled()) |
| 12089 str = "OpenGL ES GLSL ES 3.0 Chromium"; | 12089 str = "OpenGL ES GLSL ES 3.0 Chromium"; |
| 12090 else | 12090 else |
| 12091 str = "OpenGL ES GLSL ES 1.0 Chromium"; | 12091 str = "OpenGL ES GLSL ES 1.0 Chromium"; |
| 12092 break; | 12092 break; |
| 12093 case GL_RENDERER: | 12093 case GL_RENDERER: |
| 12094 case GL_VENDOR: | 12094 case GL_VENDOR: |
| 12095 // Return the unmasked VENDOR/RENDERER string for WebGL contexts. | 12095 // Return the unmasked VENDOR/RENDERER string for WebGL contexts. |
| 12096 // They are used by WEBGL_debug_renderer_info. | 12096 // They are used by WEBGL_debug_renderer_info. |
| 12097 if (!feature_info_->IsWebGLContext()) | 12097 if (!feature_info_->IsWebGLContext()) |
| 12098 str = "Chromium"; | 12098 str = "Chromium"; |
| (...skipping 1296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13395 &texture_state_, &state_, &framebuffer_state_, func_name, args); | 13395 &texture_state_, &state_, &framebuffer_state_, func_name, args); |
| 13396 | 13396 |
| 13397 // This may be a slow command. Exit command processing to allow for | 13397 // This may be a slow command. Exit command processing to allow for |
| 13398 // context preemption and GPU watchdog checks. | 13398 // context preemption and GPU watchdog checks. |
| 13399 ExitCommandProcessingEarly(); | 13399 ExitCommandProcessingEarly(); |
| 13400 return error::kNoError; | 13400 return error::kNoError; |
| 13401 } | 13401 } |
| 13402 | 13402 |
| 13403 error::Error GLES2DecoderImpl::HandleTexImage3D(uint32_t immediate_data_size, | 13403 error::Error GLES2DecoderImpl::HandleTexImage3D(uint32_t immediate_data_size, |
| 13404 const volatile void* cmd_data) { | 13404 const volatile void* cmd_data) { |
| 13405 if (!unsafe_es3_apis_enabled()) | 13405 if (!es3_apis_enabled()) |
| 13406 return error::kUnknownCommand; | 13406 return error::kUnknownCommand; |
| 13407 | 13407 |
| 13408 const char* func_name = "glTexImage3D"; | 13408 const char* func_name = "glTexImage3D"; |
| 13409 const volatile gles2::cmds::TexImage3D& c = | 13409 const volatile gles2::cmds::TexImage3D& c = |
| 13410 *static_cast<const volatile gles2::cmds::TexImage3D*>(cmd_data); | 13410 *static_cast<const volatile gles2::cmds::TexImage3D*>(cmd_data); |
| 13411 TRACE_EVENT2("gpu", "GLES2DecoderImpl::HandleTexImage3D", | 13411 TRACE_EVENT2("gpu", "GLES2DecoderImpl::HandleTexImage3D", |
| 13412 "widthXheight", c.width * c.height, "depth", c.depth); | 13412 "widthXheight", c.width * c.height, "depth", c.depth); |
| 13413 // Set as failed for now, but if it successed, this will be set to not failed. | 13413 // Set as failed for now, but if it successed, this will be set to not failed. |
| 13414 texture_state_.tex_image_failed = true; | 13414 texture_state_.tex_image_failed = true; |
| 13415 GLenum target = static_cast<GLenum>(c.target); | 13415 GLenum target = static_cast<GLenum>(c.target); |
| (...skipping 741 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14157 | 14157 |
| 14158 // This may be a slow command. Exit command processing to allow for | 14158 // This may be a slow command. Exit command processing to allow for |
| 14159 // context preemption and GPU watchdog checks. | 14159 // context preemption and GPU watchdog checks. |
| 14160 ExitCommandProcessingEarly(); | 14160 ExitCommandProcessingEarly(); |
| 14161 return error::kNoError; | 14161 return error::kNoError; |
| 14162 } | 14162 } |
| 14163 | 14163 |
| 14164 error::Error GLES2DecoderImpl::HandleTexSubImage3D( | 14164 error::Error GLES2DecoderImpl::HandleTexSubImage3D( |
| 14165 uint32_t immediate_data_size, | 14165 uint32_t immediate_data_size, |
| 14166 const volatile void* cmd_data) { | 14166 const volatile void* cmd_data) { |
| 14167 if (!unsafe_es3_apis_enabled()) | 14167 if (!es3_apis_enabled()) |
| 14168 return error::kUnknownCommand; | 14168 return error::kUnknownCommand; |
| 14169 | 14169 |
| 14170 const char* func_name = "glTexSubImage3D"; | 14170 const char* func_name = "glTexSubImage3D"; |
| 14171 const volatile gles2::cmds::TexSubImage3D& c = | 14171 const volatile gles2::cmds::TexSubImage3D& c = |
| 14172 *static_cast<const volatile gles2::cmds::TexSubImage3D*>(cmd_data); | 14172 *static_cast<const volatile gles2::cmds::TexSubImage3D*>(cmd_data); |
| 14173 TRACE_EVENT2("gpu", "GLES2DecoderImpl::HandleTexSubImage3D", | 14173 TRACE_EVENT2("gpu", "GLES2DecoderImpl::HandleTexSubImage3D", |
| 14174 "widthXheight", c.width * c.height, "depth", c.depth); | 14174 "widthXheight", c.width * c.height, "depth", c.depth); |
| 14175 GLboolean internal = static_cast<GLboolean>(c.internal); | 14175 GLboolean internal = static_cast<GLboolean>(c.internal); |
| 14176 if (internal == GL_TRUE && texture_state_.tex_image_failed) | 14176 if (internal == GL_TRUE && texture_state_.tex_image_failed) |
| 14177 return error::kNoError; | 14177 return error::kNoError; |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14373 &result_size)) { | 14373 &result_size)) { |
| 14374 glGetUniformiv( | 14374 glGetUniformiv( |
| 14375 service_id, real_location, result->GetData()); | 14375 service_id, real_location, result->GetData()); |
| 14376 } | 14376 } |
| 14377 return error; | 14377 return error; |
| 14378 } | 14378 } |
| 14379 | 14379 |
| 14380 error::Error GLES2DecoderImpl::HandleGetUniformuiv( | 14380 error::Error GLES2DecoderImpl::HandleGetUniformuiv( |
| 14381 uint32_t immediate_data_size, | 14381 uint32_t immediate_data_size, |
| 14382 const volatile void* cmd_data) { | 14382 const volatile void* cmd_data) { |
| 14383 if (!unsafe_es3_apis_enabled()) | 14383 if (!es3_apis_enabled()) |
| 14384 return error::kUnknownCommand; | 14384 return error::kUnknownCommand; |
| 14385 | 14385 |
| 14386 const volatile gles2::cmds::GetUniformuiv& c = | 14386 const volatile gles2::cmds::GetUniformuiv& c = |
| 14387 *static_cast<const volatile gles2::cmds::GetUniformuiv*>(cmd_data); | 14387 *static_cast<const volatile gles2::cmds::GetUniformuiv*>(cmd_data); |
| 14388 GLuint program = c.program; | 14388 GLuint program = c.program; |
| 14389 GLint fake_location = c.location; | 14389 GLint fake_location = c.location; |
| 14390 GLuint service_id; | 14390 GLuint service_id; |
| 14391 GLenum result_type; | 14391 GLenum result_type; |
| 14392 GLsizei result_size; | 14392 GLsizei result_size; |
| 14393 GLint real_location = -1; | 14393 GLint real_location = -1; |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14550 result->size = uniform_info->size; | 14550 result->size = uniform_info->size; |
| 14551 result->type = uniform_info->type; | 14551 result->type = uniform_info->type; |
| 14552 Bucket* bucket = CreateBucket(name_bucket_id); | 14552 Bucket* bucket = CreateBucket(name_bucket_id); |
| 14553 bucket->SetFromString(uniform_info->name.c_str()); | 14553 bucket->SetFromString(uniform_info->name.c_str()); |
| 14554 return error::kNoError; | 14554 return error::kNoError; |
| 14555 } | 14555 } |
| 14556 | 14556 |
| 14557 error::Error GLES2DecoderImpl::HandleGetActiveUniformBlockiv( | 14557 error::Error GLES2DecoderImpl::HandleGetActiveUniformBlockiv( |
| 14558 uint32_t immediate_data_size, | 14558 uint32_t immediate_data_size, |
| 14559 const volatile void* cmd_data) { | 14559 const volatile void* cmd_data) { |
| 14560 if (!unsafe_es3_apis_enabled()) | 14560 if (!es3_apis_enabled()) |
| 14561 return error::kUnknownCommand; | 14561 return error::kUnknownCommand; |
| 14562 const volatile gles2::cmds::GetActiveUniformBlockiv& c = | 14562 const volatile gles2::cmds::GetActiveUniformBlockiv& c = |
| 14563 *static_cast<const volatile gles2::cmds::GetActiveUniformBlockiv*>( | 14563 *static_cast<const volatile gles2::cmds::GetActiveUniformBlockiv*>( |
| 14564 cmd_data); | 14564 cmd_data); |
| 14565 GLuint program_id = c.program; | 14565 GLuint program_id = c.program; |
| 14566 GLuint index = static_cast<GLuint>(c.index); | 14566 GLuint index = static_cast<GLuint>(c.index); |
| 14567 GLenum pname = static_cast<GLenum>(c.pname); | 14567 GLenum pname = static_cast<GLenum>(c.pname); |
| 14568 Program* program = GetProgramInfoNotShader( | 14568 Program* program = GetProgramInfoNotShader( |
| 14569 program_id, "glGetActiveUniformBlockiv"); | 14569 program_id, "glGetActiveUniformBlockiv"); |
| 14570 if (!program) { | 14570 if (!program) { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14609 result->SetNumResults(num_values); | 14609 result->SetNumResults(num_values); |
| 14610 } else { | 14610 } else { |
| 14611 LOCAL_SET_GL_ERROR(error, "GetActiveUniformBlockiv", ""); | 14611 LOCAL_SET_GL_ERROR(error, "GetActiveUniformBlockiv", ""); |
| 14612 } | 14612 } |
| 14613 return error::kNoError; | 14613 return error::kNoError; |
| 14614 } | 14614 } |
| 14615 | 14615 |
| 14616 error::Error GLES2DecoderImpl::HandleGetActiveUniformBlockName( | 14616 error::Error GLES2DecoderImpl::HandleGetActiveUniformBlockName( |
| 14617 uint32_t immediate_data_size, | 14617 uint32_t immediate_data_size, |
| 14618 const volatile void* cmd_data) { | 14618 const volatile void* cmd_data) { |
| 14619 if (!unsafe_es3_apis_enabled()) | 14619 if (!es3_apis_enabled()) |
| 14620 return error::kUnknownCommand; | 14620 return error::kUnknownCommand; |
| 14621 const volatile gles2::cmds::GetActiveUniformBlockName& c = | 14621 const volatile gles2::cmds::GetActiveUniformBlockName& c = |
| 14622 *static_cast<const volatile gles2::cmds::GetActiveUniformBlockName*>( | 14622 *static_cast<const volatile gles2::cmds::GetActiveUniformBlockName*>( |
| 14623 cmd_data); | 14623 cmd_data); |
| 14624 GLuint program_id = c.program; | 14624 GLuint program_id = c.program; |
| 14625 GLuint index = c.index; | 14625 GLuint index = c.index; |
| 14626 uint32_t name_bucket_id = c.name_bucket_id; | 14626 uint32_t name_bucket_id = c.name_bucket_id; |
| 14627 typedef cmds::GetActiveUniformBlockName::Result Result; | 14627 typedef cmds::GetActiveUniformBlockName::Result Result; |
| 14628 Result* result = GetSharedMemoryAs<Result*>( | 14628 Result* result = GetSharedMemoryAs<Result*>( |
| 14629 c.result_shm_id, c.result_shm_offset, sizeof(*result)); | 14629 c.result_shm_id, c.result_shm_offset, sizeof(*result)); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14664 Bucket* bucket = CreateBucket(name_bucket_id); | 14664 Bucket* bucket = CreateBucket(name_bucket_id); |
| 14665 DCHECK_GT(buf_size, length); | 14665 DCHECK_GT(buf_size, length); |
| 14666 DCHECK_EQ(0, buffer[length]); | 14666 DCHECK_EQ(0, buffer[length]); |
| 14667 bucket->SetFromString(&buffer[0]); | 14667 bucket->SetFromString(&buffer[0]); |
| 14668 return error::kNoError; | 14668 return error::kNoError; |
| 14669 } | 14669 } |
| 14670 | 14670 |
| 14671 error::Error GLES2DecoderImpl::HandleGetActiveUniformsiv( | 14671 error::Error GLES2DecoderImpl::HandleGetActiveUniformsiv( |
| 14672 uint32_t immediate_data_size, | 14672 uint32_t immediate_data_size, |
| 14673 const volatile void* cmd_data) { | 14673 const volatile void* cmd_data) { |
| 14674 if (!unsafe_es3_apis_enabled()) | 14674 if (!es3_apis_enabled()) |
| 14675 return error::kUnknownCommand; | 14675 return error::kUnknownCommand; |
| 14676 const volatile gles2::cmds::GetActiveUniformsiv& c = | 14676 const volatile gles2::cmds::GetActiveUniformsiv& c = |
| 14677 *static_cast<const volatile gles2::cmds::GetActiveUniformsiv*>(cmd_data); | 14677 *static_cast<const volatile gles2::cmds::GetActiveUniformsiv*>(cmd_data); |
| 14678 GLuint program_id = c.program; | 14678 GLuint program_id = c.program; |
| 14679 GLenum pname = static_cast<GLenum>(c.pname); | 14679 GLenum pname = static_cast<GLenum>(c.pname); |
| 14680 Bucket* bucket = GetBucket(c.indices_bucket_id); | 14680 Bucket* bucket = GetBucket(c.indices_bucket_id); |
| 14681 if (!bucket) { | 14681 if (!bucket) { |
| 14682 return error::kInvalidArguments; | 14682 return error::kInvalidArguments; |
| 14683 } | 14683 } |
| 14684 if (!validators_->uniform_parameter.IsValid(pname)) { | 14684 if (!validators_->uniform_parameter.IsValid(pname)) { |
| (...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15108 if (!program || !program->IsValid()) { | 15108 if (!program || !program->IsValid()) { |
| 15109 return error::kNoError; | 15109 return error::kNoError; |
| 15110 } | 15110 } |
| 15111 program->GetProgramInfo(program_manager(), bucket); | 15111 program->GetProgramInfo(program_manager(), bucket); |
| 15112 return error::kNoError; | 15112 return error::kNoError; |
| 15113 } | 15113 } |
| 15114 | 15114 |
| 15115 error::Error GLES2DecoderImpl::HandleGetUniformBlocksCHROMIUM( | 15115 error::Error GLES2DecoderImpl::HandleGetUniformBlocksCHROMIUM( |
| 15116 uint32_t immediate_data_size, | 15116 uint32_t immediate_data_size, |
| 15117 const volatile void* cmd_data) { | 15117 const volatile void* cmd_data) { |
| 15118 if (!unsafe_es3_apis_enabled()) | 15118 if (!es3_apis_enabled()) |
| 15119 return error::kUnknownCommand; | 15119 return error::kUnknownCommand; |
| 15120 const volatile gles2::cmds::GetUniformBlocksCHROMIUM& c = | 15120 const volatile gles2::cmds::GetUniformBlocksCHROMIUM& c = |
| 15121 *static_cast<const volatile gles2::cmds::GetUniformBlocksCHROMIUM*>( | 15121 *static_cast<const volatile gles2::cmds::GetUniformBlocksCHROMIUM*>( |
| 15122 cmd_data); | 15122 cmd_data); |
| 15123 GLuint program_id = static_cast<GLuint>(c.program); | 15123 GLuint program_id = static_cast<GLuint>(c.program); |
| 15124 uint32_t bucket_id = c.bucket_id; | 15124 uint32_t bucket_id = c.bucket_id; |
| 15125 Bucket* bucket = CreateBucket(bucket_id); | 15125 Bucket* bucket = CreateBucket(bucket_id); |
| 15126 bucket->SetSize(sizeof(UniformBlocksHeader)); // in case we fail. | 15126 bucket->SetSize(sizeof(UniformBlocksHeader)); // in case we fail. |
| 15127 Program* program = NULL; | 15127 Program* program = NULL; |
| 15128 program = GetProgram(program_id); | 15128 program = GetProgram(program_id); |
| 15129 if (!program || !program->IsValid()) { | 15129 if (!program || !program->IsValid()) { |
| 15130 return error::kNoError; | 15130 return error::kNoError; |
| 15131 } | 15131 } |
| 15132 program->GetUniformBlocks(bucket); | 15132 program->GetUniformBlocks(bucket); |
| 15133 return error::kNoError; | 15133 return error::kNoError; |
| 15134 } | 15134 } |
| 15135 | 15135 |
| 15136 error::Error GLES2DecoderImpl::HandleGetUniformsES3CHROMIUM( | 15136 error::Error GLES2DecoderImpl::HandleGetUniformsES3CHROMIUM( |
| 15137 uint32_t immediate_data_size, | 15137 uint32_t immediate_data_size, |
| 15138 const volatile void* cmd_data) { | 15138 const volatile void* cmd_data) { |
| 15139 if (!unsafe_es3_apis_enabled()) | 15139 if (!es3_apis_enabled()) |
| 15140 return error::kUnknownCommand; | 15140 return error::kUnknownCommand; |
| 15141 const volatile gles2::cmds::GetUniformsES3CHROMIUM& c = | 15141 const volatile gles2::cmds::GetUniformsES3CHROMIUM& c = |
| 15142 *static_cast<const volatile gles2::cmds::GetUniformsES3CHROMIUM*>( | 15142 *static_cast<const volatile gles2::cmds::GetUniformsES3CHROMIUM*>( |
| 15143 cmd_data); | 15143 cmd_data); |
| 15144 GLuint program_id = static_cast<GLuint>(c.program); | 15144 GLuint program_id = static_cast<GLuint>(c.program); |
| 15145 uint32_t bucket_id = c.bucket_id; | 15145 uint32_t bucket_id = c.bucket_id; |
| 15146 Bucket* bucket = CreateBucket(bucket_id); | 15146 Bucket* bucket = CreateBucket(bucket_id); |
| 15147 bucket->SetSize(sizeof(UniformsES3Header)); // in case we fail. | 15147 bucket->SetSize(sizeof(UniformsES3Header)); // in case we fail. |
| 15148 Program* program = NULL; | 15148 Program* program = NULL; |
| 15149 program = GetProgram(program_id); | 15149 program = GetProgram(program_id); |
| 15150 if (!program || !program->IsValid()) { | 15150 if (!program || !program->IsValid()) { |
| 15151 return error::kNoError; | 15151 return error::kNoError; |
| 15152 } | 15152 } |
| 15153 program->GetUniformsES3(bucket); | 15153 program->GetUniformsES3(bucket); |
| 15154 return error::kNoError; | 15154 return error::kNoError; |
| 15155 } | 15155 } |
| 15156 | 15156 |
| 15157 error::Error GLES2DecoderImpl::HandleGetTransformFeedbackVarying( | 15157 error::Error GLES2DecoderImpl::HandleGetTransformFeedbackVarying( |
| 15158 uint32_t immediate_data_size, | 15158 uint32_t immediate_data_size, |
| 15159 const volatile void* cmd_data) { | 15159 const volatile void* cmd_data) { |
| 15160 if (!unsafe_es3_apis_enabled()) | 15160 if (!es3_apis_enabled()) |
| 15161 return error::kUnknownCommand; | 15161 return error::kUnknownCommand; |
| 15162 const volatile gles2::cmds::GetTransformFeedbackVarying& c = | 15162 const volatile gles2::cmds::GetTransformFeedbackVarying& c = |
| 15163 *static_cast<const volatile gles2::cmds::GetTransformFeedbackVarying*>( | 15163 *static_cast<const volatile gles2::cmds::GetTransformFeedbackVarying*>( |
| 15164 cmd_data); | 15164 cmd_data); |
| 15165 GLuint program_id = c.program; | 15165 GLuint program_id = c.program; |
| 15166 GLuint index = c.index; | 15166 GLuint index = c.index; |
| 15167 uint32_t name_bucket_id = c.name_bucket_id; | 15167 uint32_t name_bucket_id = c.name_bucket_id; |
| 15168 typedef cmds::GetTransformFeedbackVarying::Result Result; | 15168 typedef cmds::GetTransformFeedbackVarying::Result Result; |
| 15169 Result* result = GetSharedMemoryAs<Result*>( | 15169 Result* result = GetSharedMemoryAs<Result*>( |
| 15170 c.result_shm_id, c.result_shm_offset, sizeof(*result)); | 15170 c.result_shm_id, c.result_shm_offset, sizeof(*result)); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15210 Bucket* bucket = CreateBucket(name_bucket_id); | 15210 Bucket* bucket = CreateBucket(name_bucket_id); |
| 15211 DCHECK(length >= 0 && length < max_length); | 15211 DCHECK(length >= 0 && length < max_length); |
| 15212 buffer[length] = '\0'; // Just to be safe. | 15212 buffer[length] = '\0'; // Just to be safe. |
| 15213 bucket->SetFromString(&buffer[0]); | 15213 bucket->SetFromString(&buffer[0]); |
| 15214 return error::kNoError; | 15214 return error::kNoError; |
| 15215 } | 15215 } |
| 15216 | 15216 |
| 15217 error::Error GLES2DecoderImpl::HandleGetTransformFeedbackVaryingsCHROMIUM( | 15217 error::Error GLES2DecoderImpl::HandleGetTransformFeedbackVaryingsCHROMIUM( |
| 15218 uint32_t immediate_data_size, | 15218 uint32_t immediate_data_size, |
| 15219 const volatile void* cmd_data) { | 15219 const volatile void* cmd_data) { |
| 15220 if (!unsafe_es3_apis_enabled()) | 15220 if (!es3_apis_enabled()) |
| 15221 return error::kUnknownCommand; | 15221 return error::kUnknownCommand; |
| 15222 const volatile gles2::cmds::GetTransformFeedbackVaryingsCHROMIUM& c = | 15222 const volatile gles2::cmds::GetTransformFeedbackVaryingsCHROMIUM& c = |
| 15223 *static_cast< | 15223 *static_cast< |
| 15224 const volatile gles2::cmds::GetTransformFeedbackVaryingsCHROMIUM*>( | 15224 const volatile gles2::cmds::GetTransformFeedbackVaryingsCHROMIUM*>( |
| 15225 cmd_data); | 15225 cmd_data); |
| 15226 GLuint program_id = static_cast<GLuint>(c.program); | 15226 GLuint program_id = static_cast<GLuint>(c.program); |
| 15227 uint32_t bucket_id = c.bucket_id; | 15227 uint32_t bucket_id = c.bucket_id; |
| 15228 Bucket* bucket = CreateBucket(bucket_id); | 15228 Bucket* bucket = CreateBucket(bucket_id); |
| 15229 bucket->SetSize(sizeof(TransformFeedbackVaryingsHeader)); // in case we fail. | 15229 bucket->SetSize(sizeof(TransformFeedbackVaryingsHeader)); // in case we fail. |
| 15230 Program* program = NULL; | 15230 Program* program = NULL; |
| (...skipping 1796 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 17027 memcpy(target_matrix, kIdentityMatrix, sizeof(kIdentityMatrix)); | 17027 memcpy(target_matrix, kIdentityMatrix, sizeof(kIdentityMatrix)); |
| 17028 // The matrix_mode is either GL_PATH_MODELVIEW_NV or GL_PATH_PROJECTION_NV | 17028 // The matrix_mode is either GL_PATH_MODELVIEW_NV or GL_PATH_PROJECTION_NV |
| 17029 // since the values of the _NV and _CHROMIUM tokens match. | 17029 // since the values of the _NV and _CHROMIUM tokens match. |
| 17030 glMatrixLoadIdentityEXT(matrix_mode); | 17030 glMatrixLoadIdentityEXT(matrix_mode); |
| 17031 } | 17031 } |
| 17032 | 17032 |
| 17033 error::Error GLES2DecoderImpl::HandleUniformBlockBinding( | 17033 error::Error GLES2DecoderImpl::HandleUniformBlockBinding( |
| 17034 uint32_t immediate_data_size, | 17034 uint32_t immediate_data_size, |
| 17035 const volatile void* cmd_data) { | 17035 const volatile void* cmd_data) { |
| 17036 const char* func_name = "glUniformBlockBinding"; | 17036 const char* func_name = "glUniformBlockBinding"; |
| 17037 if (!unsafe_es3_apis_enabled()) | 17037 if (!es3_apis_enabled()) |
| 17038 return error::kUnknownCommand; | 17038 return error::kUnknownCommand; |
| 17039 const volatile gles2::cmds::UniformBlockBinding& c = | 17039 const volatile gles2::cmds::UniformBlockBinding& c = |
| 17040 *static_cast<const volatile gles2::cmds::UniformBlockBinding*>(cmd_data); | 17040 *static_cast<const volatile gles2::cmds::UniformBlockBinding*>(cmd_data); |
| 17041 GLuint client_id = c.program; | 17041 GLuint client_id = c.program; |
| 17042 GLuint index = static_cast<GLuint>(c.index); | 17042 GLuint index = static_cast<GLuint>(c.index); |
| 17043 GLuint binding = static_cast<GLuint>(c.binding); | 17043 GLuint binding = static_cast<GLuint>(c.binding); |
| 17044 Program* program = GetProgramInfoNotShader(client_id, func_name); | 17044 Program* program = GetProgramInfoNotShader(client_id, func_name); |
| 17045 if (!program) { | 17045 if (!program) { |
| 17046 return error::kNoError; | 17046 return error::kNoError; |
| 17047 } | 17047 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 17058 GLuint service_id = program->service_id(); | 17058 GLuint service_id = program->service_id(); |
| 17059 glUniformBlockBinding(service_id, index, binding); | 17059 glUniformBlockBinding(service_id, index, binding); |
| 17060 program->SetUniformBlockBinding(index, binding); | 17060 program->SetUniformBlockBinding(index, binding); |
| 17061 return error::kNoError; | 17061 return error::kNoError; |
| 17062 } | 17062 } |
| 17063 | 17063 |
| 17064 error::Error GLES2DecoderImpl::HandleClientWaitSync( | 17064 error::Error GLES2DecoderImpl::HandleClientWaitSync( |
| 17065 uint32_t immediate_data_size, | 17065 uint32_t immediate_data_size, |
| 17066 const volatile void* cmd_data) { | 17066 const volatile void* cmd_data) { |
| 17067 const char* function_name = "glClientWaitSync"; | 17067 const char* function_name = "glClientWaitSync"; |
| 17068 if (!unsafe_es3_apis_enabled()) | 17068 if (!es3_apis_enabled()) |
| 17069 return error::kUnknownCommand; | 17069 return error::kUnknownCommand; |
| 17070 const volatile gles2::cmds::ClientWaitSync& c = | 17070 const volatile gles2::cmds::ClientWaitSync& c = |
| 17071 *static_cast<const volatile gles2::cmds::ClientWaitSync*>(cmd_data); | 17071 *static_cast<const volatile gles2::cmds::ClientWaitSync*>(cmd_data); |
| 17072 const GLuint sync = static_cast<GLuint>(c.sync); | 17072 const GLuint sync = static_cast<GLuint>(c.sync); |
| 17073 GLbitfield flags = static_cast<GLbitfield>(c.flags); | 17073 GLbitfield flags = static_cast<GLbitfield>(c.flags); |
| 17074 const GLuint64 timeout = c.timeout(); | 17074 const GLuint64 timeout = c.timeout(); |
| 17075 typedef cmds::ClientWaitSync::Result Result; | 17075 typedef cmds::ClientWaitSync::Result Result; |
| 17076 Result* result_dst = GetSharedMemoryAs<Result*>( | 17076 Result* result_dst = GetSharedMemoryAs<Result*>( |
| 17077 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); | 17077 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); |
| 17078 if (!result_dst) { | 17078 if (!result_dst) { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 17107 NOTREACHED(); | 17107 NOTREACHED(); |
| 17108 break; | 17108 break; |
| 17109 } | 17109 } |
| 17110 *result_dst = status; | 17110 *result_dst = status; |
| 17111 return error::kNoError; | 17111 return error::kNoError; |
| 17112 } | 17112 } |
| 17113 | 17113 |
| 17114 error::Error GLES2DecoderImpl::HandleWaitSync(uint32_t immediate_data_size, | 17114 error::Error GLES2DecoderImpl::HandleWaitSync(uint32_t immediate_data_size, |
| 17115 const volatile void* cmd_data) { | 17115 const volatile void* cmd_data) { |
| 17116 const char* function_name = "glWaitSync"; | 17116 const char* function_name = "glWaitSync"; |
| 17117 if (!unsafe_es3_apis_enabled()) | 17117 if (!es3_apis_enabled()) |
| 17118 return error::kUnknownCommand; | 17118 return error::kUnknownCommand; |
| 17119 const volatile gles2::cmds::WaitSync& c = | 17119 const volatile gles2::cmds::WaitSync& c = |
| 17120 *static_cast<const volatile gles2::cmds::WaitSync*>(cmd_data); | 17120 *static_cast<const volatile gles2::cmds::WaitSync*>(cmd_data); |
| 17121 const GLuint sync = static_cast<GLuint>(c.sync); | 17121 const GLuint sync = static_cast<GLuint>(c.sync); |
| 17122 const GLbitfield flags = static_cast<GLbitfield>(c.flags); | 17122 const GLbitfield flags = static_cast<GLbitfield>(c.flags); |
| 17123 const GLuint64 timeout = c.timeout(); | 17123 const GLuint64 timeout = c.timeout(); |
| 17124 GLsync service_sync = 0; | 17124 GLsync service_sync = 0; |
| 17125 if (!group_->GetSyncServiceId(sync, &service_sync)) { | 17125 if (!group_->GetSyncServiceId(sync, &service_sync)) { |
| 17126 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, "invalid sync"); | 17126 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, "invalid sync"); |
| 17127 return error::kNoError; | 17127 return error::kNoError; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 17147 if (flags != 0) { | 17147 if (flags != 0) { |
| 17148 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, "invalid flags"); | 17148 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, "invalid flags"); |
| 17149 return 0; | 17149 return 0; |
| 17150 } | 17150 } |
| 17151 return glFenceSync(condition, flags); | 17151 return glFenceSync(condition, flags); |
| 17152 } | 17152 } |
| 17153 | 17153 |
| 17154 error::Error GLES2DecoderImpl::HandleGetInternalformativ( | 17154 error::Error GLES2DecoderImpl::HandleGetInternalformativ( |
| 17155 uint32_t immediate_data_size, | 17155 uint32_t immediate_data_size, |
| 17156 const volatile void* cmd_data) { | 17156 const volatile void* cmd_data) { |
| 17157 if (!unsafe_es3_apis_enabled()) | 17157 if (!es3_apis_enabled()) |
| 17158 return error::kUnknownCommand; | 17158 return error::kUnknownCommand; |
| 17159 const volatile gles2::cmds::GetInternalformativ& c = | 17159 const volatile gles2::cmds::GetInternalformativ& c = |
| 17160 *static_cast<const volatile gles2::cmds::GetInternalformativ*>(cmd_data); | 17160 *static_cast<const volatile gles2::cmds::GetInternalformativ*>(cmd_data); |
| 17161 GLenum target = static_cast<GLenum>(c.target); | 17161 GLenum target = static_cast<GLenum>(c.target); |
| 17162 GLenum format = static_cast<GLenum>(c.format); | 17162 GLenum format = static_cast<GLenum>(c.format); |
| 17163 GLenum pname = static_cast<GLenum>(c.pname); | 17163 GLenum pname = static_cast<GLenum>(c.pname); |
| 17164 if (!validators_->render_buffer_target.IsValid(target)) { | 17164 if (!validators_->render_buffer_target.IsValid(target)) { |
| 17165 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetInternalformativ", target, "target"); | 17165 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetInternalformativ", target, "target"); |
| 17166 return error::kNoError; | 17166 return error::kNoError; |
| 17167 } | 17167 } |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 17241 } | 17241 } |
| 17242 } else { | 17242 } else { |
| 17243 glGetInternalformativ(target, format, pname, num_values, params); | 17243 glGetInternalformativ(target, format, pname, num_values, params); |
| 17244 } | 17244 } |
| 17245 result->SetNumResults(num_values); | 17245 result->SetNumResults(num_values); |
| 17246 return error::kNoError; | 17246 return error::kNoError; |
| 17247 } | 17247 } |
| 17248 | 17248 |
| 17249 error::Error GLES2DecoderImpl::HandleMapBufferRange( | 17249 error::Error GLES2DecoderImpl::HandleMapBufferRange( |
| 17250 uint32_t immediate_data_size, const volatile void* cmd_data) { | 17250 uint32_t immediate_data_size, const volatile void* cmd_data) { |
| 17251 if (!unsafe_es3_apis_enabled()) { | 17251 if (!es3_apis_enabled()) { |
| 17252 return error::kUnknownCommand; | 17252 return error::kUnknownCommand; |
| 17253 } | 17253 } |
| 17254 | 17254 |
| 17255 const char* func_name = "glMapBufferRange"; | 17255 const char* func_name = "glMapBufferRange"; |
| 17256 const volatile gles2::cmds::MapBufferRange& c = | 17256 const volatile gles2::cmds::MapBufferRange& c = |
| 17257 *static_cast<const volatile gles2::cmds::MapBufferRange*>(cmd_data); | 17257 *static_cast<const volatile gles2::cmds::MapBufferRange*>(cmd_data); |
| 17258 GLenum target = static_cast<GLenum>(c.target); | 17258 GLenum target = static_cast<GLenum>(c.target); |
| 17259 GLbitfield access = static_cast<GLbitfield>(c.access); | 17259 GLbitfield access = static_cast<GLbitfield>(c.access); |
| 17260 GLintptr offset = static_cast<GLintptr>(c.offset); | 17260 GLintptr offset = static_cast<GLintptr>(c.offset); |
| 17261 GLsizeiptr size = static_cast<GLsizeiptr>(c.size); | 17261 GLsizeiptr size = static_cast<GLsizeiptr>(c.size); |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 17352 static_cast<unsigned int>(data_shm_offset)); | 17352 static_cast<unsigned int>(data_shm_offset)); |
| 17353 if ((access & GL_MAP_INVALIDATE_RANGE_BIT) == 0) { | 17353 if ((access & GL_MAP_INVALIDATE_RANGE_BIT) == 0) { |
| 17354 memcpy(mem, ptr, size); | 17354 memcpy(mem, ptr, size); |
| 17355 } | 17355 } |
| 17356 *result = 1; | 17356 *result = 1; |
| 17357 return error::kNoError; | 17357 return error::kNoError; |
| 17358 } | 17358 } |
| 17359 | 17359 |
| 17360 error::Error GLES2DecoderImpl::HandleUnmapBuffer( | 17360 error::Error GLES2DecoderImpl::HandleUnmapBuffer( |
| 17361 uint32_t immediate_data_size, const volatile void* cmd_data) { | 17361 uint32_t immediate_data_size, const volatile void* cmd_data) { |
| 17362 if (!unsafe_es3_apis_enabled()) { | 17362 if (!es3_apis_enabled()) { |
| 17363 return error::kUnknownCommand; | 17363 return error::kUnknownCommand; |
| 17364 } | 17364 } |
| 17365 const char* func_name = "glUnmapBuffer"; | 17365 const char* func_name = "glUnmapBuffer"; |
| 17366 | 17366 |
| 17367 const volatile gles2::cmds::UnmapBuffer& c = | 17367 const volatile gles2::cmds::UnmapBuffer& c = |
| 17368 *static_cast<const volatile gles2::cmds::UnmapBuffer*>(cmd_data); | 17368 *static_cast<const volatile gles2::cmds::UnmapBuffer*>(cmd_data); |
| 17369 GLenum target = static_cast<GLenum>(c.target); | 17369 GLenum target = static_cast<GLenum>(c.target); |
| 17370 | 17370 |
| 17371 if (!validators_->buffer_target.IsValid(target)) { | 17371 if (!validators_->buffer_target.IsValid(target)) { |
| 17372 LOCAL_SET_GL_ERROR_INVALID_ENUM(func_name, target, "target"); | 17372 LOCAL_SET_GL_ERROR_INVALID_ENUM(func_name, target, "target"); |
| (...skipping 1275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 18648 } | 18648 } |
| 18649 | 18649 |
| 18650 // Include the auto-generated part of this file. We split this because it means | 18650 // Include the auto-generated part of this file. We split this because it means |
| 18651 // we can easily edit the non-auto generated parts right here in this file | 18651 // we can easily edit the non-auto generated parts right here in this file |
| 18652 // instead of having to edit some template or the code generator. | 18652 // instead of having to edit some template or the code generator. |
| 18653 #include "base/macros.h" | 18653 #include "base/macros.h" |
| 18654 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" | 18654 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" |
| 18655 | 18655 |
| 18656 } // namespace gles2 | 18656 } // namespace gles2 |
| 18657 } // namespace gpu | 18657 } // namespace gpu |
| OLD | NEW |