| 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/client/program_info_manager.h" | 5 #include "gpu/command_buffer/client/program_info_manager.h" |
| 6 | 6 |
| 7 namespace { | 7 namespace { |
| 8 | 8 |
| 9 template<typename T> static T LocalGetAs( | 9 template<typename T> static T LocalGetAs( |
| 10 const std::vector<int8>& data, uint32 offset, size_t size) { | 10 const std::vector<int8>& data, uint32 offset, size_t size) { |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 | 77 |
| 78 ProgramInfoManager::Program::Program() | 78 ProgramInfoManager::Program::Program() |
| 79 : cached_es2_(false), | 79 : cached_es2_(false), |
| 80 max_attrib_name_length_(0), | 80 max_attrib_name_length_(0), |
| 81 max_uniform_name_length_(0), | 81 max_uniform_name_length_(0), |
| 82 link_status_(false), | 82 link_status_(false), |
| 83 cached_es3_uniform_blocks_(false), | 83 cached_es3_uniform_blocks_(false), |
| 84 active_uniform_block_max_name_length_(0), | 84 active_uniform_block_max_name_length_(0), |
| 85 cached_es3_transform_feedback_varyings_(false), | 85 cached_es3_transform_feedback_varyings_(false), |
| 86 transform_feedback_varying_max_length_(0), | 86 transform_feedback_varying_max_length_(0), |
| 87 transform_feedback_buffer_mode_(0), |
| 87 cached_es3_uniformsiv_(false) { | 88 cached_es3_uniformsiv_(false) { |
| 88 } | 89 } |
| 89 | 90 |
| 90 ProgramInfoManager::Program::~Program() { | 91 ProgramInfoManager::Program::~Program() { |
| 91 } | 92 } |
| 92 | 93 |
| 93 // TODO(gman): Add a faster lookup. | 94 // TODO(gman): Add a faster lookup. |
| 94 GLint ProgramInfoManager::Program::GetAttribLocation( | 95 GLint ProgramInfoManager::Program::GetAttribLocation( |
| 95 const std::string& name) const { | 96 const std::string& name) const { |
| 96 for (GLuint ii = 0; ii < attrib_infos_.size(); ++ii) { | 97 for (GLuint ii = 0; ii < attrib_infos_.size(); ++ii) { |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 201 return true; | 202 return true; |
| 202 case GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH: | 203 case GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH: |
| 203 *params = static_cast<GLint>(active_uniform_block_max_name_length_); | 204 *params = static_cast<GLint>(active_uniform_block_max_name_length_); |
| 204 return true; | 205 return true; |
| 205 case GL_TRANSFORM_FEEDBACK_VARYINGS: | 206 case GL_TRANSFORM_FEEDBACK_VARYINGS: |
| 206 *params = static_cast<GLint>(transform_feedback_varyings_.size()); | 207 *params = static_cast<GLint>(transform_feedback_varyings_.size()); |
| 207 return true; | 208 return true; |
| 208 case GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH: | 209 case GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH: |
| 209 *params = static_cast<GLint>(transform_feedback_varying_max_length_); | 210 *params = static_cast<GLint>(transform_feedback_varying_max_length_); |
| 210 return true; | 211 return true; |
| 212 case GL_TRANSFORM_FEEDBACK_BUFFER_MODE: |
| 213 *params = static_cast<GLint>(transform_feedback_buffer_mode_); |
| 214 return true; |
| 211 default: | 215 default: |
| 212 NOTREACHED(); | 216 NOTREACHED(); |
| 213 break; | 217 break; |
| 214 } | 218 } |
| 215 return false; | 219 return false; |
| 216 } | 220 } |
| 217 | 221 |
| 218 GLuint ProgramInfoManager::Program::GetUniformBlockIndex( | 222 GLuint ProgramInfoManager::Program::GetUniformBlockIndex( |
| 219 const std::string& name) const { | 223 const std::string& name) const { |
| 220 for (size_t ii = 0; ii < uniform_blocks_.size(); ++ii) { | 224 for (size_t ii = 0; ii < uniform_blocks_.size(); ++ii) { |
| (...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 487 | 491 |
| 488 void ProgramInfoManager::Program::UpdateES3TransformFeedbackVaryings( | 492 void ProgramInfoManager::Program::UpdateES3TransformFeedbackVaryings( |
| 489 const std::vector<int8>& result) { | 493 const std::vector<int8>& result) { |
| 490 if (cached_es3_transform_feedback_varyings_) { | 494 if (cached_es3_transform_feedback_varyings_) { |
| 491 return; | 495 return; |
| 492 } | 496 } |
| 493 if (result.empty()) { | 497 if (result.empty()) { |
| 494 // This should only happen on a lost context. | 498 // This should only happen on a lost context. |
| 495 return; | 499 return; |
| 496 } | 500 } |
| 501 DCHECK_EQ(0u, transform_feedback_buffer_mode_); |
| 497 DCHECK_EQ(0u, transform_feedback_varyings_.size()); | 502 DCHECK_EQ(0u, transform_feedback_varyings_.size()); |
| 498 DCHECK_EQ(0u, transform_feedback_varying_max_length_); | 503 DCHECK_EQ(0u, transform_feedback_varying_max_length_); |
| 499 | 504 |
| 500 // |result| comes from GPU process. We consider it trusted data. Therefore, | 505 // |result| comes from GPU process. We consider it trusted data. Therefore, |
| 501 // no need to check for overflows as the GPU side did the checks already. | 506 // no need to check for overflows as the GPU side did the checks already. |
| 502 uint32_t header_size = sizeof(TransformFeedbackVaryingsHeader); | 507 uint32_t header_size = sizeof(TransformFeedbackVaryingsHeader); |
| 503 DCHECK_GE(result.size(), header_size); | 508 DCHECK_GE(result.size(), header_size); |
| 504 const TransformFeedbackVaryingsHeader* header = | 509 const TransformFeedbackVaryingsHeader* header = |
| 505 LocalGetAs<const TransformFeedbackVaryingsHeader*>( | 510 LocalGetAs<const TransformFeedbackVaryingsHeader*>( |
| 506 result, 0, header_size); | 511 result, 0, header_size); |
| 507 DCHECK(header); | 512 DCHECK(header); |
| 513 transform_feedback_buffer_mode_ = header->transform_feedback_buffer_mode; |
| 508 if (header->num_transform_feedback_varyings == 0) { | 514 if (header->num_transform_feedback_varyings == 0) { |
| 509 DCHECK_EQ(result.size(), header_size); | 515 DCHECK_EQ(result.size(), header_size); |
| 510 // TODO(zmo): Here we can't tell if no TransformFeedback varyings are | 516 // TODO(zmo): Here we can't tell if no TransformFeedback varyings are |
| 511 // defined, or the previous link failed. | 517 // defined, or the previous link failed. |
| 512 return; | 518 return; |
| 513 } | 519 } |
| 514 transform_feedback_varyings_.resize(header->num_transform_feedback_varyings); | 520 transform_feedback_varyings_.resize(header->num_transform_feedback_varyings); |
| 515 | 521 |
| 516 uint32_t entry_size = sizeof(TransformFeedbackVaryingInfo) * | 522 uint32_t entry_size = sizeof(TransformFeedbackVaryingInfo) * |
| 517 header->num_transform_feedback_varyings; | 523 header->num_transform_feedback_varyings; |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 650 case GL_ACTIVE_ATTRIBUTE_MAX_LENGTH: | 656 case GL_ACTIVE_ATTRIBUTE_MAX_LENGTH: |
| 651 case GL_ACTIVE_UNIFORMS: | 657 case GL_ACTIVE_UNIFORMS: |
| 652 case GL_ACTIVE_UNIFORM_MAX_LENGTH: | 658 case GL_ACTIVE_UNIFORM_MAX_LENGTH: |
| 653 case GL_LINK_STATUS: | 659 case GL_LINK_STATUS: |
| 654 type = kES2; | 660 type = kES2; |
| 655 break; | 661 break; |
| 656 case GL_ACTIVE_UNIFORM_BLOCKS: | 662 case GL_ACTIVE_UNIFORM_BLOCKS: |
| 657 case GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH: | 663 case GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH: |
| 658 type = kES3UniformBlocks; | 664 type = kES3UniformBlocks; |
| 659 break; | 665 break; |
| 666 case GL_TRANSFORM_FEEDBACK_BUFFER_MODE: |
| 660 case GL_TRANSFORM_FEEDBACK_VARYINGS: | 667 case GL_TRANSFORM_FEEDBACK_VARYINGS: |
| 661 case GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH: | 668 case GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH: |
| 662 type = kES3TransformFeedbackVaryings; | 669 type = kES3TransformFeedbackVaryings; |
| 663 break; | 670 break; |
| 664 default: | 671 default: |
| 665 return false; | 672 return false; |
| 666 } | 673 } |
| 667 Program* info = GetProgramInfo(gl, program, type); | 674 Program* info = GetProgramInfo(gl, program, type); |
| 668 if (!info) { | 675 if (!info) { |
| 669 return false; | 676 return false; |
| (...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 992 } | 999 } |
| 993 return true; | 1000 return true; |
| 994 } | 1001 } |
| 995 } | 1002 } |
| 996 return gl->GetUniformIndicesHelper(program, count, names, indices); | 1003 return gl->GetUniformIndicesHelper(program, count, names, indices); |
| 997 } | 1004 } |
| 998 | 1005 |
| 999 } // namespace gles2 | 1006 } // namespace gles2 |
| 1000 } // namespace gpu | 1007 } // namespace gpu |
| 1001 | 1008 |
| OLD | NEW |