| 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 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 325 // This should only happen on a lost context. | 325 // This should only happen on a lost context. |
| 326 return; | 326 return; |
| 327 } | 327 } |
| 328 DCHECK_GE(result.size(), sizeof(ProgramInfoHeader)); | 328 DCHECK_GE(result.size(), sizeof(ProgramInfoHeader)); |
| 329 const ProgramInfoHeader* header = LocalGetAs<const ProgramInfoHeader*>( | 329 const ProgramInfoHeader* header = LocalGetAs<const ProgramInfoHeader*>( |
| 330 result, 0, sizeof(header)); | 330 result, 0, sizeof(header)); |
| 331 link_status_ = header->link_status != 0; | 331 link_status_ = header->link_status != 0; |
| 332 if (!link_status_) { | 332 if (!link_status_) { |
| 333 return; | 333 return; |
| 334 } | 334 } |
| 335 DCHECK_EQ(0u, attrib_infos_.size()); | 335 attrib_infos_.clear(); |
| 336 DCHECK_EQ(0u, uniform_infos_.size()); | 336 uniform_infos_.clear(); |
| 337 DCHECK_EQ(0, max_attrib_name_length_); | 337 frag_data_locations_.clear(); |
| 338 DCHECK_EQ(0, max_uniform_name_length_); | 338 max_attrib_name_length_ = 0; |
| 339 max_uniform_name_length_ = 0; |
| 339 const ProgramInput* inputs = LocalGetAs<const ProgramInput*>( | 340 const ProgramInput* inputs = LocalGetAs<const ProgramInput*>( |
| 340 result, sizeof(*header), | 341 result, sizeof(*header), |
| 341 sizeof(ProgramInput) * (header->num_attribs + header->num_uniforms)); | 342 sizeof(ProgramInput) * (header->num_attribs + header->num_uniforms)); |
| 342 const ProgramInput* input = inputs; | 343 const ProgramInput* input = inputs; |
| 343 for (uint32 ii = 0; ii < header->num_attribs; ++ii) { | 344 for (uint32 ii = 0; ii < header->num_attribs; ++ii) { |
| 344 const int32* location = LocalGetAs<const int32*>( | 345 const int32* location = LocalGetAs<const int32*>( |
| 345 result, input->location_offset, sizeof(int32)); | 346 result, input->location_offset, sizeof(int32)); |
| 346 const char* name_buf = LocalGetAs<const char*>( | 347 const char* name_buf = LocalGetAs<const char*>( |
| 347 result, input->name_offset, input->name_length); | 348 result, input->name_offset, input->name_length); |
| 348 std::string name(name_buf, input->name_length); | 349 std::string name(name_buf, input->name_length); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 374 | 375 |
| 375 void ProgramInfoManager::Program::UpdateES3UniformBlocks( | 376 void ProgramInfoManager::Program::UpdateES3UniformBlocks( |
| 376 const std::vector<int8>& result) { | 377 const std::vector<int8>& result) { |
| 377 if (cached_es3_uniform_blocks_) { | 378 if (cached_es3_uniform_blocks_) { |
| 378 return; | 379 return; |
| 379 } | 380 } |
| 380 if (result.empty()) { | 381 if (result.empty()) { |
| 381 // This should only happen on a lost context. | 382 // This should only happen on a lost context. |
| 382 return; | 383 return; |
| 383 } | 384 } |
| 384 DCHECK_EQ(0u, uniform_blocks_.size()); | 385 uniform_blocks_.clear(); |
| 385 DCHECK_EQ(0u, active_uniform_block_max_name_length_); | 386 active_uniform_block_max_name_length_ = 0; |
| 386 | 387 |
| 387 // |result| comes from GPU process. We consider it trusted data. Therefore, | 388 // |result| comes from GPU process. We consider it trusted data. Therefore, |
| 388 // no need to check for overflows as the GPU side did the checks already. | 389 // no need to check for overflows as the GPU side did the checks already. |
| 389 uint32_t header_size = sizeof(UniformBlocksHeader); | 390 uint32_t header_size = sizeof(UniformBlocksHeader); |
| 390 DCHECK_GE(result.size(), header_size); | 391 DCHECK_GE(result.size(), header_size); |
| 391 const UniformBlocksHeader* header = LocalGetAs<const UniformBlocksHeader*>( | 392 const UniformBlocksHeader* header = LocalGetAs<const UniformBlocksHeader*>( |
| 392 result, 0, header_size); | 393 result, 0, header_size); |
| 393 DCHECK(header); | 394 DCHECK(header); |
| 394 if (header->num_uniform_blocks == 0) { | 395 if (header->num_uniform_blocks == 0) { |
| 395 DCHECK_EQ(result.size(), header_size); | 396 DCHECK_EQ(result.size(), header_size); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 445 | 446 |
| 446 void ProgramInfoManager::Program::UpdateES3Uniformsiv( | 447 void ProgramInfoManager::Program::UpdateES3Uniformsiv( |
| 447 const std::vector<int8>& result) { | 448 const std::vector<int8>& result) { |
| 448 if (cached_es3_uniformsiv_) { | 449 if (cached_es3_uniformsiv_) { |
| 449 return; | 450 return; |
| 450 } | 451 } |
| 451 if (result.empty()) { | 452 if (result.empty()) { |
| 452 // This should only happen on a lost context. | 453 // This should only happen on a lost context. |
| 453 return; | 454 return; |
| 454 } | 455 } |
| 455 DCHECK_EQ(0u, uniforms_es3_.size()); | 456 uniforms_es3_.clear(); |
| 456 | 457 |
| 457 // |result| comes from GPU process. We consider it trusted data. Therefore, | 458 // |result| comes from GPU process. We consider it trusted data. Therefore, |
| 458 // no need to check for overflows as the GPU side did the checks already. | 459 // no need to check for overflows as the GPU side did the checks already. |
| 459 uint32_t header_size = sizeof(UniformsES3Header); | 460 uint32_t header_size = sizeof(UniformsES3Header); |
| 460 DCHECK_GE(result.size(), header_size); | 461 DCHECK_GE(result.size(), header_size); |
| 461 const UniformsES3Header* header = LocalGetAs<const UniformsES3Header*>( | 462 const UniformsES3Header* header = LocalGetAs<const UniformsES3Header*>( |
| 462 result, 0, header_size); | 463 result, 0, header_size); |
| 463 DCHECK(header); | 464 DCHECK(header); |
| 464 if (header->num_uniforms == 0) { | 465 if (header->num_uniforms == 0) { |
| 465 DCHECK_EQ(result.size(), header_size); | 466 DCHECK_EQ(result.size(), header_size); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 487 | 488 |
| 488 void ProgramInfoManager::Program::UpdateES3TransformFeedbackVaryings( | 489 void ProgramInfoManager::Program::UpdateES3TransformFeedbackVaryings( |
| 489 const std::vector<int8>& result) { | 490 const std::vector<int8>& result) { |
| 490 if (cached_es3_transform_feedback_varyings_) { | 491 if (cached_es3_transform_feedback_varyings_) { |
| 491 return; | 492 return; |
| 492 } | 493 } |
| 493 if (result.empty()) { | 494 if (result.empty()) { |
| 494 // This should only happen on a lost context. | 495 // This should only happen on a lost context. |
| 495 return; | 496 return; |
| 496 } | 497 } |
| 497 DCHECK_EQ(0u, transform_feedback_varyings_.size()); | 498 transform_feedback_varyings_.clear(); |
| 498 DCHECK_EQ(0u, transform_feedback_varying_max_length_); | 499 transform_feedback_varying_max_length_ = 0; |
| 499 | 500 |
| 500 // |result| comes from GPU process. We consider it trusted data. Therefore, | 501 // |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. | 502 // no need to check for overflows as the GPU side did the checks already. |
| 502 uint32_t header_size = sizeof(TransformFeedbackVaryingsHeader); | 503 uint32_t header_size = sizeof(TransformFeedbackVaryingsHeader); |
| 503 DCHECK_GE(result.size(), header_size); | 504 DCHECK_GE(result.size(), header_size); |
| 504 const TransformFeedbackVaryingsHeader* header = | 505 const TransformFeedbackVaryingsHeader* header = |
| 505 LocalGetAs<const TransformFeedbackVaryingsHeader*>( | 506 LocalGetAs<const TransformFeedbackVaryingsHeader*>( |
| 506 result, 0, header_size); | 507 result, 0, header_size); |
| 507 DCHECK(header); | 508 DCHECK(header); |
| 508 if (header->num_transform_feedback_varyings == 0) { | 509 if (header->num_transform_feedback_varyings == 0) { |
| (...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 990 } | 991 } |
| 991 return true; | 992 return true; |
| 992 } | 993 } |
| 993 } | 994 } |
| 994 return gl->GetUniformIndicesHelper(program, count, names, indices); | 995 return gl->GetUniformIndicesHelper(program, count, names, indices); |
| 995 } | 996 } |
| 996 | 997 |
| 997 } // namespace gles2 | 998 } // namespace gles2 |
| 998 } // namespace gpu | 999 } // namespace gpu |
| 999 | 1000 |
| OLD | NEW |