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

Side by Side Diff: gpu/command_buffer/client/program_info_manager.cc

Issue 1341133002: Add GL_TRANSFORM_FEEDBACK_BUFFER_MODE to GetProgramiv query. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@uniform
Patch Set: rebase Created 5 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/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
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
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
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
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
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
OLDNEW
« no previous file with comments | « gpu/command_buffer/client/program_info_manager.h ('k') | gpu/command_buffer/client/program_info_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698