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 |