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

Side by Side Diff: gpu/command_buffer/service/program_manager.cc

Issue 1859703002: convert //gpu to std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase on master Created 4 years, 8 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/service/program_manager.h" 5 #include "gpu/command_buffer/service/program_manager.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
11 #include <memory>
11 #include <set> 12 #include <set>
12 #include <utility> 13 #include <utility>
13 #include <vector> 14 #include <vector>
14 15
15 #include "base/command_line.h" 16 #include "base/command_line.h"
16 #include "base/containers/hash_tables.h" 17 #include "base/containers/hash_tables.h"
17 #include "base/logging.h" 18 #include "base/logging.h"
18 #include "base/memory/scoped_ptr.h"
19 #include "base/metrics/histogram.h" 19 #include "base/metrics/histogram.h"
20 #include "base/numerics/safe_math.h" 20 #include "base/numerics/safe_math.h"
21 #include "base/strings/string_number_conversions.h" 21 #include "base/strings/string_number_conversions.h"
22 #include "base/strings/string_util.h" 22 #include "base/strings/string_util.h"
23 #include "base/strings/stringprintf.h" 23 #include "base/strings/stringprintf.h"
24 #include "base/time/time.h" 24 #include "base/time/time.h"
25 #include "gpu/command_buffer/common/gles2_cmd_format.h" 25 #include "gpu/command_buffer/common/gles2_cmd_format.h"
26 #include "gpu/command_buffer/common/gles2_cmd_utils.h" 26 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
27 #include "gpu/command_buffer/service/feature_info.h" 27 #include "gpu/command_buffer/service/feature_info.h"
28 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" 28 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 return output + input.as_string(); 313 return output + input.as_string();
314 } 314 }
315 315
316 void Program::UpdateLogInfo() { 316 void Program::UpdateLogInfo() {
317 GLint max_len = 0; 317 GLint max_len = 0;
318 glGetProgramiv(service_id_, GL_INFO_LOG_LENGTH, &max_len); 318 glGetProgramiv(service_id_, GL_INFO_LOG_LENGTH, &max_len);
319 if (max_len == 0) { 319 if (max_len == 0) {
320 set_log_info(NULL); 320 set_log_info(NULL);
321 return; 321 return;
322 } 322 }
323 scoped_ptr<char[]> temp(new char[max_len]); 323 std::unique_ptr<char[]> temp(new char[max_len]);
324 GLint len = 0; 324 GLint len = 0;
325 glGetProgramInfoLog(service_id_, max_len, &len, temp.get()); 325 glGetProgramInfoLog(service_id_, max_len, &len, temp.get());
326 DCHECK(max_len == 0 || len < max_len); 326 DCHECK(max_len == 0 || len < max_len);
327 DCHECK(len == 0 || temp[len] == '\0'); 327 DCHECK(len == 0 || temp[len] == '\0');
328 std::string log(temp.get(), len); 328 std::string log(temp.get(), len);
329 set_log_info(ProcessLogInfo(log).c_str()); 329 set_log_info(ProcessLogInfo(log).c_str());
330 } 330 }
331 331
332 void Program::ClearUniforms(std::vector<uint8_t>* zero_buffer) { 332 void Program::ClearUniforms(std::vector<uint8_t>* zero_buffer) {
333 DCHECK(zero_buffer); 333 DCHECK(zero_buffer);
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 Reset(); 457 Reset();
458 UpdateLogInfo(); 458 UpdateLogInfo();
459 link_status_ = true; 459 link_status_ = true;
460 uniforms_cleared_ = false; 460 uniforms_cleared_ = false;
461 GLint num_attribs = 0; 461 GLint num_attribs = 0;
462 GLint max_len = 0; 462 GLint max_len = 0;
463 GLint max_location = -1; 463 GLint max_location = -1;
464 glGetProgramiv(service_id_, GL_ACTIVE_ATTRIBUTES, &num_attribs); 464 glGetProgramiv(service_id_, GL_ACTIVE_ATTRIBUTES, &num_attribs);
465 glGetProgramiv(service_id_, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &max_len); 465 glGetProgramiv(service_id_, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &max_len);
466 // TODO(gman): Should we check for error? 466 // TODO(gman): Should we check for error?
467 scoped_ptr<char[]> name_buffer(new char[max_len]); 467 std::unique_ptr<char[]> name_buffer(new char[max_len]);
468 for (GLint ii = 0; ii < num_attribs; ++ii) { 468 for (GLint ii = 0; ii < num_attribs; ++ii) {
469 GLsizei length = 0; 469 GLsizei length = 0;
470 GLsizei size = 0; 470 GLsizei size = 0;
471 GLenum type = 0; 471 GLenum type = 0;
472 glGetActiveAttrib( 472 glGetActiveAttrib(
473 service_id_, ii, max_len, &length, &size, &type, name_buffer.get()); 473 service_id_, ii, max_len, &length, &size, &type, name_buffer.get());
474 DCHECK(max_len == 0 || length < max_len); 474 DCHECK(max_len == 0 || length < max_len);
475 DCHECK(length == 0 || name_buffer[length] == '\0'); 475 DCHECK(length == 0 || name_buffer[length] == '\0');
476 std::string original_name; 476 std::string original_name;
477 GetVertexAttribData(name_buffer.get(), &original_name, &type); 477 GetVertexAttribData(name_buffer.get(), &original_name, &type);
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 glGetProgramiv(service_id_, GL_ACTIVE_UNIFORMS, &num_uniforms); 545 glGetProgramiv(service_id_, GL_ACTIVE_UNIFORMS, &num_uniforms);
546 if (num_uniforms <= 0) 546 if (num_uniforms <= 0)
547 return; 547 return;
548 548
549 uniform_infos_.resize(num_uniforms); 549 uniform_infos_.resize(num_uniforms);
550 550
551 GLint name_buffer_length = 0; 551 GLint name_buffer_length = 0;
552 glGetProgramiv(service_id_, GL_ACTIVE_UNIFORM_MAX_LENGTH, 552 glGetProgramiv(service_id_, GL_ACTIVE_UNIFORM_MAX_LENGTH,
553 &name_buffer_length); 553 &name_buffer_length);
554 DCHECK(name_buffer_length > 0); 554 DCHECK(name_buffer_length > 0);
555 scoped_ptr<char[]> name_buffer(new char[name_buffer_length]); 555 std::unique_ptr<char[]> name_buffer(new char[name_buffer_length]);
556 556
557 size_t unused_client_location_cursor = 0; 557 size_t unused_client_location_cursor = 0;
558 558
559 for (GLint uniform_index = 0; uniform_index < num_uniforms; ++uniform_index) { 559 for (GLint uniform_index = 0; uniform_index < num_uniforms; ++uniform_index) {
560 GLsizei name_length = 0; 560 GLsizei name_length = 0;
561 GLsizei size = 0; 561 GLsizei size = 0;
562 GLenum type = GL_NONE; 562 GLenum type = GL_NONE;
563 glGetActiveUniform(service_id_, uniform_index, name_buffer_length, 563 glGetActiveUniform(service_id_, uniform_index, name_buffer_length,
564 &name_length, &size, &type, name_buffer.get()); 564 &name_length, &size, &type, name_buffer.get());
565 DCHECK(name_length < name_buffer_length); 565 DCHECK(name_length < name_buffer_length);
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
719 glGetProgramInterfaceiv(service_id_, GL_FRAGMENT_INPUT_NV, 719 glGetProgramInterfaceiv(service_id_, GL_FRAGMENT_INPUT_NV,
720 GL_ACTIVE_RESOURCES, &num_fragment_inputs); 720 GL_ACTIVE_RESOURCES, &num_fragment_inputs);
721 if (num_fragment_inputs <= 0) 721 if (num_fragment_inputs <= 0)
722 return; 722 return;
723 723
724 GLint max_len = 0; 724 GLint max_len = 0;
725 glGetProgramInterfaceiv(service_id_, GL_FRAGMENT_INPUT_NV, GL_MAX_NAME_LENGTH, 725 glGetProgramInterfaceiv(service_id_, GL_FRAGMENT_INPUT_NV, GL_MAX_NAME_LENGTH,
726 &max_len); 726 &max_len);
727 DCHECK(max_len > 0); 727 DCHECK(max_len > 0);
728 728
729 scoped_ptr<char[]> name_buffer(new char[max_len]); 729 std::unique_ptr<char[]> name_buffer(new char[max_len]);
730 730
731 Shader* fragment_shader = 731 Shader* fragment_shader =
732 attached_shaders_[ShaderTypeToIndex(GL_FRAGMENT_SHADER)].get(); 732 attached_shaders_[ShaderTypeToIndex(GL_FRAGMENT_SHADER)].get();
733 733
734 const GLenum kQueryProperties[] = {GL_LOCATION, GL_TYPE, GL_ARRAY_SIZE}; 734 const GLenum kQueryProperties[] = {GL_LOCATION, GL_TYPE, GL_ARRAY_SIZE};
735 735
736 std::vector<size_t> client_location_indices; 736 std::vector<size_t> client_location_indices;
737 for (GLint ii = 0; ii < num_fragment_inputs; ++ii) { 737 for (GLint ii = 0; ii < num_fragment_inputs; ++ii) {
738 GLsizei name_length = 0; 738 GLsizei name_length = 0;
739 glGetProgramResourceName(service_id_, GL_FRAGMENT_INPUT_NV, ii, max_len, 739 glGetProgramResourceName(service_id_, GL_FRAGMENT_INPUT_NV, ii, max_len,
(...skipping 1040 matching lines...) Expand 10 before | Expand all | Expand 10 after
1780 } 1780 }
1781 1781
1782 ShVariableInfo var; 1782 ShVariableInfo var;
1783 var.type = static_cast<sh::GLenum>(key_value.second.type); 1783 var.type = static_cast<sh::GLenum>(key_value.second.type);
1784 var.size = std::max(1u, key_value.second.arraySize); 1784 var.size = std::max(1u, key_value.second.arraySize);
1785 combined_map[key_value.first] = var; 1785 combined_map[key_value.first] = var;
1786 } 1786 }
1787 1787
1788 if (combined_map.size() == 0) 1788 if (combined_map.size() == 0)
1789 return true; 1789 return true;
1790 scoped_ptr<ShVariableInfo[]> variables( 1790 std::unique_ptr<ShVariableInfo[]> variables(
1791 new ShVariableInfo[combined_map.size()]); 1791 new ShVariableInfo[combined_map.size()]);
1792 size_t index = 0; 1792 size_t index = 0;
1793 for (const auto& key_value : combined_map) { 1793 for (const auto& key_value : combined_map) {
1794 variables[index].type = key_value.second.type; 1794 variables[index].type = key_value.second.type;
1795 variables[index].size = key_value.second.size; 1795 variables[index].size = key_value.second.size;
1796 ++index; 1796 ++index;
1797 } 1797 }
1798 return ShCheckVariablesWithinPackingLimits( 1798 return ShCheckVariablesWithinPackingLimits(
1799 static_cast<int>(manager_->max_varying_vectors()), 1799 static_cast<int>(manager_->max_varying_vectors()),
1800 variables.get(), 1800 variables.get(),
(...skipping 566 matching lines...) Expand 10 before | Expand all | Expand 10 after
2367 DCHECK(program); 2367 DCHECK(program);
2368 program->ClearUniforms(&zero_); 2368 program->ClearUniforms(&zero_);
2369 } 2369 }
2370 2370
2371 int32_t ProgramManager::MakeFakeLocation(int32_t index, int32_t element) { 2371 int32_t ProgramManager::MakeFakeLocation(int32_t index, int32_t element) {
2372 return index + element * 0x10000; 2372 return index + element * 0x10000;
2373 } 2373 }
2374 2374
2375 } // namespace gles2 2375 } // namespace gles2
2376 } // namespace gpu 2376 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/program_manager.h ('k') | gpu/command_buffer/service/program_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698