OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" | 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
6 | 6 |
7 #include <stdio.h> | 7 #include <stdio.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <list> | 10 #include <list> |
(...skipping 4687 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4698 } | 4698 } |
4699 Program* program = GetProgramInfoNotShader( | 4699 Program* program = GetProgramInfoNotShader( |
4700 program_id, "glBindAttribLocation"); | 4700 program_id, "glBindAttribLocation"); |
4701 if (!program) { | 4701 if (!program) { |
4702 return; | 4702 return; |
4703 } | 4703 } |
4704 program->SetAttribLocationBinding(name, static_cast<GLint>(index)); | 4704 program->SetAttribLocationBinding(name, static_cast<GLint>(index)); |
4705 glBindAttribLocation(program->service_id(), index, name); | 4705 glBindAttribLocation(program->service_id(), index, name); |
4706 } | 4706 } |
4707 | 4707 |
4708 error::Error GLES2DecoderImpl::HandleBindAttribLocation( | |
4709 uint32 immediate_data_size, const cmds::BindAttribLocation& c) { | |
4710 GLuint program = static_cast<GLuint>(c.program); | |
4711 GLuint index = static_cast<GLuint>(c.index); | |
4712 uint32 name_size = c.data_size; | |
4713 const char* name = GetSharedMemoryAs<const char*>( | |
4714 c.name_shm_id, c.name_shm_offset, name_size); | |
4715 if (name == NULL) { | |
4716 return error::kOutOfBounds; | |
4717 } | |
4718 std::string name_str(name, name_size); | |
4719 DoBindAttribLocation(program, index, name_str.c_str()); | |
4720 return error::kNoError; | |
4721 } | |
4722 | |
4723 error::Error GLES2DecoderImpl::HandleBindAttribLocationBucket( | 4708 error::Error GLES2DecoderImpl::HandleBindAttribLocationBucket( |
4724 uint32 immediate_data_size, const cmds::BindAttribLocationBucket& c) { | 4709 uint32 immediate_data_size, const cmds::BindAttribLocationBucket& c) { |
4725 GLuint program = static_cast<GLuint>(c.program); | 4710 GLuint program = static_cast<GLuint>(c.program); |
4726 GLuint index = static_cast<GLuint>(c.index); | 4711 GLuint index = static_cast<GLuint>(c.index); |
4727 Bucket* bucket = GetBucket(c.name_bucket_id); | 4712 Bucket* bucket = GetBucket(c.name_bucket_id); |
4728 if (!bucket || bucket->size() == 0) { | 4713 if (!bucket || bucket->size() == 0) { |
4729 return error::kInvalidArguments; | 4714 return error::kInvalidArguments; |
4730 } | 4715 } |
4731 std::string name_str; | 4716 std::string name_str; |
4732 if (!bucket->GetAsString(&name_str)) { | 4717 if (!bucket->GetAsString(&name_str)) { |
(...skipping 30 matching lines...) Expand all Loading... |
4763 if (!program) { | 4748 if (!program) { |
4764 return; | 4749 return; |
4765 } | 4750 } |
4766 if (!program->SetUniformLocationBinding(name, location)) { | 4751 if (!program->SetUniformLocationBinding(name, location)) { |
4767 LOCAL_SET_GL_ERROR( | 4752 LOCAL_SET_GL_ERROR( |
4768 GL_INVALID_VALUE, | 4753 GL_INVALID_VALUE, |
4769 "glBindUniformLocationCHROMIUM", "location out of range"); | 4754 "glBindUniformLocationCHROMIUM", "location out of range"); |
4770 } | 4755 } |
4771 } | 4756 } |
4772 | 4757 |
4773 error::Error GLES2DecoderImpl::HandleBindUniformLocationCHROMIUM( | |
4774 uint32 immediate_data_size, const cmds::BindUniformLocationCHROMIUM& c) { | |
4775 GLuint program = static_cast<GLuint>(c.program); | |
4776 GLint location = static_cast<GLint>(c.location); | |
4777 uint32 name_size = c.data_size; | |
4778 const char* name = GetSharedMemoryAs<const char*>( | |
4779 c.name_shm_id, c.name_shm_offset, name_size); | |
4780 if (name == NULL) { | |
4781 return error::kOutOfBounds; | |
4782 } | |
4783 std::string name_str(name, name_size); | |
4784 DoBindUniformLocationCHROMIUM(program, location, name_str.c_str()); | |
4785 return error::kNoError; | |
4786 } | |
4787 | |
4788 error::Error GLES2DecoderImpl::HandleBindUniformLocationCHROMIUMBucket( | 4758 error::Error GLES2DecoderImpl::HandleBindUniformLocationCHROMIUMBucket( |
4789 uint32 immediate_data_size, | 4759 uint32 immediate_data_size, |
4790 const cmds::BindUniformLocationCHROMIUMBucket& c) { | 4760 const cmds::BindUniformLocationCHROMIUMBucket& c) { |
4791 GLuint program = static_cast<GLuint>(c.program); | 4761 GLuint program = static_cast<GLuint>(c.program); |
4792 GLint location = static_cast<GLint>(c.location); | 4762 GLint location = static_cast<GLint>(c.location); |
4793 Bucket* bucket = GetBucket(c.name_bucket_id); | 4763 Bucket* bucket = GetBucket(c.name_bucket_id); |
4794 if (!bucket || bucket->size() == 0) { | 4764 if (!bucket || bucket->size() == 0) { |
4795 return error::kInvalidArguments; | 4765 return error::kInvalidArguments; |
4796 } | 4766 } |
4797 std::string name_str; | 4767 std::string name_str; |
(...skipping 1858 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6656 Shader* shader = GetShaderInfoNotProgram(client_id, "glShaderSource"); | 6626 Shader* shader = GetShaderInfoNotProgram(client_id, "glShaderSource"); |
6657 if (!shader) { | 6627 if (!shader) { |
6658 return error::kNoError; | 6628 return error::kNoError; |
6659 } | 6629 } |
6660 // Note: We don't actually call glShaderSource here. We wait until | 6630 // Note: We don't actually call glShaderSource here. We wait until |
6661 // the call to glCompileShader. | 6631 // the call to glCompileShader. |
6662 shader->UpdateSource(str.c_str()); | 6632 shader->UpdateSource(str.c_str()); |
6663 return error::kNoError; | 6633 return error::kNoError; |
6664 } | 6634 } |
6665 | 6635 |
6666 error::Error GLES2DecoderImpl::HandleShaderSource( | |
6667 uint32 immediate_data_size, const cmds::ShaderSource& c) { | |
6668 uint32 data_size = c.data_size; | |
6669 const char* data = GetSharedMemoryAs<const char*>( | |
6670 c.data_shm_id, c.data_shm_offset, data_size); | |
6671 if (!data) { | |
6672 return error::kOutOfBounds; | |
6673 } | |
6674 return ShaderSourceHelper(c.shader, data, data_size); | |
6675 } | |
6676 | |
6677 error::Error GLES2DecoderImpl::HandleShaderSourceBucket( | 6636 error::Error GLES2DecoderImpl::HandleShaderSourceBucket( |
6678 uint32 immediate_data_size, const cmds::ShaderSourceBucket& c) { | 6637 uint32 immediate_data_size, const cmds::ShaderSourceBucket& c) { |
6679 Bucket* bucket = GetBucket(c.data_bucket_id); | 6638 Bucket* bucket = GetBucket(c.data_bucket_id); |
6680 if (!bucket || bucket->size() == 0) { | 6639 if (!bucket || bucket->size() == 0) { |
6681 return error::kInvalidArguments; | 6640 return error::kInvalidArguments; |
6682 } | 6641 } |
6683 return ShaderSourceHelper( | 6642 return ShaderSourceHelper( |
6684 c.shader, bucket->GetDataAs<const char*>(0, bucket->size() - 1), | 6643 c.shader, bucket->GetDataAs<const char*>(0, bucket->size() - 1), |
6685 bucket->size() - 1); | 6644 bucket->size() - 1); |
6686 } | 6645 } |
(...skipping 905 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7592 // longer executing commands. | 7551 // longer executing commands. |
7593 if (*location != -1) { | 7552 if (*location != -1) { |
7594 return error::kGenericError; | 7553 return error::kGenericError; |
7595 } | 7554 } |
7596 *location = program->GetAttribLocation(name_str); | 7555 *location = program->GetAttribLocation(name_str); |
7597 return error::kNoError; | 7556 return error::kNoError; |
7598 } | 7557 } |
7599 | 7558 |
7600 error::Error GLES2DecoderImpl::HandleGetAttribLocation( | 7559 error::Error GLES2DecoderImpl::HandleGetAttribLocation( |
7601 uint32 immediate_data_size, const cmds::GetAttribLocation& c) { | 7560 uint32 immediate_data_size, const cmds::GetAttribLocation& c) { |
7602 uint32 name_size = c.data_size; | |
7603 const char* name = GetSharedMemoryAs<const char*>( | |
7604 c.name_shm_id, c.name_shm_offset, name_size); | |
7605 if (!name) { | |
7606 return error::kOutOfBounds; | |
7607 } | |
7608 std::string name_str(name, name_size); | |
7609 return GetAttribLocationHelper( | |
7610 c.program, c.location_shm_id, c.location_shm_offset, name_str); | |
7611 } | |
7612 | |
7613 error::Error GLES2DecoderImpl::HandleGetAttribLocationBucket( | |
7614 uint32 immediate_data_size, const cmds::GetAttribLocationBucket& c) { | |
7615 Bucket* bucket = GetBucket(c.name_bucket_id); | 7561 Bucket* bucket = GetBucket(c.name_bucket_id); |
7616 if (!bucket) { | 7562 if (!bucket) { |
7617 return error::kInvalidArguments; | 7563 return error::kInvalidArguments; |
7618 } | 7564 } |
7619 std::string name_str; | 7565 std::string name_str; |
7620 if (!bucket->GetAsString(&name_str)) { | 7566 if (!bucket->GetAsString(&name_str)) { |
7621 return error::kInvalidArguments; | 7567 return error::kInvalidArguments; |
7622 } | 7568 } |
7623 return GetAttribLocationHelper( | 7569 return GetAttribLocationHelper( |
7624 c.program, c.location_shm_id, c.location_shm_offset, name_str); | 7570 c.program, c.location_shm_id, c.location_shm_offset, name_str); |
(...skipping 26 matching lines...) Expand all Loading... |
7651 // longer executing commands. | 7597 // longer executing commands. |
7652 if (*location != -1) { | 7598 if (*location != -1) { |
7653 return error::kGenericError; | 7599 return error::kGenericError; |
7654 } | 7600 } |
7655 *location = program->GetUniformFakeLocation(name_str); | 7601 *location = program->GetUniformFakeLocation(name_str); |
7656 return error::kNoError; | 7602 return error::kNoError; |
7657 } | 7603 } |
7658 | 7604 |
7659 error::Error GLES2DecoderImpl::HandleGetUniformLocation( | 7605 error::Error GLES2DecoderImpl::HandleGetUniformLocation( |
7660 uint32 immediate_data_size, const cmds::GetUniformLocation& c) { | 7606 uint32 immediate_data_size, const cmds::GetUniformLocation& c) { |
7661 uint32 name_size = c.data_size; | |
7662 const char* name = GetSharedMemoryAs<const char*>( | |
7663 c.name_shm_id, c.name_shm_offset, name_size); | |
7664 if (!name) { | |
7665 return error::kOutOfBounds; | |
7666 } | |
7667 std::string name_str(name, name_size); | |
7668 return GetUniformLocationHelper( | |
7669 c.program, c.location_shm_id, c.location_shm_offset, name_str); | |
7670 } | |
7671 | |
7672 error::Error GLES2DecoderImpl::HandleGetUniformLocationBucket( | |
7673 uint32 immediate_data_size, const cmds::GetUniformLocationBucket& c) { | |
7674 Bucket* bucket = GetBucket(c.name_bucket_id); | 7607 Bucket* bucket = GetBucket(c.name_bucket_id); |
7675 if (!bucket) { | 7608 if (!bucket) { |
7676 return error::kInvalidArguments; | 7609 return error::kInvalidArguments; |
7677 } | 7610 } |
7678 std::string name_str; | 7611 std::string name_str; |
7679 if (!bucket->GetAsString(&name_str)) { | 7612 if (!bucket->GetAsString(&name_str)) { |
7680 return error::kInvalidArguments; | 7613 return error::kInvalidArguments; |
7681 } | 7614 } |
7682 return GetUniformLocationHelper( | 7615 return GetUniformLocationHelper( |
7683 c.program, c.location_shm_id, c.location_shm_offset, name_str); | 7616 c.program, c.location_shm_id, c.location_shm_offset, name_str); |
(...skipping 3078 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10762 } | 10695 } |
10763 } | 10696 } |
10764 | 10697 |
10765 // Include the auto-generated part of this file. We split this because it means | 10698 // Include the auto-generated part of this file. We split this because it means |
10766 // we can easily edit the non-auto generated parts right here in this file | 10699 // we can easily edit the non-auto generated parts right here in this file |
10767 // instead of having to edit some template or the code generator. | 10700 // instead of having to edit some template or the code generator. |
10768 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" | 10701 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" |
10769 | 10702 |
10770 } // namespace gles2 | 10703 } // namespace gles2 |
10771 } // namespace gpu | 10704 } // namespace gpu |
OLD | NEW |