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

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

Issue 540053004: command_buffer: Table based command dispatch. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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 <list> 10 #include <list>
(...skipping 1646 matching lines...) Expand 10 before | Expand all | Expand 10 after
1657 !surface_->SetBackbufferAllocation(true)) 1657 !surface_->SetBackbufferAllocation(true))
1658 return error::kLostContext; 1658 return error::kLostContext;
1659 return error::kNoError; 1659 return error::kNoError;
1660 } 1660 }
1661 1661
1662 void ProcessPendingReadPixels(); 1662 void ProcessPendingReadPixels();
1663 void FinishReadPixels(const cmds::ReadPixels& c, GLuint buffer); 1663 void FinishReadPixels(const cmds::ReadPixels& c, GLuint buffer);
1664 1664
1665 // Generate a member function prototype for each command in an automated and 1665 // Generate a member function prototype for each command in an automated and
1666 // typesafe way. 1666 // typesafe way.
1667 #define GLES2_CMD_OP(name) \ 1667 #define GLES2_CMD_OP(name) \
1668 Error Handle ## name( \ 1668 Error Handle##name(uint32 immediate_data_size, const void* data);
1669 uint32 immediate_data_size, \
1670 const cmds::name& args); \
1671 1669
1672 GLES2_COMMAND_LIST(GLES2_CMD_OP) 1670 GLES2_COMMAND_LIST(GLES2_CMD_OP)
1673 1671
1674 #undef GLES2_CMD_OP 1672 #undef GLES2_CMD_OP
1675 1673
1676 // The GL context this decoder renders to on behalf of the client. 1674 // The GL context this decoder renders to on behalf of the client.
1677 scoped_refptr<gfx::GLSurface> surface_; 1675 scoped_refptr<gfx::GLSurface> surface_;
1678 scoped_refptr<gfx::GLContext> context_; 1676 scoped_refptr<gfx::GLContext> context_;
1679 1677
1680 // The ContextGroup for this decoder uses to track resources. 1678 // The ContextGroup for this decoder uses to track resources.
(...skipping 2006 matching lines...) Expand 10 before | Expand all | Expand 10 after
3687 if (offscreen_resolved_frame_buffer_.get()) 3685 if (offscreen_resolved_frame_buffer_.get())
3688 offscreen_resolved_frame_buffer_->Destroy(); 3686 offscreen_resolved_frame_buffer_->Destroy();
3689 if (offscreen_resolved_color_texture_.get()) 3687 if (offscreen_resolved_color_texture_.get())
3690 offscreen_resolved_color_texture_->Destroy(); 3688 offscreen_resolved_color_texture_->Destroy();
3691 offscreen_resolved_color_texture_.reset(); 3689 offscreen_resolved_color_texture_.reset();
3692 offscreen_resolved_frame_buffer_.reset(); 3690 offscreen_resolved_frame_buffer_.reset();
3693 3691
3694 return true; 3692 return true;
3695 } 3693 }
3696 3694
3697 error::Error GLES2DecoderImpl::HandleResizeCHROMIUM( 3695 error::Error GLES2DecoderImpl::HandleResizeCHROMIUM(uint32 immediate_data_size,
3698 uint32 immediate_data_size, const cmds::ResizeCHROMIUM& c) { 3696 const void* cmd_data) {
3697 const gles2::cmds::ResizeCHROMIUM& c =
3698 *static_cast<const gles2::cmds::ResizeCHROMIUM*>(cmd_data);
3699 if (!offscreen_target_frame_buffer_.get() && surface_->DeferDraws()) 3699 if (!offscreen_target_frame_buffer_.get() && surface_->DeferDraws())
3700 return error::kDeferCommandUntilLater; 3700 return error::kDeferCommandUntilLater;
3701 3701
3702 GLuint width = static_cast<GLuint>(c.width); 3702 GLuint width = static_cast<GLuint>(c.width);
3703 GLuint height = static_cast<GLuint>(c.height); 3703 GLuint height = static_cast<GLuint>(c.height);
3704 GLfloat scale_factor = c.scale_factor; 3704 GLfloat scale_factor = c.scale_factor;
3705 TRACE_EVENT2("gpu", "glResizeChromium", "width", width, "height", height); 3705 TRACE_EVENT2("gpu", "glResizeChromium", "width", width, "height", height);
3706 3706
3707 width = std::max(1U, width); 3707 width = std::max(1U, width);
3708 height = std::max(1U, height); 3708 height = std::max(1U, height);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
3765 bool doing_gpu_trace = false; 3765 bool doing_gpu_trace = false;
3766 if (gpu_trace_commands_) { 3766 if (gpu_trace_commands_) {
3767 if (CMD_FLAG_GET_TRACE_LEVEL(info.cmd_flags) <= gpu_trace_level_) { 3767 if (CMD_FLAG_GET_TRACE_LEVEL(info.cmd_flags) <= gpu_trace_level_) {
3768 doing_gpu_trace = true; 3768 doing_gpu_trace = true;
3769 gpu_tracer_->Begin(GetCommandName(command), kTraceDecoder); 3769 gpu_tracer_->Begin(GetCommandName(command), kTraceDecoder);
3770 } 3770 }
3771 } 3771 }
3772 3772
3773 uint32 immediate_data_size = 3773 uint32 immediate_data_size =
3774 (arg_count - info_arg_count) * sizeof(CommandBufferEntry); // NOLINT 3774 (arg_count - info_arg_count) * sizeof(CommandBufferEntry); // NOLINT
3775 switch (command) {
3776 #define GLES2_CMD_OP(name) \
3777 case cmds::name::kCmdId: \
3778 result = Handle ## name( \
3779 immediate_data_size, \
3780 *static_cast<const gles2::cmds::name*>(cmd_data)); \
3781 break; \
3782 3775
3783 GLES2_COMMAND_LIST(GLES2_CMD_OP) 3776 typedef gpu::gles2::GLES2Decoder::Error (GLES2DecoderImpl::*CmdHandler)(
3784 #undef GLES2_CMD_OP 3777 uint32 immediate_data_size, const void* data);
3785 } 3778
3779 static CmdHandler cmd_handlers[] = {
piman 2014/09/05 22:10:16 nit: can we fold this into g_command_info? It seem
vmiura 2014/09/05 22:35:44 Done.
3780 #define GLES2_CMD_OP(name) &GLES2DecoderImpl::Handle##name,
3781 GLES2_COMMAND_LIST(GLES2_CMD_OP)
3782 #undef GLES2_CMD_OP
3783 };
3784
3785 result =
3786 (this->*cmd_handlers[command_index])(immediate_data_size, cmd_data);
3786 3787
3787 if (doing_gpu_trace) 3788 if (doing_gpu_trace)
3788 gpu_tracer_->End(kTraceDecoder); 3789 gpu_tracer_->End(kTraceDecoder);
3789 3790
3790 if (debug()) { 3791 if (debug()) {
3791 GLenum error; 3792 GLenum error;
3792 while ((error = glGetError()) != GL_NO_ERROR) { 3793 while ((error = glGetError()) != GL_NO_ERROR) {
3793 LOG(ERROR) << "[" << logger_.GetLogPrefix() << "] " 3794 LOG(ERROR) << "[" << logger_.GetLogPrefix() << "] "
3794 << "GL ERROR: " << GLES2Util::GetStringEnum(error) << " : " 3795 << "GL ERROR: " << GLES2Util::GetStringEnum(error) << " : "
3795 << GetCommandName(command); 3796 << GetCommandName(command);
(...skipping 1005 matching lines...) Expand 10 before | Expand all | Expand 10 after
4801 Program* program = GetProgramInfoNotShader( 4802 Program* program = GetProgramInfoNotShader(
4802 program_id, "glBindAttribLocation"); 4803 program_id, "glBindAttribLocation");
4803 if (!program) { 4804 if (!program) {
4804 return; 4805 return;
4805 } 4806 }
4806 program->SetAttribLocationBinding(name, static_cast<GLint>(index)); 4807 program->SetAttribLocationBinding(name, static_cast<GLint>(index));
4807 glBindAttribLocation(program->service_id(), index, name); 4808 glBindAttribLocation(program->service_id(), index, name);
4808 } 4809 }
4809 4810
4810 error::Error GLES2DecoderImpl::HandleBindAttribLocationBucket( 4811 error::Error GLES2DecoderImpl::HandleBindAttribLocationBucket(
4811 uint32 immediate_data_size, const cmds::BindAttribLocationBucket& c) { 4812 uint32 immediate_data_size,
4813 const void* cmd_data) {
4814 const gles2::cmds::BindAttribLocationBucket& c =
4815 *static_cast<const gles2::cmds::BindAttribLocationBucket*>(cmd_data);
4812 GLuint program = static_cast<GLuint>(c.program); 4816 GLuint program = static_cast<GLuint>(c.program);
4813 GLuint index = static_cast<GLuint>(c.index); 4817 GLuint index = static_cast<GLuint>(c.index);
4814 Bucket* bucket = GetBucket(c.name_bucket_id); 4818 Bucket* bucket = GetBucket(c.name_bucket_id);
4815 if (!bucket || bucket->size() == 0) { 4819 if (!bucket || bucket->size() == 0) {
4816 return error::kInvalidArguments; 4820 return error::kInvalidArguments;
4817 } 4821 }
4818 std::string name_str; 4822 std::string name_str;
4819 if (!bucket->GetAsString(&name_str)) { 4823 if (!bucket->GetAsString(&name_str)) {
4820 return error::kInvalidArguments; 4824 return error::kInvalidArguments;
4821 } 4825 }
(...skipping 30 matching lines...) Expand all
4852 } 4856 }
4853 if (!program->SetUniformLocationBinding(name, location)) { 4857 if (!program->SetUniformLocationBinding(name, location)) {
4854 LOCAL_SET_GL_ERROR( 4858 LOCAL_SET_GL_ERROR(
4855 GL_INVALID_VALUE, 4859 GL_INVALID_VALUE,
4856 "glBindUniformLocationCHROMIUM", "location out of range"); 4860 "glBindUniformLocationCHROMIUM", "location out of range");
4857 } 4861 }
4858 } 4862 }
4859 4863
4860 error::Error GLES2DecoderImpl::HandleBindUniformLocationCHROMIUMBucket( 4864 error::Error GLES2DecoderImpl::HandleBindUniformLocationCHROMIUMBucket(
4861 uint32 immediate_data_size, 4865 uint32 immediate_data_size,
4862 const cmds::BindUniformLocationCHROMIUMBucket& c) { 4866 const void* cmd_data) {
4867 const gles2::cmds::BindUniformLocationCHROMIUMBucket& c =
4868 *static_cast<const gles2::cmds::BindUniformLocationCHROMIUMBucket*>(
4869 cmd_data);
4863 GLuint program = static_cast<GLuint>(c.program); 4870 GLuint program = static_cast<GLuint>(c.program);
4864 GLint location = static_cast<GLint>(c.location); 4871 GLint location = static_cast<GLint>(c.location);
4865 Bucket* bucket = GetBucket(c.name_bucket_id); 4872 Bucket* bucket = GetBucket(c.name_bucket_id);
4866 if (!bucket || bucket->size() == 0) { 4873 if (!bucket || bucket->size() == 0) {
4867 return error::kInvalidArguments; 4874 return error::kInvalidArguments;
4868 } 4875 }
4869 std::string name_str; 4876 std::string name_str;
4870 if (!bucket->GetAsString(&name_str)) { 4877 if (!bucket->GetAsString(&name_str)) {
4871 return error::kInvalidArguments; 4878 return error::kInvalidArguments;
4872 } 4879 }
4873 DoBindUniformLocationCHROMIUM(program, location, name_str.c_str()); 4880 DoBindUniformLocationCHROMIUM(program, location, name_str.c_str());
4874 return error::kNoError; 4881 return error::kNoError;
4875 } 4882 }
4876 4883
4877 error::Error GLES2DecoderImpl::HandleDeleteShader( 4884 error::Error GLES2DecoderImpl::HandleDeleteShader(uint32 immediate_data_size,
4878 uint32 immediate_data_size, const cmds::DeleteShader& c) { 4885 const void* cmd_data) {
4886 const gles2::cmds::DeleteShader& c =
4887 *static_cast<const gles2::cmds::DeleteShader*>(cmd_data);
4879 GLuint client_id = c.shader; 4888 GLuint client_id = c.shader;
4880 if (client_id) { 4889 if (client_id) {
4881 Shader* shader = GetShader(client_id); 4890 Shader* shader = GetShader(client_id);
4882 if (shader) { 4891 if (shader) {
4883 if (!shader->IsDeleted()) { 4892 if (!shader->IsDeleted()) {
4884 glDeleteShader(shader->service_id()); 4893 glDeleteShader(shader->service_id());
4885 shader_manager()->MarkAsDeleted(shader); 4894 shader_manager()->MarkAsDeleted(shader);
4886 } 4895 }
4887 } else { 4896 } else {
4888 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glDeleteShader", "unknown shader"); 4897 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glDeleteShader", "unknown shader");
4889 } 4898 }
4890 } 4899 }
4891 return error::kNoError; 4900 return error::kNoError;
4892 } 4901 }
4893 4902
4894 error::Error GLES2DecoderImpl::HandleDeleteProgram( 4903 error::Error GLES2DecoderImpl::HandleDeleteProgram(uint32 immediate_data_size,
4895 uint32 immediate_data_size, const cmds::DeleteProgram& c) { 4904 const void* cmd_data) {
4905 const gles2::cmds::DeleteProgram& c =
4906 *static_cast<const gles2::cmds::DeleteProgram*>(cmd_data);
4896 GLuint client_id = c.program; 4907 GLuint client_id = c.program;
4897 if (client_id) { 4908 if (client_id) {
4898 Program* program = GetProgram(client_id); 4909 Program* program = GetProgram(client_id);
4899 if (program) { 4910 if (program) {
4900 if (!program->IsDeleted()) { 4911 if (!program->IsDeleted()) {
4901 program_manager()->MarkAsDeleted(shader_manager(), program); 4912 program_manager()->MarkAsDeleted(shader_manager(), program);
4902 } 4913 }
4903 } else { 4914 } else {
4904 LOCAL_SET_GL_ERROR( 4915 LOCAL_SET_GL_ERROR(
4905 GL_INVALID_VALUE, "glDeleteProgram", "unknown program"); 4916 GL_INVALID_VALUE, "glDeleteProgram", "unknown program");
4906 } 4917 }
4907 } 4918 }
4908 return error::kNoError; 4919 return error::kNoError;
4909 } 4920 }
4910 4921
4911 void GLES2DecoderImpl::DoDeleteSharedIdsCHROMIUM( 4922 void GLES2DecoderImpl::DoDeleteSharedIdsCHROMIUM(
4912 GLuint namespace_id, GLsizei n, const GLuint* ids) { 4923 GLuint namespace_id, GLsizei n, const GLuint* ids) {
4913 IdAllocatorInterface* id_allocator = group_->GetIdAllocator(namespace_id); 4924 IdAllocatorInterface* id_allocator = group_->GetIdAllocator(namespace_id);
4914 for (GLsizei ii = 0; ii < n; ++ii) { 4925 for (GLsizei ii = 0; ii < n; ++ii) {
4915 id_allocator->FreeID(ids[ii]); 4926 id_allocator->FreeID(ids[ii]);
4916 } 4927 }
4917 } 4928 }
4918 4929
4919 error::Error GLES2DecoderImpl::HandleDeleteSharedIdsCHROMIUM( 4930 error::Error GLES2DecoderImpl::HandleDeleteSharedIdsCHROMIUM(
4920 uint32 immediate_data_size, const cmds::DeleteSharedIdsCHROMIUM& c) { 4931 uint32 immediate_data_size,
4932 const void* cmd_data) {
4933 const gles2::cmds::DeleteSharedIdsCHROMIUM& c =
4934 *static_cast<const gles2::cmds::DeleteSharedIdsCHROMIUM*>(cmd_data);
4921 GLuint namespace_id = static_cast<GLuint>(c.namespace_id); 4935 GLuint namespace_id = static_cast<GLuint>(c.namespace_id);
4922 GLsizei n = static_cast<GLsizei>(c.n); 4936 GLsizei n = static_cast<GLsizei>(c.n);
4923 uint32 data_size; 4937 uint32 data_size;
4924 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 4938 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
4925 return error::kOutOfBounds; 4939 return error::kOutOfBounds;
4926 } 4940 }
4927 const GLuint* ids = GetSharedMemoryAs<const GLuint*>( 4941 const GLuint* ids = GetSharedMemoryAs<const GLuint*>(
4928 c.ids_shm_id, c.ids_shm_offset, data_size); 4942 c.ids_shm_id, c.ids_shm_offset, data_size);
4929 if (n < 0) { 4943 if (n < 0) {
4930 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "DeleteSharedIdsCHROMIUM", "n < 0"); 4944 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "DeleteSharedIdsCHROMIUM", "n < 0");
(...skipping 15 matching lines...) Expand all
4946 } 4960 }
4947 } else { 4961 } else {
4948 for (GLsizei ii = 0; ii < n; ++ii) { 4962 for (GLsizei ii = 0; ii < n; ++ii) {
4949 ids[ii] = id_allocator->AllocateIDAtOrAbove(id_offset); 4963 ids[ii] = id_allocator->AllocateIDAtOrAbove(id_offset);
4950 id_offset = ids[ii] + 1; 4964 id_offset = ids[ii] + 1;
4951 } 4965 }
4952 } 4966 }
4953 } 4967 }
4954 4968
4955 error::Error GLES2DecoderImpl::HandleGenSharedIdsCHROMIUM( 4969 error::Error GLES2DecoderImpl::HandleGenSharedIdsCHROMIUM(
4956 uint32 immediate_data_size, const cmds::GenSharedIdsCHROMIUM& c) { 4970 uint32 immediate_data_size,
4971 const void* cmd_data) {
4972 const gles2::cmds::GenSharedIdsCHROMIUM& c =
4973 *static_cast<const gles2::cmds::GenSharedIdsCHROMIUM*>(cmd_data);
4957 GLuint namespace_id = static_cast<GLuint>(c.namespace_id); 4974 GLuint namespace_id = static_cast<GLuint>(c.namespace_id);
4958 GLuint id_offset = static_cast<GLuint>(c.id_offset); 4975 GLuint id_offset = static_cast<GLuint>(c.id_offset);
4959 GLsizei n = static_cast<GLsizei>(c.n); 4976 GLsizei n = static_cast<GLsizei>(c.n);
4960 uint32 data_size; 4977 uint32 data_size;
4961 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 4978 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
4962 return error::kOutOfBounds; 4979 return error::kOutOfBounds;
4963 } 4980 }
4964 GLuint* ids = GetSharedMemoryAs<GLuint*>( 4981 GLuint* ids = GetSharedMemoryAs<GLuint*>(
4965 c.ids_shm_id, c.ids_shm_offset, data_size); 4982 c.ids_shm_id, c.ids_shm_offset, data_size);
4966 if (n < 0) { 4983 if (n < 0) {
(...skipping 17 matching lines...) Expand all
4984 } 5001 }
4985 LOCAL_SET_GL_ERROR( 5002 LOCAL_SET_GL_ERROR(
4986 GL_INVALID_VALUE, "RegisterSharedIdsCHROMIUM", 5003 GL_INVALID_VALUE, "RegisterSharedIdsCHROMIUM",
4987 "attempt to register id that already exists"); 5004 "attempt to register id that already exists");
4988 return; 5005 return;
4989 } 5006 }
4990 } 5007 }
4991 } 5008 }
4992 5009
4993 error::Error GLES2DecoderImpl::HandleRegisterSharedIdsCHROMIUM( 5010 error::Error GLES2DecoderImpl::HandleRegisterSharedIdsCHROMIUM(
4994 uint32 immediate_data_size, const cmds::RegisterSharedIdsCHROMIUM& c) { 5011 uint32 immediate_data_size,
5012 const void* cmd_data) {
5013 const gles2::cmds::RegisterSharedIdsCHROMIUM& c =
5014 *static_cast<const gles2::cmds::RegisterSharedIdsCHROMIUM*>(cmd_data);
4995 GLuint namespace_id = static_cast<GLuint>(c.namespace_id); 5015 GLuint namespace_id = static_cast<GLuint>(c.namespace_id);
4996 GLsizei n = static_cast<GLsizei>(c.n); 5016 GLsizei n = static_cast<GLsizei>(c.n);
4997 uint32 data_size; 5017 uint32 data_size;
4998 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { 5018 if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
4999 return error::kOutOfBounds; 5019 return error::kOutOfBounds;
5000 } 5020 }
5001 GLuint* ids = GetSharedMemoryAs<GLuint*>( 5021 GLuint* ids = GetSharedMemoryAs<GLuint*>(
5002 c.ids_shm_id, c.ids_shm_offset, data_size); 5022 c.ids_shm_id, c.ids_shm_offset, data_size);
5003 if (n < 0) { 5023 if (n < 0) {
5004 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "RegisterSharedIdsCHROMIUM", "n < 0"); 5024 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "RegisterSharedIdsCHROMIUM", "n < 0");
(...skipping 1553 matching lines...) Expand 10 before | Expand all | Expand 10 after
6558 // We don't have to restore attrib 0 generic data at the end of this 6578 // We don't have to restore attrib 0 generic data at the end of this
6559 // function even if it is simulated. This is because we will simulate 6579 // function even if it is simulated. This is because we will simulate
6560 // it in each draw call, and attrib 0 generic data queries use cached 6580 // it in each draw call, and attrib 0 generic data queries use cached
6561 // values instead of passing down to the underlying driver. 6581 // values instead of passing down to the underlying driver.
6562 RestoreStateForAttrib(0, false); 6582 RestoreStateForAttrib(0, false);
6563 } 6583 }
6564 } 6584 }
6565 return error::kNoError; 6585 return error::kNoError;
6566 } 6586 }
6567 6587
6568 error::Error GLES2DecoderImpl::HandleDrawArrays( 6588 error::Error GLES2DecoderImpl::HandleDrawArrays(uint32 immediate_data_size,
6569 uint32 immediate_data_size, const cmds::DrawArrays& c) { 6589 const void* cmd_data) {
6590 const cmds::DrawArrays& c = *static_cast<const cmds::DrawArrays*>(cmd_data);
6570 return DoDrawArrays("glDrawArrays", 6591 return DoDrawArrays("glDrawArrays",
6571 false, 6592 false,
6572 static_cast<GLenum>(c.mode), 6593 static_cast<GLenum>(c.mode),
6573 static_cast<GLint>(c.first), 6594 static_cast<GLint>(c.first),
6574 static_cast<GLsizei>(c.count), 6595 static_cast<GLsizei>(c.count),
6575 1); 6596 1);
6576 } 6597 }
6577 6598
6578 error::Error GLES2DecoderImpl::HandleDrawArraysInstancedANGLE( 6599 error::Error GLES2DecoderImpl::HandleDrawArraysInstancedANGLE(
6579 uint32 immediate_data_size, const cmds::DrawArraysInstancedANGLE& c) { 6600 uint32 immediate_data_size,
6601 const void* cmd_data) {
6602 const gles2::cmds::DrawArraysInstancedANGLE& c =
6603 *static_cast<const gles2::cmds::DrawArraysInstancedANGLE*>(cmd_data);
6580 if (!features().angle_instanced_arrays) { 6604 if (!features().angle_instanced_arrays) {
6581 LOCAL_SET_GL_ERROR( 6605 LOCAL_SET_GL_ERROR(
6582 GL_INVALID_OPERATION, 6606 GL_INVALID_OPERATION,
6583 "glDrawArraysInstancedANGLE", "function not available"); 6607 "glDrawArraysInstancedANGLE", "function not available");
6584 return error::kNoError; 6608 return error::kNoError;
6585 } 6609 }
6586 return DoDrawArrays("glDrawArraysIntancedANGLE", 6610 return DoDrawArrays("glDrawArraysIntancedANGLE",
6587 true, 6611 true,
6588 static_cast<GLenum>(c.mode), 6612 static_cast<GLenum>(c.mode),
6589 static_cast<GLint>(c.first), 6613 static_cast<GLint>(c.first),
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
6697 // We don't have to restore attrib 0 generic data at the end of this 6721 // We don't have to restore attrib 0 generic data at the end of this
6698 // function even if it is simulated. This is because we will simulate 6722 // function even if it is simulated. This is because we will simulate
6699 // it in each draw call, and attrib 0 generic data queries use cached 6723 // it in each draw call, and attrib 0 generic data queries use cached
6700 // values instead of passing down to the underlying driver. 6724 // values instead of passing down to the underlying driver.
6701 RestoreStateForAttrib(0, false); 6725 RestoreStateForAttrib(0, false);
6702 } 6726 }
6703 } 6727 }
6704 return error::kNoError; 6728 return error::kNoError;
6705 } 6729 }
6706 6730
6707 error::Error GLES2DecoderImpl::HandleDrawElements( 6731 error::Error GLES2DecoderImpl::HandleDrawElements(uint32 immediate_data_size,
6708 uint32 immediate_data_size, const cmds::DrawElements& c) { 6732 const void* cmd_data) {
6733 const gles2::cmds::DrawElements& c =
6734 *static_cast<const gles2::cmds::DrawElements*>(cmd_data);
6709 return DoDrawElements("glDrawElements", 6735 return DoDrawElements("glDrawElements",
6710 false, 6736 false,
6711 static_cast<GLenum>(c.mode), 6737 static_cast<GLenum>(c.mode),
6712 static_cast<GLsizei>(c.count), 6738 static_cast<GLsizei>(c.count),
6713 static_cast<GLenum>(c.type), 6739 static_cast<GLenum>(c.type),
6714 static_cast<int32>(c.index_offset), 6740 static_cast<int32>(c.index_offset),
6715 1); 6741 1);
6716 } 6742 }
6717 6743
6718 error::Error GLES2DecoderImpl::HandleDrawElementsInstancedANGLE( 6744 error::Error GLES2DecoderImpl::HandleDrawElementsInstancedANGLE(
6719 uint32 immediate_data_size, const cmds::DrawElementsInstancedANGLE& c) { 6745 uint32 immediate_data_size,
6746 const void* cmd_data) {
6747 const gles2::cmds::DrawElementsInstancedANGLE& c =
6748 *static_cast<const gles2::cmds::DrawElementsInstancedANGLE*>(cmd_data);
6720 if (!features().angle_instanced_arrays) { 6749 if (!features().angle_instanced_arrays) {
6721 LOCAL_SET_GL_ERROR( 6750 LOCAL_SET_GL_ERROR(
6722 GL_INVALID_OPERATION, 6751 GL_INVALID_OPERATION,
6723 "glDrawElementsInstancedANGLE", "function not available"); 6752 "glDrawElementsInstancedANGLE", "function not available");
6724 return error::kNoError; 6753 return error::kNoError;
6725 } 6754 }
6726 return DoDrawElements("glDrawElementsInstancedANGLE", 6755 return DoDrawElements("glDrawElementsInstancedANGLE",
6727 true, 6756 true,
6728 static_cast<GLenum>(c.mode), 6757 static_cast<GLenum>(c.mode),
6729 static_cast<GLsizei>(c.count), 6758 static_cast<GLsizei>(c.count),
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
6763 if (!shader) { 6792 if (!shader) {
6764 return error::kNoError; 6793 return error::kNoError;
6765 } 6794 }
6766 // Note: We don't actually call glShaderSource here. We wait until 6795 // Note: We don't actually call glShaderSource here. We wait until
6767 // the call to glCompileShader. 6796 // the call to glCompileShader.
6768 shader->UpdateSource(str.c_str()); 6797 shader->UpdateSource(str.c_str());
6769 return error::kNoError; 6798 return error::kNoError;
6770 } 6799 }
6771 6800
6772 error::Error GLES2DecoderImpl::HandleShaderSourceBucket( 6801 error::Error GLES2DecoderImpl::HandleShaderSourceBucket(
6773 uint32 immediate_data_size, const cmds::ShaderSourceBucket& c) { 6802 uint32 immediate_data_size,
6803 const void* cmd_data) {
6804 const gles2::cmds::ShaderSourceBucket& c =
6805 *static_cast<const gles2::cmds::ShaderSourceBucket*>(cmd_data);
6774 Bucket* bucket = GetBucket(c.data_bucket_id); 6806 Bucket* bucket = GetBucket(c.data_bucket_id);
6775 if (!bucket || bucket->size() == 0) { 6807 if (!bucket || bucket->size() == 0) {
6776 return error::kInvalidArguments; 6808 return error::kInvalidArguments;
6777 } 6809 }
6778 return ShaderSourceHelper( 6810 return ShaderSourceHelper(
6779 c.shader, bucket->GetDataAs<const char*>(0, bucket->size() - 1), 6811 c.shader, bucket->GetDataAs<const char*>(0, bucket->size() - 1),
6780 bucket->size() - 1); 6812 bucket->size() - 1);
6781 } 6813 }
6782 6814
6783 void GLES2DecoderImpl::DoCompileShader(GLuint client_id) { 6815 void GLES2DecoderImpl::DoCompileShader(GLuint client_id) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
6818 case GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE: 6850 case GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE:
6819 *params = shader->translated_source() ? 6851 *params = shader->translated_source() ?
6820 shader->translated_source()->size() + 1 : 0; 6852 shader->translated_source()->size() + 1 : 0;
6821 return; 6853 return;
6822 default: 6854 default:
6823 break; 6855 break;
6824 } 6856 }
6825 glGetShaderiv(shader->service_id(), pname, params); 6857 glGetShaderiv(shader->service_id(), pname, params);
6826 } 6858 }
6827 6859
6828 error::Error GLES2DecoderImpl::HandleGetShaderSource( 6860 error::Error GLES2DecoderImpl::HandleGetShaderSource(uint32 immediate_data_size,
6829 uint32 immediate_data_size, const cmds::GetShaderSource& c) { 6861 const void* cmd_data) {
6862 const gles2::cmds::GetShaderSource& c =
6863 *static_cast<const gles2::cmds::GetShaderSource*>(cmd_data);
6830 GLuint shader_id = c.shader; 6864 GLuint shader_id = c.shader;
6831 uint32 bucket_id = static_cast<uint32>(c.bucket_id); 6865 uint32 bucket_id = static_cast<uint32>(c.bucket_id);
6832 Bucket* bucket = CreateBucket(bucket_id); 6866 Bucket* bucket = CreateBucket(bucket_id);
6833 Shader* shader = GetShaderInfoNotProgram(shader_id, "glGetShaderSource"); 6867 Shader* shader = GetShaderInfoNotProgram(shader_id, "glGetShaderSource");
6834 if (!shader || !shader->source()) { 6868 if (!shader || !shader->source()) {
6835 bucket->SetSize(0); 6869 bucket->SetSize(0);
6836 return error::kNoError; 6870 return error::kNoError;
6837 } 6871 }
6838 bucket->SetFromString(shader->source()->c_str()); 6872 bucket->SetFromString(shader->source()->c_str());
6839 return error::kNoError; 6873 return error::kNoError;
6840 } 6874 }
6841 6875
6842 error::Error GLES2DecoderImpl::HandleGetTranslatedShaderSourceANGLE( 6876 error::Error GLES2DecoderImpl::HandleGetTranslatedShaderSourceANGLE(
6843 uint32 immediate_data_size, 6877 uint32 immediate_data_size,
6844 const cmds::GetTranslatedShaderSourceANGLE& c) { 6878 const void* cmd_data) {
6879 const gles2::cmds::GetTranslatedShaderSourceANGLE& c =
6880 *static_cast<const gles2::cmds::GetTranslatedShaderSourceANGLE*>(
6881 cmd_data);
6845 GLuint shader_id = c.shader; 6882 GLuint shader_id = c.shader;
6846 uint32 bucket_id = static_cast<uint32>(c.bucket_id); 6883 uint32 bucket_id = static_cast<uint32>(c.bucket_id);
6847 Bucket* bucket = CreateBucket(bucket_id); 6884 Bucket* bucket = CreateBucket(bucket_id);
6848 Shader* shader = GetShaderInfoNotProgram( 6885 Shader* shader = GetShaderInfoNotProgram(
6849 shader_id, "glGetTranslatedShaderSourceANGLE"); 6886 shader_id, "glGetTranslatedShaderSourceANGLE");
6850 if (!shader) { 6887 if (!shader) {
6851 bucket->SetSize(0); 6888 bucket->SetSize(0);
6852 return error::kNoError; 6889 return error::kNoError;
6853 } 6890 }
6854 6891
6855 bucket->SetFromString(shader->translated_source() ? 6892 bucket->SetFromString(shader->translated_source() ?
6856 shader->translated_source()->c_str() : NULL); 6893 shader->translated_source()->c_str() : NULL);
6857 return error::kNoError; 6894 return error::kNoError;
6858 } 6895 }
6859 6896
6860 error::Error GLES2DecoderImpl::HandleGetProgramInfoLog( 6897 error::Error GLES2DecoderImpl::HandleGetProgramInfoLog(
6861 uint32 immediate_data_size, const cmds::GetProgramInfoLog& c) { 6898 uint32 immediate_data_size,
6899 const void* cmd_data) {
6900 const gles2::cmds::GetProgramInfoLog& c =
6901 *static_cast<const gles2::cmds::GetProgramInfoLog*>(cmd_data);
6862 GLuint program_id = c.program; 6902 GLuint program_id = c.program;
6863 uint32 bucket_id = static_cast<uint32>(c.bucket_id); 6903 uint32 bucket_id = static_cast<uint32>(c.bucket_id);
6864 Bucket* bucket = CreateBucket(bucket_id); 6904 Bucket* bucket = CreateBucket(bucket_id);
6865 Program* program = GetProgramInfoNotShader( 6905 Program* program = GetProgramInfoNotShader(
6866 program_id, "glGetProgramInfoLog"); 6906 program_id, "glGetProgramInfoLog");
6867 if (!program || !program->log_info()) { 6907 if (!program || !program->log_info()) {
6868 bucket->SetFromString(""); 6908 bucket->SetFromString("");
6869 return error::kNoError; 6909 return error::kNoError;
6870 } 6910 }
6871 bucket->SetFromString(program->log_info()->c_str()); 6911 bucket->SetFromString(program->log_info()->c_str());
6872 return error::kNoError; 6912 return error::kNoError;
6873 } 6913 }
6874 6914
6875 error::Error GLES2DecoderImpl::HandleGetShaderInfoLog( 6915 error::Error GLES2DecoderImpl::HandleGetShaderInfoLog(
6876 uint32 immediate_data_size, const cmds::GetShaderInfoLog& c) { 6916 uint32 immediate_data_size,
6917 const void* cmd_data) {
6918 const gles2::cmds::GetShaderInfoLog& c =
6919 *static_cast<const gles2::cmds::GetShaderInfoLog*>(cmd_data);
6877 GLuint shader_id = c.shader; 6920 GLuint shader_id = c.shader;
6878 uint32 bucket_id = static_cast<uint32>(c.bucket_id); 6921 uint32 bucket_id = static_cast<uint32>(c.bucket_id);
6879 Bucket* bucket = CreateBucket(bucket_id); 6922 Bucket* bucket = CreateBucket(bucket_id);
6880 Shader* shader = GetShaderInfoNotProgram(shader_id, "glGetShaderInfoLog"); 6923 Shader* shader = GetShaderInfoNotProgram(shader_id, "glGetShaderInfoLog");
6881 if (!shader || !shader->log_info()) { 6924 if (!shader || !shader->log_info()) {
6882 bucket->SetFromString(""); 6925 bucket->SetFromString("");
6883 return error::kNoError; 6926 return error::kNoError;
6884 } 6927 }
6885 bucket->SetFromString(shader->log_info()->c_str()); 6928 bucket->SetFromString(shader->log_info()->c_str());
6886 return error::kNoError; 6929 return error::kNoError;
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
7159 } 7202 }
7160 } 7203 }
7161 7204
7162 void GLES2DecoderImpl::DoVertexAttrib4fv(GLuint index, const GLfloat* v) { 7205 void GLES2DecoderImpl::DoVertexAttrib4fv(GLuint index, const GLfloat* v) {
7163 if (SetVertexAttribValue("glVertexAttrib4fv", index, v)) { 7206 if (SetVertexAttribValue("glVertexAttrib4fv", index, v)) {
7164 glVertexAttrib4fv(index, v); 7207 glVertexAttrib4fv(index, v);
7165 } 7208 }
7166 } 7209 }
7167 7210
7168 error::Error GLES2DecoderImpl::HandleVertexAttribPointer( 7211 error::Error GLES2DecoderImpl::HandleVertexAttribPointer(
7169 uint32 immediate_data_size, const cmds::VertexAttribPointer& c) { 7212 uint32 immediate_data_size,
7213 const void* cmd_data) {
7214 const gles2::cmds::VertexAttribPointer& c =
7215 *static_cast<const gles2::cmds::VertexAttribPointer*>(cmd_data);
7170 7216
7171 if (!state_.bound_array_buffer.get() || 7217 if (!state_.bound_array_buffer.get() ||
7172 state_.bound_array_buffer->IsDeleted()) { 7218 state_.bound_array_buffer->IsDeleted()) {
7173 if (state_.vertex_attrib_manager.get() == 7219 if (state_.vertex_attrib_manager.get() ==
7174 state_.default_vertex_attrib_manager.get()) { 7220 state_.default_vertex_attrib_manager.get()) {
7175 LOCAL_SET_GL_ERROR( 7221 LOCAL_SET_GL_ERROR(
7176 GL_INVALID_VALUE, "glVertexAttribPointer", "no array buffer bound"); 7222 GL_INVALID_VALUE, "glVertexAttribPointer", "no array buffer bound");
7177 return error::kNoError; 7223 return error::kNoError;
7178 } else if (c.offset != 0) { 7224 } else if (c.offset != 0) {
7179 LOCAL_SET_GL_ERROR( 7225 LOCAL_SET_GL_ERROR(
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
7253 void GLES2DecoderImpl::DoViewport(GLint x, GLint y, GLsizei width, 7299 void GLES2DecoderImpl::DoViewport(GLint x, GLint y, GLsizei width,
7254 GLsizei height) { 7300 GLsizei height) {
7255 state_.viewport_x = x; 7301 state_.viewport_x = x;
7256 state_.viewport_y = y; 7302 state_.viewport_y = y;
7257 state_.viewport_width = std::min(width, viewport_max_width_); 7303 state_.viewport_width = std::min(width, viewport_max_width_);
7258 state_.viewport_height = std::min(height, viewport_max_height_); 7304 state_.viewport_height = std::min(height, viewport_max_height_);
7259 glViewport(x, y, width, height); 7305 glViewport(x, y, width, height);
7260 } 7306 }
7261 7307
7262 error::Error GLES2DecoderImpl::HandleVertexAttribDivisorANGLE( 7308 error::Error GLES2DecoderImpl::HandleVertexAttribDivisorANGLE(
7263 uint32 immediate_data_size, const cmds::VertexAttribDivisorANGLE& c) { 7309 uint32 immediate_data_size,
7310 const void* cmd_data) {
7311 const gles2::cmds::VertexAttribDivisorANGLE& c =
7312 *static_cast<const gles2::cmds::VertexAttribDivisorANGLE*>(cmd_data);
7264 if (!features().angle_instanced_arrays) { 7313 if (!features().angle_instanced_arrays) {
7265 LOCAL_SET_GL_ERROR( 7314 LOCAL_SET_GL_ERROR(
7266 GL_INVALID_OPERATION, 7315 GL_INVALID_OPERATION,
7267 "glVertexAttribDivisorANGLE", "function not available"); 7316 "glVertexAttribDivisorANGLE", "function not available");
7268 return error::kNoError; 7317 return error::kNoError;
7269 } 7318 }
7270 GLuint index = c.index; 7319 GLuint index = c.index;
7271 GLuint divisor = c.divisor; 7320 GLuint divisor = c.divisor;
7272 if (index >= group_->max_vertex_attribs()) { 7321 if (index >= group_->max_vertex_attribs()) {
7273 LOCAL_SET_GL_ERROR( 7322 LOCAL_SET_GL_ERROR(
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
7404 case GL_HALF_FLOAT: 7453 case GL_HALF_FLOAT:
7405 WriteAlphaData<uint16>( 7454 WriteAlphaData<uint16>(
7406 pixels, height, channel_count, alpha_channel, unpadded_row_size, 7455 pixels, height, channel_count, alpha_channel, unpadded_row_size,
7407 padded_row_size, 0x3C00); 7456 padded_row_size, 0x3C00);
7408 break; 7457 break;
7409 } 7458 }
7410 } 7459 }
7411 } 7460 }
7412 } 7461 }
7413 7462
7414 7463 error::Error GLES2DecoderImpl::HandleReadPixels(uint32 immediate_data_size,
7415 error::Error GLES2DecoderImpl::HandleReadPixels( 7464 const void* cmd_data) {
7416 uint32 immediate_data_size, const cmds::ReadPixels& c) { 7465 const gles2::cmds::ReadPixels& c =
7466 *static_cast<const gles2::cmds::ReadPixels*>(cmd_data);
7417 TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleReadPixels"); 7467 TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleReadPixels");
7418 error::Error fbo_error = WillAccessBoundFramebufferForRead(); 7468 error::Error fbo_error = WillAccessBoundFramebufferForRead();
7419 if (fbo_error != error::kNoError) 7469 if (fbo_error != error::kNoError)
7420 return fbo_error; 7470 return fbo_error;
7421 GLint x = c.x; 7471 GLint x = c.x;
7422 GLint y = c.y; 7472 GLint y = c.y;
7423 GLsizei width = c.width; 7473 GLsizei width = c.width;
7424 GLsizei height = c.height; 7474 GLsizei height = c.height;
7425 GLenum format = c.format; 7475 GLenum format = c.format;
7426 GLenum type = c.type; 7476 GLenum type = c.type;
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
7572 if (error == GL_NO_ERROR) { 7622 if (error == GL_NO_ERROR) {
7573 if (result != NULL) { 7623 if (result != NULL) {
7574 *result = true; 7624 *result = true;
7575 } 7625 }
7576 FinishReadPixels(c, 0); 7626 FinishReadPixels(c, 0);
7577 } 7627 }
7578 7628
7579 return error::kNoError; 7629 return error::kNoError;
7580 } 7630 }
7581 7631
7582 error::Error GLES2DecoderImpl::HandlePixelStorei( 7632 error::Error GLES2DecoderImpl::HandlePixelStorei(uint32 immediate_data_size,
7583 uint32 immediate_data_size, const cmds::PixelStorei& c) { 7633 const void* cmd_data) {
7634 const gles2::cmds::PixelStorei& c =
7635 *static_cast<const gles2::cmds::PixelStorei*>(cmd_data);
7584 GLenum pname = c.pname; 7636 GLenum pname = c.pname;
7585 GLenum param = c.param; 7637 GLenum param = c.param;
7586 if (!validators_->pixel_store.IsValid(pname)) { 7638 if (!validators_->pixel_store.IsValid(pname)) {
7587 LOCAL_SET_GL_ERROR_INVALID_ENUM("glPixelStorei", pname, "pname"); 7639 LOCAL_SET_GL_ERROR_INVALID_ENUM("glPixelStorei", pname, "pname");
7588 return error::kNoError; 7640 return error::kNoError;
7589 } 7641 }
7590 switch (pname) { 7642 switch (pname) {
7591 case GL_PACK_ALIGNMENT: 7643 case GL_PACK_ALIGNMENT:
7592 case GL_UNPACK_ALIGNMENT: 7644 case GL_UNPACK_ALIGNMENT:
7593 if (!validators_->pixel_store_alignment.IsValid(param)) { 7645 if (!validators_->pixel_store_alignment.IsValid(param)) {
(...skipping 27 matching lines...) Expand all
7621 break; 7673 break;
7622 default: 7674 default:
7623 // Validation should have prevented us from getting here. 7675 // Validation should have prevented us from getting here.
7624 NOTREACHED(); 7676 NOTREACHED();
7625 break; 7677 break;
7626 } 7678 }
7627 return error::kNoError; 7679 return error::kNoError;
7628 } 7680 }
7629 7681
7630 error::Error GLES2DecoderImpl::HandlePostSubBufferCHROMIUM( 7682 error::Error GLES2DecoderImpl::HandlePostSubBufferCHROMIUM(
7631 uint32 immediate_data_size, const cmds::PostSubBufferCHROMIUM& c) { 7683 uint32 immediate_data_size,
7684 const void* cmd_data) {
7685 const gles2::cmds::PostSubBufferCHROMIUM& c =
7686 *static_cast<const gles2::cmds::PostSubBufferCHROMIUM*>(cmd_data);
7632 TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandlePostSubBufferCHROMIUM"); 7687 TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandlePostSubBufferCHROMIUM");
7633 { 7688 {
7634 TRACE_EVENT_SYNTHETIC_DELAY("gpu.PresentingFrame"); 7689 TRACE_EVENT_SYNTHETIC_DELAY("gpu.PresentingFrame");
7635 } 7690 }
7636 if (!supports_post_sub_buffer_) { 7691 if (!supports_post_sub_buffer_) {
7637 LOCAL_SET_GL_ERROR( 7692 LOCAL_SET_GL_ERROR(
7638 GL_INVALID_OPERATION, 7693 GL_INVALID_OPERATION,
7639 "glPostSubBufferCHROMIUM", "command not supported by surface"); 7694 "glPostSubBufferCHROMIUM", "command not supported by surface");
7640 return error::kNoError; 7695 return error::kNoError;
7641 } 7696 }
7642 bool is_tracing; 7697 bool is_tracing;
7643 TRACE_EVENT_CATEGORY_GROUP_ENABLED(TRACE_DISABLED_BY_DEFAULT("gpu.debug"), 7698 TRACE_EVENT_CATEGORY_GROUP_ENABLED(TRACE_DISABLED_BY_DEFAULT("gpu.debug"),
7644 &is_tracing); 7699 &is_tracing);
7645 if (is_tracing) { 7700 if (is_tracing) {
7646 bool is_offscreen = !!offscreen_target_frame_buffer_.get(); 7701 bool is_offscreen = !!offscreen_target_frame_buffer_.get();
7647 ScopedFrameBufferBinder binder(this, GetBackbufferServiceId()); 7702 ScopedFrameBufferBinder binder(this, GetBackbufferServiceId());
7648 gpu_state_tracer_->TakeSnapshotWithCurrentFramebuffer( 7703 gpu_state_tracer_->TakeSnapshotWithCurrentFramebuffer(
7649 is_offscreen ? offscreen_size_ : surface_->GetSize()); 7704 is_offscreen ? offscreen_size_ : surface_->GetSize());
7650 } 7705 }
7651 if (surface_->PostSubBuffer(c.x, c.y, c.width, c.height)) { 7706 if (surface_->PostSubBuffer(c.x, c.y, c.width, c.height)) {
7652 return error::kNoError; 7707 return error::kNoError;
7653 } else { 7708 } else {
7654 LOG(ERROR) << "Context lost because PostSubBuffer failed."; 7709 LOG(ERROR) << "Context lost because PostSubBuffer failed.";
7655 return error::kLostContext; 7710 return error::kLostContext;
7656 } 7711 }
7657 } 7712 }
7658 7713
7659 error::Error GLES2DecoderImpl::HandleScheduleOverlayPlaneCHROMIUM( 7714 error::Error GLES2DecoderImpl::HandleScheduleOverlayPlaneCHROMIUM(
7660 uint32 immediate_data_size, 7715 uint32 immediate_data_size,
7661 const cmds::ScheduleOverlayPlaneCHROMIUM& c) { 7716 const void* cmd_data) {
7717 const gles2::cmds::ScheduleOverlayPlaneCHROMIUM& c =
7718 *static_cast<const gles2::cmds::ScheduleOverlayPlaneCHROMIUM*>(cmd_data);
7662 TextureRef* ref = texture_manager()->GetTexture(c.overlay_texture_id); 7719 TextureRef* ref = texture_manager()->GetTexture(c.overlay_texture_id);
7663 if (!ref) { 7720 if (!ref) {
7664 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, 7721 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE,
7665 "glScheduleOverlayPlaneCHROMIUM", 7722 "glScheduleOverlayPlaneCHROMIUM",
7666 "unknown texture"); 7723 "unknown texture");
7667 return error::kNoError; 7724 return error::kNoError;
7668 } 7725 }
7669 gfx::GLImage* image = 7726 gfx::GLImage* image =
7670 ref->texture()->GetLevelImage(ref->texture()->target(), 0); 7727 ref->texture()->GetLevelImage(ref->texture()->target(), 0);
7671 if (!image) { 7728 if (!image) {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
7720 // Require the client to init this incase the context is lost and we are no 7777 // Require the client to init this incase the context is lost and we are no
7721 // longer executing commands. 7778 // longer executing commands.
7722 if (*location != -1) { 7779 if (*location != -1) {
7723 return error::kGenericError; 7780 return error::kGenericError;
7724 } 7781 }
7725 *location = program->GetAttribLocation(name_str); 7782 *location = program->GetAttribLocation(name_str);
7726 return error::kNoError; 7783 return error::kNoError;
7727 } 7784 }
7728 7785
7729 error::Error GLES2DecoderImpl::HandleGetAttribLocation( 7786 error::Error GLES2DecoderImpl::HandleGetAttribLocation(
7730 uint32 immediate_data_size, const cmds::GetAttribLocation& c) { 7787 uint32 immediate_data_size,
7788 const void* cmd_data) {
7789 const gles2::cmds::GetAttribLocation& c =
7790 *static_cast<const gles2::cmds::GetAttribLocation*>(cmd_data);
7731 Bucket* bucket = GetBucket(c.name_bucket_id); 7791 Bucket* bucket = GetBucket(c.name_bucket_id);
7732 if (!bucket) { 7792 if (!bucket) {
7733 return error::kInvalidArguments; 7793 return error::kInvalidArguments;
7734 } 7794 }
7735 std::string name_str; 7795 std::string name_str;
7736 if (!bucket->GetAsString(&name_str)) { 7796 if (!bucket->GetAsString(&name_str)) {
7737 return error::kInvalidArguments; 7797 return error::kInvalidArguments;
7738 } 7798 }
7739 return GetAttribLocationHelper( 7799 return GetAttribLocationHelper(
7740 c.program, c.location_shm_id, c.location_shm_offset, name_str); 7800 c.program, c.location_shm_id, c.location_shm_offset, name_str);
(...skipping 25 matching lines...) Expand all
7766 // Require the client to init this incase the context is lost an we are no 7826 // Require the client to init this incase the context is lost an we are no
7767 // longer executing commands. 7827 // longer executing commands.
7768 if (*location != -1) { 7828 if (*location != -1) {
7769 return error::kGenericError; 7829 return error::kGenericError;
7770 } 7830 }
7771 *location = program->GetUniformFakeLocation(name_str); 7831 *location = program->GetUniformFakeLocation(name_str);
7772 return error::kNoError; 7832 return error::kNoError;
7773 } 7833 }
7774 7834
7775 error::Error GLES2DecoderImpl::HandleGetUniformLocation( 7835 error::Error GLES2DecoderImpl::HandleGetUniformLocation(
7776 uint32 immediate_data_size, const cmds::GetUniformLocation& c) { 7836 uint32 immediate_data_size,
7837 const void* cmd_data) {
7838 const gles2::cmds::GetUniformLocation& c =
7839 *static_cast<const gles2::cmds::GetUniformLocation*>(cmd_data);
7777 Bucket* bucket = GetBucket(c.name_bucket_id); 7840 Bucket* bucket = GetBucket(c.name_bucket_id);
7778 if (!bucket) { 7841 if (!bucket) {
7779 return error::kInvalidArguments; 7842 return error::kInvalidArguments;
7780 } 7843 }
7781 std::string name_str; 7844 std::string name_str;
7782 if (!bucket->GetAsString(&name_str)) { 7845 if (!bucket->GetAsString(&name_str)) {
7783 return error::kInvalidArguments; 7846 return error::kInvalidArguments;
7784 } 7847 }
7785 return GetUniformLocationHelper( 7848 return GetUniformLocationHelper(
7786 c.program, c.location_shm_id, c.location_shm_offset, name_str); 7849 c.program, c.location_shm_id, c.location_shm_offset, name_str);
7787 } 7850 }
7788 7851
7789 error::Error GLES2DecoderImpl::HandleGetString( 7852 error::Error GLES2DecoderImpl::HandleGetString(uint32 immediate_data_size,
7790 uint32 immediate_data_size, const cmds::GetString& c) { 7853 const void* cmd_data) {
7854 const gles2::cmds::GetString& c =
7855 *static_cast<const gles2::cmds::GetString*>(cmd_data);
7791 GLenum name = static_cast<GLenum>(c.name); 7856 GLenum name = static_cast<GLenum>(c.name);
7792 if (!validators_->string_type.IsValid(name)) { 7857 if (!validators_->string_type.IsValid(name)) {
7793 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetString", name, "name"); 7858 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetString", name, "name");
7794 return error::kNoError; 7859 return error::kNoError;
7795 } 7860 }
7796 const char* str = reinterpret_cast<const char*>(glGetString(name)); 7861 const char* str = reinterpret_cast<const char*>(glGetString(name));
7797 std::string extensions; 7862 std::string extensions;
7798 switch (name) { 7863 switch (name) {
7799 case GL_VERSION: 7864 case GL_VERSION:
7800 str = "OpenGL ES 2.0 Chromium"; 7865 str = "OpenGL ES 2.0 Chromium";
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
7853 } 7918 }
7854 break; 7919 break;
7855 default: 7920 default:
7856 break; 7921 break;
7857 } 7922 }
7858 Bucket* bucket = CreateBucket(c.bucket_id); 7923 Bucket* bucket = CreateBucket(c.bucket_id);
7859 bucket->SetFromString(str); 7924 bucket->SetFromString(str);
7860 return error::kNoError; 7925 return error::kNoError;
7861 } 7926 }
7862 7927
7863 error::Error GLES2DecoderImpl::HandleBufferData( 7928 error::Error GLES2DecoderImpl::HandleBufferData(uint32 immediate_data_size,
7864 uint32 immediate_data_size, const cmds::BufferData& c) { 7929 const void* cmd_data) {
7930 const gles2::cmds::BufferData& c =
7931 *static_cast<const gles2::cmds::BufferData*>(cmd_data);
7865 GLenum target = static_cast<GLenum>(c.target); 7932 GLenum target = static_cast<GLenum>(c.target);
7866 GLsizeiptr size = static_cast<GLsizeiptr>(c.size); 7933 GLsizeiptr size = static_cast<GLsizeiptr>(c.size);
7867 uint32 data_shm_id = static_cast<uint32>(c.data_shm_id); 7934 uint32 data_shm_id = static_cast<uint32>(c.data_shm_id);
7868 uint32 data_shm_offset = static_cast<uint32>(c.data_shm_offset); 7935 uint32 data_shm_offset = static_cast<uint32>(c.data_shm_offset);
7869 GLenum usage = static_cast<GLenum>(c.usage); 7936 GLenum usage = static_cast<GLenum>(c.usage);
7870 const void* data = NULL; 7937 const void* data = NULL;
7871 if (data_shm_id != 0 || data_shm_offset != 0) { 7938 if (data_shm_id != 0 || data_shm_offset != 0) {
7872 data = GetSharedMemoryAs<const void*>(data_shm_id, data_shm_offset, size); 7939 data = GetSharedMemoryAs<const void*>(data_shm_id, data_shm_offset, size);
7873 if (!data) { 7940 if (!data) {
7874 return error::kOutOfBounds; 7941 return error::kOutOfBounds;
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
8258 GLenum error = LOCAL_PEEK_GL_ERROR("glCompressedTexImage2D"); 8325 GLenum error = LOCAL_PEEK_GL_ERROR("glCompressedTexImage2D");
8259 if (error == GL_NO_ERROR) { 8326 if (error == GL_NO_ERROR) {
8260 texture_manager()->SetLevelInfo( 8327 texture_manager()->SetLevelInfo(
8261 texture_ref, target, level, internal_format, 8328 texture_ref, target, level, internal_format,
8262 width, height, 1, border, 0, 0, true); 8329 width, height, 1, border, 0, 0, true);
8263 } 8330 }
8264 return error::kNoError; 8331 return error::kNoError;
8265 } 8332 }
8266 8333
8267 error::Error GLES2DecoderImpl::HandleCompressedTexImage2D( 8334 error::Error GLES2DecoderImpl::HandleCompressedTexImage2D(
8268 uint32 immediate_data_size, const cmds::CompressedTexImage2D& c) { 8335 uint32 immediate_data_size,
8336 const void* cmd_data) {
8337 const gles2::cmds::CompressedTexImage2D& c =
8338 *static_cast<const gles2::cmds::CompressedTexImage2D*>(cmd_data);
8269 GLenum target = static_cast<GLenum>(c.target); 8339 GLenum target = static_cast<GLenum>(c.target);
8270 GLint level = static_cast<GLint>(c.level); 8340 GLint level = static_cast<GLint>(c.level);
8271 GLenum internal_format = static_cast<GLenum>(c.internalformat); 8341 GLenum internal_format = static_cast<GLenum>(c.internalformat);
8272 GLsizei width = static_cast<GLsizei>(c.width); 8342 GLsizei width = static_cast<GLsizei>(c.width);
8273 GLsizei height = static_cast<GLsizei>(c.height); 8343 GLsizei height = static_cast<GLsizei>(c.height);
8274 GLint border = static_cast<GLint>(c.border); 8344 GLint border = static_cast<GLint>(c.border);
8275 GLsizei image_size = static_cast<GLsizei>(c.imageSize); 8345 GLsizei image_size = static_cast<GLsizei>(c.imageSize);
8276 uint32 data_shm_id = static_cast<uint32>(c.data_shm_id); 8346 uint32 data_shm_id = static_cast<uint32>(c.data_shm_id);
8277 uint32 data_shm_offset = static_cast<uint32>(c.data_shm_offset); 8347 uint32 data_shm_offset = static_cast<uint32>(c.data_shm_offset);
8278 const void* data = NULL; 8348 const void* data = NULL;
8279 if (data_shm_id != 0 || data_shm_offset != 0) { 8349 if (data_shm_id != 0 || data_shm_offset != 0) {
8280 data = GetSharedMemoryAs<const void*>( 8350 data = GetSharedMemoryAs<const void*>(
8281 data_shm_id, data_shm_offset, image_size); 8351 data_shm_id, data_shm_offset, image_size);
8282 if (!data) { 8352 if (!data) {
8283 return error::kOutOfBounds; 8353 return error::kOutOfBounds;
8284 } 8354 }
8285 } 8355 }
8286 return DoCompressedTexImage2D( 8356 return DoCompressedTexImage2D(
8287 target, level, internal_format, width, height, border, image_size, data); 8357 target, level, internal_format, width, height, border, image_size, data);
8288 } 8358 }
8289 8359
8290 error::Error GLES2DecoderImpl::HandleCompressedTexImage2DBucket( 8360 error::Error GLES2DecoderImpl::HandleCompressedTexImage2DBucket(
8291 uint32 immediate_data_size, const cmds::CompressedTexImage2DBucket& c) { 8361 uint32 immediate_data_size,
8362 const void* cmd_data) {
8363 const gles2::cmds::CompressedTexImage2DBucket& c =
8364 *static_cast<const gles2::cmds::CompressedTexImage2DBucket*>(cmd_data);
8292 GLenum target = static_cast<GLenum>(c.target); 8365 GLenum target = static_cast<GLenum>(c.target);
8293 GLint level = static_cast<GLint>(c.level); 8366 GLint level = static_cast<GLint>(c.level);
8294 GLenum internal_format = static_cast<GLenum>(c.internalformat); 8367 GLenum internal_format = static_cast<GLenum>(c.internalformat);
8295 GLsizei width = static_cast<GLsizei>(c.width); 8368 GLsizei width = static_cast<GLsizei>(c.width);
8296 GLsizei height = static_cast<GLsizei>(c.height); 8369 GLsizei height = static_cast<GLsizei>(c.height);
8297 GLint border = static_cast<GLint>(c.border); 8370 GLint border = static_cast<GLint>(c.border);
8298 Bucket* bucket = GetBucket(c.bucket_id); 8371 Bucket* bucket = GetBucket(c.bucket_id);
8299 if (!bucket) { 8372 if (!bucket) {
8300 return error::kInvalidArguments; 8373 return error::kInvalidArguments;
8301 } 8374 }
8302 uint32 data_size = bucket->size(); 8375 uint32 data_size = bucket->size();
8303 GLsizei imageSize = data_size; 8376 GLsizei imageSize = data_size;
8304 const void* data = bucket->GetData(0, data_size); 8377 const void* data = bucket->GetData(0, data_size);
8305 if (!data) { 8378 if (!data) {
8306 return error::kInvalidArguments; 8379 return error::kInvalidArguments;
8307 } 8380 }
8308 return DoCompressedTexImage2D( 8381 return DoCompressedTexImage2D(
8309 target, level, internal_format, width, height, border, 8382 target, level, internal_format, width, height, border,
8310 imageSize, data); 8383 imageSize, data);
8311 } 8384 }
8312 8385
8313 error::Error GLES2DecoderImpl::HandleCompressedTexSubImage2DBucket( 8386 error::Error GLES2DecoderImpl::HandleCompressedTexSubImage2DBucket(
8314 uint32 immediate_data_size, 8387 uint32 immediate_data_size,
8315 const cmds::CompressedTexSubImage2DBucket& c) { 8388 const void* cmd_data) {
8389 const gles2::cmds::CompressedTexSubImage2DBucket& c =
8390 *static_cast<const gles2::cmds::CompressedTexSubImage2DBucket*>(cmd_data);
8316 GLenum target = static_cast<GLenum>(c.target); 8391 GLenum target = static_cast<GLenum>(c.target);
8317 GLint level = static_cast<GLint>(c.level); 8392 GLint level = static_cast<GLint>(c.level);
8318 GLint xoffset = static_cast<GLint>(c.xoffset); 8393 GLint xoffset = static_cast<GLint>(c.xoffset);
8319 GLint yoffset = static_cast<GLint>(c.yoffset); 8394 GLint yoffset = static_cast<GLint>(c.yoffset);
8320 GLsizei width = static_cast<GLsizei>(c.width); 8395 GLsizei width = static_cast<GLsizei>(c.width);
8321 GLsizei height = static_cast<GLsizei>(c.height); 8396 GLsizei height = static_cast<GLsizei>(c.height);
8322 GLenum format = static_cast<GLenum>(c.format); 8397 GLenum format = static_cast<GLenum>(c.format);
8323 Bucket* bucket = GetBucket(c.bucket_id); 8398 Bucket* bucket = GetBucket(c.bucket_id);
8324 if (!bucket) { 8399 if (!bucket) {
8325 return error::kInvalidArguments; 8400 return error::kInvalidArguments;
(...skipping 27 matching lines...) Expand all
8353 if (imageSize < 0) { 8428 if (imageSize < 0) {
8354 LOCAL_SET_GL_ERROR( 8429 LOCAL_SET_GL_ERROR(
8355 GL_INVALID_VALUE, "glCompressedTexSubImage2D", "imageSize < 0"); 8430 GL_INVALID_VALUE, "glCompressedTexSubImage2D", "imageSize < 0");
8356 return error::kNoError; 8431 return error::kNoError;
8357 } 8432 }
8358 DoCompressedTexSubImage2D( 8433 DoCompressedTexSubImage2D(
8359 target, level, xoffset, yoffset, width, height, format, imageSize, data); 8434 target, level, xoffset, yoffset, width, height, format, imageSize, data);
8360 return error::kNoError; 8435 return error::kNoError;
8361 } 8436 }
8362 8437
8363 error::Error GLES2DecoderImpl::HandleTexImage2D( 8438 error::Error GLES2DecoderImpl::HandleTexImage2D(uint32 immediate_data_size,
8364 uint32 immediate_data_size, const cmds::TexImage2D& c) { 8439 const void* cmd_data) {
8440 const gles2::cmds::TexImage2D& c =
8441 *static_cast<const gles2::cmds::TexImage2D*>(cmd_data);
8365 TRACE_EVENT2("gpu", "GLES2DecoderImpl::HandleTexImage2D", 8442 TRACE_EVENT2("gpu", "GLES2DecoderImpl::HandleTexImage2D",
8366 "width", c.width, "height", c.height); 8443 "width", c.width, "height", c.height);
8367 // Set as failed for now, but if it successed, this will be set to not failed. 8444 // Set as failed for now, but if it successed, this will be set to not failed.
8368 texture_state_.tex_image_2d_failed = true; 8445 texture_state_.tex_image_2d_failed = true;
8369 GLenum target = static_cast<GLenum>(c.target); 8446 GLenum target = static_cast<GLenum>(c.target);
8370 GLint level = static_cast<GLint>(c.level); 8447 GLint level = static_cast<GLint>(c.level);
8371 // TODO(kloveless): Change TexImage2D command to use unsigned integer 8448 // TODO(kloveless): Change TexImage2D command to use unsigned integer
8372 // for internalformat. 8449 // for internalformat.
8373 GLenum internal_format = static_cast<GLenum>(c.internalformat); 8450 GLenum internal_format = static_cast<GLenum>(c.internalformat);
8374 GLsizei width = static_cast<GLsizei>(c.width); 8451 GLsizei width = static_cast<GLsizei>(c.width);
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after
8837 target, level, internal_format, width, height, 0, format, type, data); 8914 target, level, internal_format, width, height, 0, format, type, data);
8838 } else { 8915 } else {
8839 ScopedTextureUploadTimer timer(&texture_state_); 8916 ScopedTextureUploadTimer timer(&texture_state_);
8840 glTexSubImage2D( 8917 glTexSubImage2D(
8841 target, level, xoffset, yoffset, width, height, format, type, data); 8918 target, level, xoffset, yoffset, width, height, format, type, data);
8842 } 8919 }
8843 texture_manager()->SetLevelCleared(texture_ref, target, level, true); 8920 texture_manager()->SetLevelCleared(texture_ref, target, level, true);
8844 return error::kNoError; 8921 return error::kNoError;
8845 } 8922 }
8846 8923
8847 error::Error GLES2DecoderImpl::HandleTexSubImage2D( 8924 error::Error GLES2DecoderImpl::HandleTexSubImage2D(uint32 immediate_data_size,
8848 uint32 immediate_data_size, const cmds::TexSubImage2D& c) { 8925 const void* cmd_data) {
8926 const gles2::cmds::TexSubImage2D& c =
8927 *static_cast<const gles2::cmds::TexSubImage2D*>(cmd_data);
8849 TRACE_EVENT2("gpu", "GLES2DecoderImpl::HandleTexSubImage2D", 8928 TRACE_EVENT2("gpu", "GLES2DecoderImpl::HandleTexSubImage2D",
8850 "width", c.width, "height", c.height); 8929 "width", c.width, "height", c.height);
8851 GLboolean internal = static_cast<GLboolean>(c.internal); 8930 GLboolean internal = static_cast<GLboolean>(c.internal);
8852 if (internal == GL_TRUE && texture_state_.tex_image_2d_failed) 8931 if (internal == GL_TRUE && texture_state_.tex_image_2d_failed)
8853 return error::kNoError; 8932 return error::kNoError;
8854 8933
8855 GLenum target = static_cast<GLenum>(c.target); 8934 GLenum target = static_cast<GLenum>(c.target);
8856 GLint level = static_cast<GLint>(c.level); 8935 GLint level = static_cast<GLint>(c.level);
8857 GLint xoffset = static_cast<GLint>(c.xoffset); 8936 GLint xoffset = static_cast<GLint>(c.xoffset);
8858 GLint yoffset = static_cast<GLint>(c.yoffset); 8937 GLint yoffset = static_cast<GLint>(c.yoffset);
8859 GLsizei width = static_cast<GLsizei>(c.width); 8938 GLsizei width = static_cast<GLsizei>(c.width);
8860 GLsizei height = static_cast<GLsizei>(c.height); 8939 GLsizei height = static_cast<GLsizei>(c.height);
8861 GLenum format = static_cast<GLenum>(c.format); 8940 GLenum format = static_cast<GLenum>(c.format);
8862 GLenum type = static_cast<GLenum>(c.type); 8941 GLenum type = static_cast<GLenum>(c.type);
8863 uint32 data_size; 8942 uint32 data_size;
8864 if (!GLES2Util::ComputeImageDataSizes( 8943 if (!GLES2Util::ComputeImageDataSizes(
8865 width, height, format, type, state_.unpack_alignment, &data_size, 8944 width, height, format, type, state_.unpack_alignment, &data_size,
8866 NULL, NULL)) { 8945 NULL, NULL)) {
8867 return error::kOutOfBounds; 8946 return error::kOutOfBounds;
8868 } 8947 }
8869 const void* pixels = GetSharedMemoryAs<const void*>( 8948 const void* pixels = GetSharedMemoryAs<const void*>(
8870 c.pixels_shm_id, c.pixels_shm_offset, data_size); 8949 c.pixels_shm_id, c.pixels_shm_offset, data_size);
8871 return DoTexSubImage2D( 8950 return DoTexSubImage2D(
8872 target, level, xoffset, yoffset, width, height, format, type, pixels); 8951 target, level, xoffset, yoffset, width, height, format, type, pixels);
8873 } 8952 }
8874 8953
8875 error::Error GLES2DecoderImpl::HandleGetVertexAttribPointerv( 8954 error::Error GLES2DecoderImpl::HandleGetVertexAttribPointerv(
8876 uint32 immediate_data_size, const cmds::GetVertexAttribPointerv& c) { 8955 uint32 immediate_data_size,
8956 const void* cmd_data) {
8957 const gles2::cmds::GetVertexAttribPointerv& c =
8958 *static_cast<const gles2::cmds::GetVertexAttribPointerv*>(cmd_data);
8877 GLuint index = static_cast<GLuint>(c.index); 8959 GLuint index = static_cast<GLuint>(c.index);
8878 GLenum pname = static_cast<GLenum>(c.pname); 8960 GLenum pname = static_cast<GLenum>(c.pname);
8879 typedef cmds::GetVertexAttribPointerv::Result Result; 8961 typedef cmds::GetVertexAttribPointerv::Result Result;
8880 Result* result = GetSharedMemoryAs<Result*>( 8962 Result* result = GetSharedMemoryAs<Result*>(
8881 c.pointer_shm_id, c.pointer_shm_offset, Result::ComputeSize(1)); 8963 c.pointer_shm_id, c.pointer_shm_offset, Result::ComputeSize(1));
8882 if (!result) { 8964 if (!result) {
8883 return error::kOutOfBounds; 8965 return error::kOutOfBounds;
8884 } 8966 }
8885 // Check that the client initialized the result. 8967 // Check that the client initialized the result.
8886 if (result->size != 0) { 8968 if (result->size != 0) {
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
8955 shm_id, shm_offset, SizedResult<GLint>::ComputeSizeFromBytes(size)); 9037 shm_id, shm_offset, SizedResult<GLint>::ComputeSizeFromBytes(size));
8956 if (!result) { 9038 if (!result) {
8957 *error = error::kOutOfBounds; 9039 *error = error::kOutOfBounds;
8958 return false; 9040 return false;
8959 } 9041 }
8960 result->size = size; 9042 result->size = size;
8961 *result_type = type; 9043 *result_type = type;
8962 return true; 9044 return true;
8963 } 9045 }
8964 9046
8965 error::Error GLES2DecoderImpl::HandleGetUniformiv( 9047 error::Error GLES2DecoderImpl::HandleGetUniformiv(uint32 immediate_data_size,
8966 uint32 immediate_data_size, const cmds::GetUniformiv& c) { 9048 const void* cmd_data) {
9049 const gles2::cmds::GetUniformiv& c =
9050 *static_cast<const gles2::cmds::GetUniformiv*>(cmd_data);
8967 GLuint program = c.program; 9051 GLuint program = c.program;
8968 GLint fake_location = c.location; 9052 GLint fake_location = c.location;
8969 GLuint service_id; 9053 GLuint service_id;
8970 GLenum result_type; 9054 GLenum result_type;
8971 GLint real_location = -1; 9055 GLint real_location = -1;
8972 Error error; 9056 Error error;
8973 void* result; 9057 void* result;
8974 if (GetUniformSetup( 9058 if (GetUniformSetup(
8975 program, fake_location, c.params_shm_id, c.params_shm_offset, 9059 program, fake_location, c.params_shm_id, c.params_shm_offset,
8976 &error, &real_location, &service_id, &result, &result_type)) { 9060 &error, &real_location, &service_id, &result, &result_type)) {
8977 glGetUniformiv( 9061 glGetUniformiv(
8978 service_id, real_location, 9062 service_id, real_location,
8979 static_cast<cmds::GetUniformiv::Result*>(result)->GetData()); 9063 static_cast<cmds::GetUniformiv::Result*>(result)->GetData());
8980 } 9064 }
8981 return error; 9065 return error;
8982 } 9066 }
8983 9067
8984 error::Error GLES2DecoderImpl::HandleGetUniformfv( 9068 error::Error GLES2DecoderImpl::HandleGetUniformfv(uint32 immediate_data_size,
8985 uint32 immediate_data_size, const cmds::GetUniformfv& c) { 9069 const void* cmd_data) {
9070 const gles2::cmds::GetUniformfv& c =
9071 *static_cast<const gles2::cmds::GetUniformfv*>(cmd_data);
8986 GLuint program = c.program; 9072 GLuint program = c.program;
8987 GLint fake_location = c.location; 9073 GLint fake_location = c.location;
8988 GLuint service_id; 9074 GLuint service_id;
8989 GLint real_location = -1; 9075 GLint real_location = -1;
8990 Error error; 9076 Error error;
8991 typedef cmds::GetUniformfv::Result Result; 9077 typedef cmds::GetUniformfv::Result Result;
8992 Result* result; 9078 Result* result;
8993 GLenum result_type; 9079 GLenum result_type;
8994 if (GetUniformSetup( 9080 if (GetUniformSetup(
8995 program, fake_location, c.params_shm_id, c.params_shm_offset, 9081 program, fake_location, c.params_shm_id, c.params_shm_offset,
8996 &error, &real_location, &service_id, 9082 &error, &real_location, &service_id,
8997 reinterpret_cast<void**>(&result), &result_type)) { 9083 reinterpret_cast<void**>(&result), &result_type)) {
8998 if (result_type == GL_BOOL || result_type == GL_BOOL_VEC2 || 9084 if (result_type == GL_BOOL || result_type == GL_BOOL_VEC2 ||
8999 result_type == GL_BOOL_VEC3 || result_type == GL_BOOL_VEC4) { 9085 result_type == GL_BOOL_VEC3 || result_type == GL_BOOL_VEC4) {
9000 GLsizei num_values = result->GetNumResults(); 9086 GLsizei num_values = result->GetNumResults();
9001 scoped_ptr<GLint[]> temp(new GLint[num_values]); 9087 scoped_ptr<GLint[]> temp(new GLint[num_values]);
9002 glGetUniformiv(service_id, real_location, temp.get()); 9088 glGetUniformiv(service_id, real_location, temp.get());
9003 GLfloat* dst = result->GetData(); 9089 GLfloat* dst = result->GetData();
9004 for (GLsizei ii = 0; ii < num_values; ++ii) { 9090 for (GLsizei ii = 0; ii < num_values; ++ii) {
9005 dst[ii] = (temp[ii] != 0); 9091 dst[ii] = (temp[ii] != 0);
9006 } 9092 }
9007 } else { 9093 } else {
9008 glGetUniformfv(service_id, real_location, result->GetData()); 9094 glGetUniformfv(service_id, real_location, result->GetData());
9009 } 9095 }
9010 } 9096 }
9011 return error; 9097 return error;
9012 } 9098 }
9013 9099
9014 error::Error GLES2DecoderImpl::HandleGetShaderPrecisionFormat( 9100 error::Error GLES2DecoderImpl::HandleGetShaderPrecisionFormat(
9015 uint32 immediate_data_size, const cmds::GetShaderPrecisionFormat& c) { 9101 uint32 immediate_data_size,
9102 const void* cmd_data) {
9103 const gles2::cmds::GetShaderPrecisionFormat& c =
9104 *static_cast<const gles2::cmds::GetShaderPrecisionFormat*>(cmd_data);
9016 GLenum shader_type = static_cast<GLenum>(c.shadertype); 9105 GLenum shader_type = static_cast<GLenum>(c.shadertype);
9017 GLenum precision_type = static_cast<GLenum>(c.precisiontype); 9106 GLenum precision_type = static_cast<GLenum>(c.precisiontype);
9018 typedef cmds::GetShaderPrecisionFormat::Result Result; 9107 typedef cmds::GetShaderPrecisionFormat::Result Result;
9019 Result* result = GetSharedMemoryAs<Result*>( 9108 Result* result = GetSharedMemoryAs<Result*>(
9020 c.result_shm_id, c.result_shm_offset, sizeof(*result)); 9109 c.result_shm_id, c.result_shm_offset, sizeof(*result));
9021 if (!result) { 9110 if (!result) {
9022 return error::kOutOfBounds; 9111 return error::kOutOfBounds;
9023 } 9112 }
9024 // Check that the client initialized the result. 9113 // Check that the client initialized the result.
9025 if (result->success != 0) { 9114 if (result->success != 0) {
(...skipping 17 matching lines...) Expand all
9043 GetShaderPrecisionFormatImpl(shader_type, precision_type, range, &precision); 9132 GetShaderPrecisionFormatImpl(shader_type, precision_type, range, &precision);
9044 9133
9045 result->min_range = range[0]; 9134 result->min_range = range[0];
9046 result->max_range = range[1]; 9135 result->max_range = range[1];
9047 result->precision = precision; 9136 result->precision = precision;
9048 9137
9049 return error::kNoError; 9138 return error::kNoError;
9050 } 9139 }
9051 9140
9052 error::Error GLES2DecoderImpl::HandleGetAttachedShaders( 9141 error::Error GLES2DecoderImpl::HandleGetAttachedShaders(
9053 uint32 immediate_data_size, const cmds::GetAttachedShaders& c) { 9142 uint32 immediate_data_size,
9143 const void* cmd_data) {
9144 const gles2::cmds::GetAttachedShaders& c =
9145 *static_cast<const gles2::cmds::GetAttachedShaders*>(cmd_data);
9054 uint32 result_size = c.result_size; 9146 uint32 result_size = c.result_size;
9055 GLuint program_id = static_cast<GLuint>(c.program); 9147 GLuint program_id = static_cast<GLuint>(c.program);
9056 Program* program = GetProgramInfoNotShader( 9148 Program* program = GetProgramInfoNotShader(
9057 program_id, "glGetAttachedShaders"); 9149 program_id, "glGetAttachedShaders");
9058 if (!program) { 9150 if (!program) {
9059 return error::kNoError; 9151 return error::kNoError;
9060 } 9152 }
9061 typedef cmds::GetAttachedShaders::Result Result; 9153 typedef cmds::GetAttachedShaders::Result Result;
9062 uint32 max_count = Result::ComputeMaxResults(result_size); 9154 uint32 max_count = Result::ComputeMaxResults(result_size);
9063 Result* result = GetSharedMemoryAs<Result*>( 9155 Result* result = GetSharedMemoryAs<Result*>(
(...skipping 13 matching lines...) Expand all
9077 &result->GetData()[ii])) { 9169 &result->GetData()[ii])) {
9078 NOTREACHED(); 9170 NOTREACHED();
9079 return error::kGenericError; 9171 return error::kGenericError;
9080 } 9172 }
9081 } 9173 }
9082 result->SetNumResults(count); 9174 result->SetNumResults(count);
9083 return error::kNoError; 9175 return error::kNoError;
9084 } 9176 }
9085 9177
9086 error::Error GLES2DecoderImpl::HandleGetActiveUniform( 9178 error::Error GLES2DecoderImpl::HandleGetActiveUniform(
9087 uint32 immediate_data_size, const cmds::GetActiveUniform& c) { 9179 uint32 immediate_data_size,
9180 const void* cmd_data) {
9181 const gles2::cmds::GetActiveUniform& c =
9182 *static_cast<const gles2::cmds::GetActiveUniform*>(cmd_data);
9088 GLuint program_id = c.program; 9183 GLuint program_id = c.program;
9089 GLuint index = c.index; 9184 GLuint index = c.index;
9090 uint32 name_bucket_id = c.name_bucket_id; 9185 uint32 name_bucket_id = c.name_bucket_id;
9091 typedef cmds::GetActiveUniform::Result Result; 9186 typedef cmds::GetActiveUniform::Result Result;
9092 Result* result = GetSharedMemoryAs<Result*>( 9187 Result* result = GetSharedMemoryAs<Result*>(
9093 c.result_shm_id, c.result_shm_offset, sizeof(*result)); 9188 c.result_shm_id, c.result_shm_offset, sizeof(*result));
9094 if (!result) { 9189 if (!result) {
9095 return error::kOutOfBounds; 9190 return error::kOutOfBounds;
9096 } 9191 }
9097 // Check that the client initialized the result. 9192 // Check that the client initialized the result.
(...skipping 13 matching lines...) Expand all
9111 return error::kNoError; 9206 return error::kNoError;
9112 } 9207 }
9113 result->success = 1; // true. 9208 result->success = 1; // true.
9114 result->size = uniform_info->size; 9209 result->size = uniform_info->size;
9115 result->type = uniform_info->type; 9210 result->type = uniform_info->type;
9116 Bucket* bucket = CreateBucket(name_bucket_id); 9211 Bucket* bucket = CreateBucket(name_bucket_id);
9117 bucket->SetFromString(uniform_info->name.c_str()); 9212 bucket->SetFromString(uniform_info->name.c_str());
9118 return error::kNoError; 9213 return error::kNoError;
9119 } 9214 }
9120 9215
9121 error::Error GLES2DecoderImpl::HandleGetActiveAttrib( 9216 error::Error GLES2DecoderImpl::HandleGetActiveAttrib(uint32 immediate_data_size,
9122 uint32 immediate_data_size, const cmds::GetActiveAttrib& c) { 9217 const void* cmd_data) {
9218 const gles2::cmds::GetActiveAttrib& c =
9219 *static_cast<const gles2::cmds::GetActiveAttrib*>(cmd_data);
9123 GLuint program_id = c.program; 9220 GLuint program_id = c.program;
9124 GLuint index = c.index; 9221 GLuint index = c.index;
9125 uint32 name_bucket_id = c.name_bucket_id; 9222 uint32 name_bucket_id = c.name_bucket_id;
9126 typedef cmds::GetActiveAttrib::Result Result; 9223 typedef cmds::GetActiveAttrib::Result Result;
9127 Result* result = GetSharedMemoryAs<Result*>( 9224 Result* result = GetSharedMemoryAs<Result*>(
9128 c.result_shm_id, c.result_shm_offset, sizeof(*result)); 9225 c.result_shm_id, c.result_shm_offset, sizeof(*result));
9129 if (!result) { 9226 if (!result) {
9130 return error::kOutOfBounds; 9227 return error::kOutOfBounds;
9131 } 9228 }
9132 // Check that the client initialized the result. 9229 // Check that the client initialized the result.
(...skipping 13 matching lines...) Expand all
9146 return error::kNoError; 9243 return error::kNoError;
9147 } 9244 }
9148 result->success = 1; // true. 9245 result->success = 1; // true.
9149 result->size = attrib_info->size; 9246 result->size = attrib_info->size;
9150 result->type = attrib_info->type; 9247 result->type = attrib_info->type;
9151 Bucket* bucket = CreateBucket(name_bucket_id); 9248 Bucket* bucket = CreateBucket(name_bucket_id);
9152 bucket->SetFromString(attrib_info->name.c_str()); 9249 bucket->SetFromString(attrib_info->name.c_str());
9153 return error::kNoError; 9250 return error::kNoError;
9154 } 9251 }
9155 9252
9156 error::Error GLES2DecoderImpl::HandleShaderBinary( 9253 error::Error GLES2DecoderImpl::HandleShaderBinary(uint32 immediate_data_size,
9157 uint32 immediate_data_size, const cmds::ShaderBinary& c) { 9254 const void* cmd_data) {
9158 #if 1 // No binary shader support. 9255 #if 1 // No binary shader support.
9159 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glShaderBinary", "not supported"); 9256 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glShaderBinary", "not supported");
9160 return error::kNoError; 9257 return error::kNoError;
9161 #else 9258 #else
9162 GLsizei n = static_cast<GLsizei>(c.n); 9259 GLsizei n = static_cast<GLsizei>(c.n);
9163 if (n < 0) { 9260 if (n < 0) {
9164 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glShaderBinary", "n < 0"); 9261 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glShaderBinary", "n < 0");
9165 return error::kNoError; 9262 return error::kNoError;
9166 } 9263 }
9167 GLsizei length = static_cast<GLsizei>(c.length); 9264 GLsizei length = static_cast<GLsizei>(c.length);
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
9303 } 9400 }
9304 } else { 9401 } else {
9305 if (!surface_->SwapBuffers()) { 9402 if (!surface_->SwapBuffers()) {
9306 LOG(ERROR) << "Context lost because SwapBuffers failed."; 9403 LOG(ERROR) << "Context lost because SwapBuffers failed.";
9307 LoseContext(GL_UNKNOWN_CONTEXT_RESET_ARB); 9404 LoseContext(GL_UNKNOWN_CONTEXT_RESET_ARB);
9308 } 9405 }
9309 } 9406 }
9310 } 9407 }
9311 9408
9312 error::Error GLES2DecoderImpl::HandleEnableFeatureCHROMIUM( 9409 error::Error GLES2DecoderImpl::HandleEnableFeatureCHROMIUM(
9313 uint32 immediate_data_size, const cmds::EnableFeatureCHROMIUM& c) { 9410 uint32 immediate_data_size,
9411 const void* cmd_data) {
9412 const gles2::cmds::EnableFeatureCHROMIUM& c =
9413 *static_cast<const gles2::cmds::EnableFeatureCHROMIUM*>(cmd_data);
9314 Bucket* bucket = GetBucket(c.bucket_id); 9414 Bucket* bucket = GetBucket(c.bucket_id);
9315 if (!bucket || bucket->size() == 0) { 9415 if (!bucket || bucket->size() == 0) {
9316 return error::kInvalidArguments; 9416 return error::kInvalidArguments;
9317 } 9417 }
9318 typedef cmds::EnableFeatureCHROMIUM::Result Result; 9418 typedef cmds::EnableFeatureCHROMIUM::Result Result;
9319 Result* result = GetSharedMemoryAs<Result*>( 9419 Result* result = GetSharedMemoryAs<Result*>(
9320 c.result_shm_id, c.result_shm_offset, sizeof(*result)); 9420 c.result_shm_id, c.result_shm_offset, sizeof(*result));
9321 if (!result) { 9421 if (!result) {
9322 return error::kOutOfBounds; 9422 return error::kOutOfBounds;
9323 } 9423 }
(...skipping 27 matching lines...) Expand all
9351 } else { 9451 } else {
9352 return error::kNoError; 9452 return error::kNoError;
9353 } 9453 }
9354 9454
9355 *result = 1; // true. 9455 *result = 1; // true.
9356 return error::kNoError; 9456 return error::kNoError;
9357 } 9457 }
9358 9458
9359 error::Error GLES2DecoderImpl::HandleGetRequestableExtensionsCHROMIUM( 9459 error::Error GLES2DecoderImpl::HandleGetRequestableExtensionsCHROMIUM(
9360 uint32 immediate_data_size, 9460 uint32 immediate_data_size,
9361 const cmds::GetRequestableExtensionsCHROMIUM& c) { 9461 const void* cmd_data) {
9462 const gles2::cmds::GetRequestableExtensionsCHROMIUM& c =
9463 *static_cast<const gles2::cmds::GetRequestableExtensionsCHROMIUM*>(
9464 cmd_data);
9362 Bucket* bucket = CreateBucket(c.bucket_id); 9465 Bucket* bucket = CreateBucket(c.bucket_id);
9363 scoped_refptr<FeatureInfo> info(new FeatureInfo()); 9466 scoped_refptr<FeatureInfo> info(new FeatureInfo());
9364 info->Initialize(disallowed_features_); 9467 info->Initialize(disallowed_features_);
9365 bucket->SetFromString(info->extensions().c_str()); 9468 bucket->SetFromString(info->extensions().c_str());
9366 return error::kNoError; 9469 return error::kNoError;
9367 } 9470 }
9368 9471
9369 error::Error GLES2DecoderImpl::HandleRequestExtensionCHROMIUM( 9472 error::Error GLES2DecoderImpl::HandleRequestExtensionCHROMIUM(
9370 uint32 immediate_data_size, const cmds::RequestExtensionCHROMIUM& c) { 9473 uint32 immediate_data_size,
9474 const void* cmd_data) {
9475 const gles2::cmds::RequestExtensionCHROMIUM& c =
9476 *static_cast<const gles2::cmds::RequestExtensionCHROMIUM*>(cmd_data);
9371 Bucket* bucket = GetBucket(c.bucket_id); 9477 Bucket* bucket = GetBucket(c.bucket_id);
9372 if (!bucket || bucket->size() == 0) { 9478 if (!bucket || bucket->size() == 0) {
9373 return error::kInvalidArguments; 9479 return error::kInvalidArguments;
9374 } 9480 }
9375 std::string feature_str; 9481 std::string feature_str;
9376 if (!bucket->GetAsString(&feature_str)) { 9482 if (!bucket->GetAsString(&feature_str)) {
9377 return error::kInvalidArguments; 9483 return error::kInvalidArguments;
9378 } 9484 }
9379 9485
9380 bool desire_webgl_glsl_validation = 9486 bool desire_webgl_glsl_validation =
(...skipping 24 matching lines...) Expand all
9405 shader_texture_lod_explicitly_enabled_ |= desire_shader_texture_lod; 9511 shader_texture_lod_explicitly_enabled_ |= desire_shader_texture_lod;
9406 InitializeShaderTranslator(); 9512 InitializeShaderTranslator();
9407 } 9513 }
9408 9514
9409 UpdateCapabilities(); 9515 UpdateCapabilities();
9410 9516
9411 return error::kNoError; 9517 return error::kNoError;
9412 } 9518 }
9413 9519
9414 error::Error GLES2DecoderImpl::HandleGetMultipleIntegervCHROMIUM( 9520 error::Error GLES2DecoderImpl::HandleGetMultipleIntegervCHROMIUM(
9415 uint32 immediate_data_size, const cmds::GetMultipleIntegervCHROMIUM& c) { 9521 uint32 immediate_data_size,
9522 const void* cmd_data) {
9523 const gles2::cmds::GetMultipleIntegervCHROMIUM& c =
9524 *static_cast<const gles2::cmds::GetMultipleIntegervCHROMIUM*>(cmd_data);
9416 GLuint count = c.count; 9525 GLuint count = c.count;
9417 uint32 pnames_size; 9526 uint32 pnames_size;
9418 if (!SafeMultiplyUint32(count, sizeof(GLenum), &pnames_size)) { 9527 if (!SafeMultiplyUint32(count, sizeof(GLenum), &pnames_size)) {
9419 return error::kOutOfBounds; 9528 return error::kOutOfBounds;
9420 } 9529 }
9421 const GLenum* pnames = GetSharedMemoryAs<const GLenum*>( 9530 const GLenum* pnames = GetSharedMemoryAs<const GLenum*>(
9422 c.pnames_shm_id, c.pnames_shm_offset, pnames_size); 9531 c.pnames_shm_id, c.pnames_shm_offset, pnames_size);
9423 if (pnames == NULL) { 9532 if (pnames == NULL) {
9424 return error::kOutOfBounds; 9533 return error::kOutOfBounds;
9425 } 9534 }
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
9484 9593
9485 // Just to verify. Should this be a DCHECK? 9594 // Just to verify. Should this be a DCHECK?
9486 if (static_cast<uint32>(results - start) != num_results) { 9595 if (static_cast<uint32>(results - start) != num_results) {
9487 return error::kOutOfBounds; 9596 return error::kOutOfBounds;
9488 } 9597 }
9489 9598
9490 return error::kNoError; 9599 return error::kNoError;
9491 } 9600 }
9492 9601
9493 error::Error GLES2DecoderImpl::HandleGetProgramInfoCHROMIUM( 9602 error::Error GLES2DecoderImpl::HandleGetProgramInfoCHROMIUM(
9494 uint32 immediate_data_size, const cmds::GetProgramInfoCHROMIUM& c) { 9603 uint32 immediate_data_size,
9604 const void* cmd_data) {
9605 const gles2::cmds::GetProgramInfoCHROMIUM& c =
9606 *static_cast<const gles2::cmds::GetProgramInfoCHROMIUM*>(cmd_data);
9495 GLuint program_id = static_cast<GLuint>(c.program); 9607 GLuint program_id = static_cast<GLuint>(c.program);
9496 uint32 bucket_id = c.bucket_id; 9608 uint32 bucket_id = c.bucket_id;
9497 Bucket* bucket = CreateBucket(bucket_id); 9609 Bucket* bucket = CreateBucket(bucket_id);
9498 bucket->SetSize(sizeof(ProgramInfoHeader)); // in case we fail. 9610 bucket->SetSize(sizeof(ProgramInfoHeader)); // in case we fail.
9499 Program* program = NULL; 9611 Program* program = NULL;
9500 program = GetProgram(program_id); 9612 program = GetProgram(program_id);
9501 if (!program || !program->IsValid()) { 9613 if (!program || !program->IsValid()) {
9502 return error::kNoError; 9614 return error::kNoError;
9503 } 9615 }
9504 program->GetProgramInfo(program_manager(), bucket); 9616 program->GetProgramInfo(program_manager(), bucket);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
9553 if (reset_status_ != GL_NO_ERROR) { 9665 if (reset_status_ != GL_NO_ERROR) {
9554 return; 9666 return;
9555 } 9667 }
9556 9668
9557 // Marks this context as lost. 9669 // Marks this context as lost.
9558 reset_status_ = reset_status; 9670 reset_status_ = reset_status;
9559 current_decoder_error_ = error::kLostContext; 9671 current_decoder_error_ = error::kLostContext;
9560 } 9672 }
9561 9673
9562 error::Error GLES2DecoderImpl::HandleInsertSyncPointCHROMIUM( 9674 error::Error GLES2DecoderImpl::HandleInsertSyncPointCHROMIUM(
9563 uint32 immediate_data_size, const cmds::InsertSyncPointCHROMIUM& c) { 9675 uint32 immediate_data_size,
9676 const void* cmd_data) {
9564 return error::kUnknownCommand; 9677 return error::kUnknownCommand;
9565 } 9678 }
9566 9679
9567 error::Error GLES2DecoderImpl::HandleWaitSyncPointCHROMIUM( 9680 error::Error GLES2DecoderImpl::HandleWaitSyncPointCHROMIUM(
9568 uint32 immediate_data_size, const cmds::WaitSyncPointCHROMIUM& c) { 9681 uint32 immediate_data_size,
9682 const void* cmd_data) {
9683 const gles2::cmds::WaitSyncPointCHROMIUM& c =
9684 *static_cast<const gles2::cmds::WaitSyncPointCHROMIUM*>(cmd_data);
9569 group_->mailbox_manager()->PullTextureUpdates(); 9685 group_->mailbox_manager()->PullTextureUpdates();
9570 if (wait_sync_point_callback_.is_null()) 9686 if (wait_sync_point_callback_.is_null())
9571 return error::kNoError; 9687 return error::kNoError;
9572 9688
9573 return wait_sync_point_callback_.Run(c.sync_point) ? 9689 return wait_sync_point_callback_.Run(c.sync_point) ?
9574 error::kNoError : error::kDeferCommandUntilLater; 9690 error::kNoError : error::kDeferCommandUntilLater;
9575 } 9691 }
9576 9692
9577 error::Error GLES2DecoderImpl::HandleDiscardBackbufferCHROMIUM( 9693 error::Error GLES2DecoderImpl::HandleDiscardBackbufferCHROMIUM(
9578 uint32 immediate_data_size, const cmds::DiscardBackbufferCHROMIUM& c) { 9694 uint32 immediate_data_size,
9695 const void* cmd_data) {
9579 if (surface_->DeferDraws()) 9696 if (surface_->DeferDraws())
9580 return error::kDeferCommandUntilLater; 9697 return error::kDeferCommandUntilLater;
9581 if (!surface_->SetBackbufferAllocation(false)) 9698 if (!surface_->SetBackbufferAllocation(false))
9582 return error::kLostContext; 9699 return error::kLostContext;
9583 backbuffer_needs_clear_bits_ |= GL_COLOR_BUFFER_BIT; 9700 backbuffer_needs_clear_bits_ |= GL_COLOR_BUFFER_BIT;
9584 backbuffer_needs_clear_bits_ |= GL_DEPTH_BUFFER_BIT; 9701 backbuffer_needs_clear_bits_ |= GL_DEPTH_BUFFER_BIT;
9585 backbuffer_needs_clear_bits_ |= GL_STENCIL_BUFFER_BIT; 9702 backbuffer_needs_clear_bits_ |= GL_STENCIL_BUFFER_BIT;
9586 return error::kNoError; 9703 return error::kNoError;
9587 } 9704 }
9588 9705
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
9651 } 9768 }
9652 9769
9653 void GLES2DecoderImpl::PerformIdleWork() { 9770 void GLES2DecoderImpl::PerformIdleWork() {
9654 ProcessPendingReadPixels(); 9771 ProcessPendingReadPixels();
9655 if (!async_pixel_transfer_manager_->NeedsProcessMorePendingTransfers()) 9772 if (!async_pixel_transfer_manager_->NeedsProcessMorePendingTransfers())
9656 return; 9773 return;
9657 async_pixel_transfer_manager_->ProcessMorePendingTransfers(); 9774 async_pixel_transfer_manager_->ProcessMorePendingTransfers();
9658 ProcessFinishedAsyncTransfers(); 9775 ProcessFinishedAsyncTransfers();
9659 } 9776 }
9660 9777
9661 error::Error GLES2DecoderImpl::HandleBeginQueryEXT( 9778 error::Error GLES2DecoderImpl::HandleBeginQueryEXT(uint32 immediate_data_size,
9662 uint32 immediate_data_size, const cmds::BeginQueryEXT& c) { 9779 const void* cmd_data) {
9780 const gles2::cmds::BeginQueryEXT& c =
9781 *static_cast<const gles2::cmds::BeginQueryEXT*>(cmd_data);
9663 GLenum target = static_cast<GLenum>(c.target); 9782 GLenum target = static_cast<GLenum>(c.target);
9664 GLuint client_id = static_cast<GLuint>(c.id); 9783 GLuint client_id = static_cast<GLuint>(c.id);
9665 int32 sync_shm_id = static_cast<int32>(c.sync_data_shm_id); 9784 int32 sync_shm_id = static_cast<int32>(c.sync_data_shm_id);
9666 uint32 sync_shm_offset = static_cast<uint32>(c.sync_data_shm_offset); 9785 uint32 sync_shm_offset = static_cast<uint32>(c.sync_data_shm_offset);
9667 9786
9668 switch (target) { 9787 switch (target) {
9669 case GL_COMMANDS_ISSUED_CHROMIUM: 9788 case GL_COMMANDS_ISSUED_CHROMIUM:
9670 case GL_LATENCY_QUERY_CHROMIUM: 9789 case GL_LATENCY_QUERY_CHROMIUM:
9671 case GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM: 9790 case GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM:
9672 case GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM: 9791 case GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM:
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
9724 } 9843 }
9725 9844
9726 if (!query_manager_->BeginQuery(query)) { 9845 if (!query_manager_->BeginQuery(query)) {
9727 return error::kOutOfBounds; 9846 return error::kOutOfBounds;
9728 } 9847 }
9729 9848
9730 state_.current_queries[target] = query; 9849 state_.current_queries[target] = query;
9731 return error::kNoError; 9850 return error::kNoError;
9732 } 9851 }
9733 9852
9734 error::Error GLES2DecoderImpl::HandleEndQueryEXT( 9853 error::Error GLES2DecoderImpl::HandleEndQueryEXT(uint32 immediate_data_size,
9735 uint32 immediate_data_size, const cmds::EndQueryEXT& c) { 9854 const void* cmd_data) {
9855 const gles2::cmds::EndQueryEXT& c =
9856 *static_cast<const gles2::cmds::EndQueryEXT*>(cmd_data);
9736 GLenum target = static_cast<GLenum>(c.target); 9857 GLenum target = static_cast<GLenum>(c.target);
9737 uint32 submit_count = static_cast<GLuint>(c.submit_count); 9858 uint32 submit_count = static_cast<GLuint>(c.submit_count);
9738 ContextState::QueryMap::iterator it = state_.current_queries.find(target); 9859 ContextState::QueryMap::iterator it = state_.current_queries.find(target);
9739 9860
9740 if (it == state_.current_queries.end()) { 9861 if (it == state_.current_queries.end()) {
9741 LOCAL_SET_GL_ERROR( 9862 LOCAL_SET_GL_ERROR(
9742 GL_INVALID_OPERATION, "glEndQueryEXT", "No active query"); 9863 GL_INVALID_OPERATION, "glEndQueryEXT", "No active query");
9743 return error::kNoError; 9864 return error::kNoError;
9744 } 9865 }
9745 9866
(...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after
10285 texture_ref, target, ii, format, 10406 texture_ref, target, ii, format,
10286 level_width, level_height, 1, 0, format, type, false); 10407 level_width, level_height, 1, 0, format, type, false);
10287 level_width = std::max(1, level_width >> 1); 10408 level_width = std::max(1, level_width >> 1);
10288 level_height = std::max(1, level_height >> 1); 10409 level_height = std::max(1, level_height >> 1);
10289 } 10410 }
10290 texture->SetImmutable(true); 10411 texture->SetImmutable(true);
10291 } 10412 }
10292 } 10413 }
10293 10414
10294 error::Error GLES2DecoderImpl::HandleGenMailboxCHROMIUM( 10415 error::Error GLES2DecoderImpl::HandleGenMailboxCHROMIUM(
10295 uint32 immediate_data_size, const cmds::GenMailboxCHROMIUM& c) { 10416 uint32 immediate_data_size,
10417 const void* cmd_data) {
10296 return error::kUnknownCommand; 10418 return error::kUnknownCommand;
10297 } 10419 }
10298 10420
10299 void GLES2DecoderImpl::DoProduceTextureCHROMIUM(GLenum target, 10421 void GLES2DecoderImpl::DoProduceTextureCHROMIUM(GLenum target,
10300 const GLbyte* data) { 10422 const GLbyte* data) {
10301 TRACE_EVENT2("gpu", "GLES2DecoderImpl::DoProduceTextureCHROMIUM", 10423 TRACE_EVENT2("gpu", "GLES2DecoderImpl::DoProduceTextureCHROMIUM",
10302 "context", logger_.GetLogPrefix(), 10424 "context", logger_.GetLogPrefix(),
10303 "mailbox[0]", static_cast<unsigned char>(data[0])); 10425 "mailbox[0]", static_cast<unsigned char>(data[0]));
10304 10426
10305 TextureRef* texture_ref = texture_manager()->GetTextureInfoForTarget( 10427 TextureRef* texture_ref = texture_manager()->GetTextureInfoForTarget(
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
10405 unit.bound_texture_rectangle_arb = texture_ref; 10527 unit.bound_texture_rectangle_arb = texture_ref;
10406 break; 10528 break;
10407 default: 10529 default:
10408 NOTREACHED(); // Validation should prevent us getting here. 10530 NOTREACHED(); // Validation should prevent us getting here.
10409 break; 10531 break;
10410 } 10532 }
10411 } 10533 }
10412 10534
10413 error::Error GLES2DecoderImpl::HandleCreateAndConsumeTextureCHROMIUMImmediate( 10535 error::Error GLES2DecoderImpl::HandleCreateAndConsumeTextureCHROMIUMImmediate(
10414 uint32_t immediate_data_size, 10536 uint32_t immediate_data_size,
10415 const gles2::cmds::CreateAndConsumeTextureCHROMIUMImmediate& c) { 10537 const void* cmd_data) {
10538 const gles2::cmds::CreateAndConsumeTextureCHROMIUMImmediate& c =
10539 *static_cast<
10540 const gles2::cmds::CreateAndConsumeTextureCHROMIUMImmediate*>(
10541 cmd_data);
10416 GLenum target = static_cast<GLenum>(c.target); 10542 GLenum target = static_cast<GLenum>(c.target);
10417 uint32_t data_size; 10543 uint32_t data_size;
10418 if (!ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) { 10544 if (!ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) {
10419 return error::kOutOfBounds; 10545 return error::kOutOfBounds;
10420 } 10546 }
10421 if (data_size > immediate_data_size) { 10547 if (data_size > immediate_data_size) {
10422 return error::kOutOfBounds; 10548 return error::kOutOfBounds;
10423 } 10549 }
10424 const GLbyte* mailbox = 10550 const GLbyte* mailbox =
10425 GetImmediateDataAs<const GLbyte*>(c, data_size, immediate_data_size); 10551 GetImmediateDataAs<const GLbyte*>(c, data_size, immediate_data_size);
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
10578 "GLES2DecoderImpl::DoReleaseTexImage2DCHROMIUM", GetErrorState()); 10704 "GLES2DecoderImpl::DoReleaseTexImage2DCHROMIUM", GetErrorState());
10579 gl_image->ReleaseTexImage(target); 10705 gl_image->ReleaseTexImage(target);
10580 } 10706 }
10581 10707
10582 texture_manager()->SetLevelInfo( 10708 texture_manager()->SetLevelInfo(
10583 texture_ref, target, 0, GL_RGBA, 0, 0, 1, 0, 10709 texture_ref, target, 0, GL_RGBA, 0, 0, 1, 0,
10584 GL_RGBA, GL_UNSIGNED_BYTE, false); 10710 GL_RGBA, GL_UNSIGNED_BYTE, false);
10585 } 10711 }
10586 10712
10587 error::Error GLES2DecoderImpl::HandleTraceBeginCHROMIUM( 10713 error::Error GLES2DecoderImpl::HandleTraceBeginCHROMIUM(
10588 uint32 immediate_data_size, const cmds::TraceBeginCHROMIUM& c) { 10714 uint32 immediate_data_size,
10715 const void* cmd_data) {
10716 const gles2::cmds::TraceBeginCHROMIUM& c =
10717 *static_cast<const gles2::cmds::TraceBeginCHROMIUM*>(cmd_data);
10589 Bucket* bucket = GetBucket(c.bucket_id); 10718 Bucket* bucket = GetBucket(c.bucket_id);
10590 if (!bucket || bucket->size() == 0) { 10719 if (!bucket || bucket->size() == 0) {
10591 return error::kInvalidArguments; 10720 return error::kInvalidArguments;
10592 } 10721 }
10593 std::string command_name; 10722 std::string command_name;
10594 if (!bucket->GetAsString(&command_name)) { 10723 if (!bucket->GetAsString(&command_name)) {
10595 return error::kInvalidArguments; 10724 return error::kInvalidArguments;
10596 } 10725 }
10597 TRACE_EVENT_COPY_ASYNC_BEGIN0("gpu", command_name.c_str(), this); 10726 TRACE_EVENT_COPY_ASYNC_BEGIN0("gpu", command_name.c_str(), this);
10598 if (!gpu_tracer_->Begin(command_name, kTraceCHROMIUM)) { 10727 if (!gpu_tracer_->Begin(command_name, kTraceCHROMIUM)) {
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
10756 new AsyncUploadTokenCompletionObserver(async_upload_token)); 10885 new AsyncUploadTokenCompletionObserver(async_upload_token));
10757 10886
10758 return base::Bind( 10887 return base::Bind(
10759 &AsyncPixelTransferManager::AsyncNotifyCompletion, 10888 &AsyncPixelTransferManager::AsyncNotifyCompletion,
10760 base::Unretained(GetAsyncPixelTransferManager()), 10889 base::Unretained(GetAsyncPixelTransferManager()),
10761 mem_params, 10890 mem_params,
10762 observer); 10891 observer);
10763 } 10892 }
10764 10893
10765 error::Error GLES2DecoderImpl::HandleAsyncTexImage2DCHROMIUM( 10894 error::Error GLES2DecoderImpl::HandleAsyncTexImage2DCHROMIUM(
10766 uint32 immediate_data_size, const cmds::AsyncTexImage2DCHROMIUM& c) { 10895 uint32 immediate_data_size,
10896 const void* cmd_data) {
10897 const gles2::cmds::AsyncTexImage2DCHROMIUM& c =
10898 *static_cast<const gles2::cmds::AsyncTexImage2DCHROMIUM*>(cmd_data);
10767 TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleAsyncTexImage2DCHROMIUM"); 10899 TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleAsyncTexImage2DCHROMIUM");
10768 GLenum target = static_cast<GLenum>(c.target); 10900 GLenum target = static_cast<GLenum>(c.target);
10769 GLint level = static_cast<GLint>(c.level); 10901 GLint level = static_cast<GLint>(c.level);
10770 GLenum internal_format = static_cast<GLenum>(c.internalformat); 10902 GLenum internal_format = static_cast<GLenum>(c.internalformat);
10771 GLsizei width = static_cast<GLsizei>(c.width); 10903 GLsizei width = static_cast<GLsizei>(c.width);
10772 GLsizei height = static_cast<GLsizei>(c.height); 10904 GLsizei height = static_cast<GLsizei>(c.height);
10773 GLint border = static_cast<GLint>(c.border); 10905 GLint border = static_cast<GLint>(c.border);
10774 GLenum format = static_cast<GLenum>(c.format); 10906 GLenum format = static_cast<GLenum>(c.format);
10775 GLenum type = static_cast<GLenum>(c.type); 10907 GLenum type = static_cast<GLenum>(c.type);
10776 uint32 pixels_shm_id = static_cast<uint32>(c.pixels_shm_id); 10908 uint32 pixels_shm_id = static_cast<uint32>(c.pixels_shm_id);
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
10860 // The callback is only invoked if the transfer delegate still 10992 // The callback is only invoked if the transfer delegate still
10861 // exists, which implies through manager->texture_ref->state 10993 // exists, which implies through manager->texture_ref->state
10862 // ownership that both of these pointers are valid. 10994 // ownership that both of these pointers are valid.
10863 base::Unretained(texture_manager()), 10995 base::Unretained(texture_manager()),
10864 base::Unretained(texture_ref), 10996 base::Unretained(texture_ref),
10865 tex_params)); 10997 tex_params));
10866 return error::kNoError; 10998 return error::kNoError;
10867 } 10999 }
10868 11000
10869 error::Error GLES2DecoderImpl::HandleAsyncTexSubImage2DCHROMIUM( 11001 error::Error GLES2DecoderImpl::HandleAsyncTexSubImage2DCHROMIUM(
10870 uint32 immediate_data_size, const cmds::AsyncTexSubImage2DCHROMIUM& c) { 11002 uint32 immediate_data_size,
11003 const void* cmd_data) {
11004 const gles2::cmds::AsyncTexSubImage2DCHROMIUM& c =
11005 *static_cast<const gles2::cmds::AsyncTexSubImage2DCHROMIUM*>(cmd_data);
10871 TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleAsyncTexSubImage2DCHROMIUM"); 11006 TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleAsyncTexSubImage2DCHROMIUM");
10872 GLenum target = static_cast<GLenum>(c.target); 11007 GLenum target = static_cast<GLenum>(c.target);
10873 GLint level = static_cast<GLint>(c.level); 11008 GLint level = static_cast<GLint>(c.level);
10874 GLint xoffset = static_cast<GLint>(c.xoffset); 11009 GLint xoffset = static_cast<GLint>(c.xoffset);
10875 GLint yoffset = static_cast<GLint>(c.yoffset); 11010 GLint yoffset = static_cast<GLint>(c.yoffset);
10876 GLsizei width = static_cast<GLsizei>(c.width); 11011 GLsizei width = static_cast<GLsizei>(c.width);
10877 GLsizei height = static_cast<GLsizei>(c.height); 11012 GLsizei height = static_cast<GLsizei>(c.height);
10878 GLenum format = static_cast<GLenum>(c.format); 11013 GLenum format = static_cast<GLenum>(c.format);
10879 GLenum type = static_cast<GLenum>(c.type); 11014 GLenum type = static_cast<GLenum>(c.type);
10880 uint32 async_upload_token = static_cast<uint32>(c.async_upload_token); 11015 uint32 async_upload_token = static_cast<uint32>(c.async_upload_token);
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
10957 delegate = async_pixel_transfer_manager_->CreatePixelTransferDelegate( 11092 delegate = async_pixel_transfer_manager_->CreatePixelTransferDelegate(
10958 texture_ref, define_params); 11093 texture_ref, define_params);
10959 texture->SetImmutable(true); 11094 texture->SetImmutable(true);
10960 } 11095 }
10961 11096
10962 delegate->AsyncTexSubImage2D(tex_params, mem_params); 11097 delegate->AsyncTexSubImage2D(tex_params, mem_params);
10963 return error::kNoError; 11098 return error::kNoError;
10964 } 11099 }
10965 11100
10966 error::Error GLES2DecoderImpl::HandleWaitAsyncTexImage2DCHROMIUM( 11101 error::Error GLES2DecoderImpl::HandleWaitAsyncTexImage2DCHROMIUM(
10967 uint32 immediate_data_size, const cmds::WaitAsyncTexImage2DCHROMIUM& c) { 11102 uint32 immediate_data_size,
11103 const void* cmd_data) {
11104 const gles2::cmds::WaitAsyncTexImage2DCHROMIUM& c =
11105 *static_cast<const gles2::cmds::WaitAsyncTexImage2DCHROMIUM*>(cmd_data);
10968 TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleWaitAsyncTexImage2DCHROMIUM"); 11106 TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleWaitAsyncTexImage2DCHROMIUM");
10969 GLenum target = static_cast<GLenum>(c.target); 11107 GLenum target = static_cast<GLenum>(c.target);
10970 11108
10971 if (GL_TEXTURE_2D != target) { 11109 if (GL_TEXTURE_2D != target) {
10972 LOCAL_SET_GL_ERROR( 11110 LOCAL_SET_GL_ERROR(
10973 GL_INVALID_ENUM, "glWaitAsyncTexImage2DCHROMIUM", "target"); 11111 GL_INVALID_ENUM, "glWaitAsyncTexImage2DCHROMIUM", "target");
10974 return error::kNoError; 11112 return error::kNoError;
10975 } 11113 }
10976 TextureRef* texture_ref = texture_manager()->GetTextureInfoForTarget( 11114 TextureRef* texture_ref = texture_manager()->GetTextureInfoForTarget(
10977 &state_, target); 11115 &state_, target);
(...skipping 10 matching lines...) Expand all
10988 GL_INVALID_OPERATION, 11126 GL_INVALID_OPERATION,
10989 "glWaitAsyncTexImage2DCHROMIUM", "No async transfer started"); 11127 "glWaitAsyncTexImage2DCHROMIUM", "No async transfer started");
10990 return error::kNoError; 11128 return error::kNoError;
10991 } 11129 }
10992 delegate->WaitForTransferCompletion(); 11130 delegate->WaitForTransferCompletion();
10993 ProcessFinishedAsyncTransfers(); 11131 ProcessFinishedAsyncTransfers();
10994 return error::kNoError; 11132 return error::kNoError;
10995 } 11133 }
10996 11134
10997 error::Error GLES2DecoderImpl::HandleWaitAllAsyncTexImage2DCHROMIUM( 11135 error::Error GLES2DecoderImpl::HandleWaitAllAsyncTexImage2DCHROMIUM(
10998 uint32 immediate_data_size, const cmds::WaitAllAsyncTexImage2DCHROMIUM& c) { 11136 uint32 immediate_data_size,
11137 const void* data) {
10999 TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleWaitAsyncTexImage2DCHROMIUM"); 11138 TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleWaitAsyncTexImage2DCHROMIUM");
11000 11139
11001 GetAsyncPixelTransferManager()->WaitAllAsyncTexImage2D(); 11140 GetAsyncPixelTransferManager()->WaitAllAsyncTexImage2D();
11002 ProcessFinishedAsyncTransfers(); 11141 ProcessFinishedAsyncTransfers();
11003 return error::kNoError; 11142 return error::kNoError;
11004 } 11143 }
11005 11144
11006 void GLES2DecoderImpl::OnTextureRefDetachedFromFramebuffer( 11145 void GLES2DecoderImpl::OnTextureRefDetachedFromFramebuffer(
11007 TextureRef* texture_ref) { 11146 TextureRef* texture_ref) {
11008 Texture* texture = texture_ref->texture(); 11147 Texture* texture = texture_ref->texture();
11009 DoDidUseTexImageIfNeeded(texture, texture->target()); 11148 DoDidUseTexImageIfNeeded(texture, texture->target());
11010 } 11149 }
11011 11150
11012 void GLES2DecoderImpl::OnOutOfMemoryError() { 11151 void GLES2DecoderImpl::OnOutOfMemoryError() {
11013 if (lose_context_when_out_of_memory_) { 11152 if (lose_context_when_out_of_memory_) {
11014 group_->LoseContexts(GL_UNKNOWN_CONTEXT_RESET_ARB); 11153 group_->LoseContexts(GL_UNKNOWN_CONTEXT_RESET_ARB);
11015 LoseContext(GL_GUILTY_CONTEXT_RESET_ARB); 11154 LoseContext(GL_GUILTY_CONTEXT_RESET_ARB);
11016 } 11155 }
11017 } 11156 }
11018 11157
11019 // Include the auto-generated part of this file. We split this because it means 11158 // Include the auto-generated part of this file. We split this because it means
11020 // we can easily edit the non-auto generated parts right here in this file 11159 // we can easily edit the non-auto generated parts right here in this file
11021 // instead of having to edit some template or the code generator. 11160 // instead of having to edit some template or the code generator.
11022 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 11161 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
11023 11162
11024 } // namespace gles2 11163 } // namespace gles2
11025 } // namespace gpu 11164 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/build_gles2_cmd_buffer.py ('k') | gpu/command_buffer/service/gles2_cmd_decoder_autogen.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698