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

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

Issue 1542513002: Switch to standard integer types in gpu/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix Created 4 years, 12 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>
8 #include <stdint.h>
9
7 #include <algorithm> 10 #include <algorithm>
8 #include <set> 11 #include <set>
9 #include <utility> 12 #include <utility>
10 #include <vector> 13 #include <vector>
11 14
12 #include "base/basictypes.h"
13 #include "base/command_line.h" 15 #include "base/command_line.h"
14 #include "base/containers/hash_tables.h" 16 #include "base/containers/hash_tables.h"
15 #include "base/logging.h" 17 #include "base/logging.h"
16 #include "base/memory/scoped_ptr.h" 18 #include "base/memory/scoped_ptr.h"
17 #include "base/metrics/histogram.h" 19 #include "base/metrics/histogram.h"
18 #include "base/numerics/safe_math.h" 20 #include "base/numerics/safe_math.h"
19 #include "base/strings/string_number_conversions.h" 21 #include "base/strings/string_number_conversions.h"
20 #include "base/strings/string_util.h" 22 #include "base/strings/string_util.h"
21 #include "base/strings/stringprintf.h" 23 #include "base/strings/stringprintf.h"
22 #include "base/time/time.h" 24 #include "base/time/time.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 // Look for an array specification. 68 // Look for an array specification.
67 size_t open_pos = name.find_last_of('['); 69 size_t open_pos = name.find_last_of('[');
68 if (open_pos == std::string::npos || 70 if (open_pos == std::string::npos ||
69 open_pos >= name.size() - 2) { 71 open_pos >= name.size() - 2) {
70 return false; 72 return false;
71 } 73 }
72 74
73 base::CheckedNumeric<GLint> index = 0; 75 base::CheckedNumeric<GLint> index = 0;
74 size_t last = name.size() - 1; 76 size_t last = name.size() - 1;
75 for (size_t pos = open_pos + 1; pos < last; ++pos) { 77 for (size_t pos = open_pos + 1; pos < last; ++pos) {
76 int8 digit = name[pos] - '0'; 78 int8_t digit = name[pos] - '0';
77 if (digit < 0 || digit > 9) { 79 if (digit < 0 || digit > 9) {
78 return false; 80 return false;
79 } 81 }
80 index = index * 10 + digit; 82 index = index * 10 + digit;
81 } 83 }
82 if (!index.IsValid()) { 84 if (!index.IsValid()) {
83 return false; 85 return false;
84 } 86 }
85 87
86 *element_index = index.ValueOrDie(); 88 *element_index = index.ValueOrDie();
(...skipping 16 matching lines...) Expand all
103 } 105 }
104 106
105 bool IsBuiltInInvariant( 107 bool IsBuiltInInvariant(
106 const VaryingMap& varyings, const std::string& name) { 108 const VaryingMap& varyings, const std::string& name) {
107 VaryingMap::const_iterator hit = varyings.find(name); 109 VaryingMap::const_iterator hit = varyings.find(name);
108 if (hit == varyings.end()) 110 if (hit == varyings.end())
109 return false; 111 return false;
110 return hit->second.isInvariant; 112 return hit->second.isInvariant;
111 } 113 }
112 114
113 uint32 ComputeOffset(const void* start, const void* position) { 115 uint32_t ComputeOffset(const void* start, const void* position) {
114 return static_cast<const uint8*>(position) - 116 return static_cast<const uint8_t*>(position) -
115 static_cast<const uint8*>(start); 117 static_cast<const uint8_t*>(start);
116 } 118 }
117 119
118 } // anonymous namespace. 120 } // anonymous namespace.
119 121
120 Program::UniformInfo::UniformInfo() 122 Program::UniformInfo::UniformInfo()
121 : size(0), 123 : size(0),
122 type(GL_NONE), 124 type(GL_NONE),
123 accepts_api_type(0), 125 accepts_api_type(0),
124 fake_location_base(0), 126 fake_location_base(0),
125 is_array(false) {} 127 is_array(false) {}
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 } 318 }
317 scoped_ptr<char[]> temp(new char[max_len]); 319 scoped_ptr<char[]> temp(new char[max_len]);
318 GLint len = 0; 320 GLint len = 0;
319 glGetProgramInfoLog(service_id_, max_len, &len, temp.get()); 321 glGetProgramInfoLog(service_id_, max_len, &len, temp.get());
320 DCHECK(max_len == 0 || len < max_len); 322 DCHECK(max_len == 0 || len < max_len);
321 DCHECK(len == 0 || temp[len] == '\0'); 323 DCHECK(len == 0 || temp[len] == '\0');
322 std::string log(temp.get(), len); 324 std::string log(temp.get(), len);
323 set_log_info(ProcessLogInfo(log).c_str()); 325 set_log_info(ProcessLogInfo(log).c_str());
324 } 326 }
325 327
326 void Program::ClearUniforms( 328 void Program::ClearUniforms(std::vector<uint8_t>* zero_buffer) {
327 std::vector<uint8>* zero_buffer) {
328 DCHECK(zero_buffer); 329 DCHECK(zero_buffer);
329 if (uniforms_cleared_) { 330 if (uniforms_cleared_) {
330 return; 331 return;
331 } 332 }
332 uniforms_cleared_ = true; 333 uniforms_cleared_ = true;
333 for (const UniformInfo& uniform_info : uniform_infos_) { 334 for (const UniformInfo& uniform_info : uniform_infos_) {
334 GLint location = uniform_info.element_locations[0]; 335 GLint location = uniform_info.element_locations[0];
335 GLsizei size = uniform_info.size; 336 GLsizei size = uniform_info.size;
336 uint32 unit_size = 337 uint32_t unit_size =
337 GLES2Util::GetElementCountForUniformType(uniform_info.type) * 338 GLES2Util::GetElementCountForUniformType(uniform_info.type) *
338 GLES2Util::GetElementSizeForUniformType(uniform_info.type); 339 GLES2Util::GetElementSizeForUniformType(uniform_info.type);
339 DCHECK_LT(0u, unit_size); 340 DCHECK_LT(0u, unit_size);
340 uint32 size_needed = size * unit_size; 341 uint32_t size_needed = size * unit_size;
341 if (size_needed > zero_buffer->size()) { 342 if (size_needed > zero_buffer->size()) {
342 zero_buffer->resize(size_needed, 0u); 343 zero_buffer->resize(size_needed, 0u);
343 } 344 }
344 const void* zero = &(*zero_buffer)[0]; 345 const void* zero = &(*zero_buffer)[0];
345 switch (uniform_info.type) { 346 switch (uniform_info.type) {
346 case GL_FLOAT: 347 case GL_FLOAT:
347 glUniform1fv(location, size, reinterpret_cast<const GLfloat*>(zero)); 348 glUniform1fv(location, size, reinterpret_cast<const GLfloat*>(zero));
348 break; 349 break;
349 case GL_FLOAT_VEC2: 350 case GL_FLOAT_VEC2:
350 glUniform2fv(location, size, reinterpret_cast<const GLfloat*>(zero)); 351 glUniform2fv(location, size, reinterpret_cast<const GLfloat*>(zero));
(...skipping 1475 matching lines...) Expand 10 before | Expand all | Expand 10 after
1826 variables.get(), 1827 variables.get(),
1827 combined_map.size()); 1828 combined_map.size());
1828 } 1829 }
1829 1830
1830 void Program::GetProgramInfo( 1831 void Program::GetProgramInfo(
1831 ProgramManager* manager, CommonDecoder::Bucket* bucket) const { 1832 ProgramManager* manager, CommonDecoder::Bucket* bucket) const {
1832 // NOTE: It seems to me the math in here does not need check for overflow 1833 // NOTE: It seems to me the math in here does not need check for overflow
1833 // because the data being calucated from has various small limits. The max 1834 // because the data being calucated from has various small limits. The max
1834 // number of attribs + uniforms is somewhere well under 1024. The maximum size 1835 // number of attribs + uniforms is somewhere well under 1024. The maximum size
1835 // of an identifier is 256 characters. 1836 // of an identifier is 256 characters.
1836 uint32 num_locations = 0; 1837 uint32_t num_locations = 0;
1837 uint32 total_string_size = 0; 1838 uint32_t total_string_size = 0;
1838 1839
1839 for (size_t ii = 0; ii < attrib_infos_.size(); ++ii) { 1840 for (size_t ii = 0; ii < attrib_infos_.size(); ++ii) {
1840 const VertexAttrib& info = attrib_infos_[ii]; 1841 const VertexAttrib& info = attrib_infos_[ii];
1841 num_locations += 1; 1842 num_locations += 1;
1842 total_string_size += info.name.size(); 1843 total_string_size += info.name.size();
1843 } 1844 }
1844 1845
1845 for (const UniformInfo& info : uniform_infos_) { 1846 for (const UniformInfo& info : uniform_infos_) {
1846 num_locations += info.element_locations.size(); 1847 num_locations += info.element_locations.size();
1847 total_string_size += info.name.size(); 1848 total_string_size += info.name.size();
1848 } 1849 }
1849 1850
1850 uint32 num_inputs = attrib_infos_.size() + uniform_infos_.size(); 1851 uint32_t num_inputs = attrib_infos_.size() + uniform_infos_.size();
1851 uint32 input_size = num_inputs * sizeof(ProgramInput); 1852 uint32_t input_size = num_inputs * sizeof(ProgramInput);
1852 uint32 location_size = num_locations * sizeof(int32); 1853 uint32_t location_size = num_locations * sizeof(int32_t);
1853 uint32 size = sizeof(ProgramInfoHeader) + 1854 uint32_t size = sizeof(ProgramInfoHeader) + input_size + location_size +
1854 input_size + location_size + total_string_size; 1855 total_string_size;
1855 1856
1856 bucket->SetSize(size); 1857 bucket->SetSize(size);
1857 ProgramInfoHeader* header = bucket->GetDataAs<ProgramInfoHeader*>(0, size); 1858 ProgramInfoHeader* header = bucket->GetDataAs<ProgramInfoHeader*>(0, size);
1858 ProgramInput* inputs = bucket->GetDataAs<ProgramInput*>( 1859 ProgramInput* inputs = bucket->GetDataAs<ProgramInput*>(
1859 sizeof(ProgramInfoHeader), input_size); 1860 sizeof(ProgramInfoHeader), input_size);
1860 int32* locations = bucket->GetDataAs<int32*>( 1861 int32_t* locations = bucket->GetDataAs<int32_t*>(
1861 sizeof(ProgramInfoHeader) + input_size, location_size); 1862 sizeof(ProgramInfoHeader) + input_size, location_size);
1862 char* strings = bucket->GetDataAs<char*>( 1863 char* strings = bucket->GetDataAs<char*>(
1863 sizeof(ProgramInfoHeader) + input_size + location_size, 1864 sizeof(ProgramInfoHeader) + input_size + location_size,
1864 total_string_size); 1865 total_string_size);
1865 DCHECK(header); 1866 DCHECK(header);
1866 DCHECK(inputs); 1867 DCHECK(inputs);
1867 DCHECK(locations); 1868 DCHECK(locations);
1868 DCHECK(strings); 1869 DCHECK(strings);
1869 1870
1870 header->link_status = link_status_; 1871 header->link_status = link_status_;
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after
2260 if (manager_) { 2261 if (manager_) {
2261 if (manager_->have_context_) { 2262 if (manager_->have_context_) {
2262 glDeleteProgram(service_id()); 2263 glDeleteProgram(service_id());
2263 } 2264 }
2264 manager_->StopTracking(this); 2265 manager_->StopTracking(this);
2265 manager_ = NULL; 2266 manager_ = NULL;
2266 } 2267 }
2267 } 2268 }
2268 2269
2269 ProgramManager::ProgramManager(ProgramCache* program_cache, 2270 ProgramManager::ProgramManager(ProgramCache* program_cache,
2270 uint32 max_varying_vectors, 2271 uint32_t max_varying_vectors,
2271 uint32 max_dual_source_draw_buffers, 2272 uint32_t max_dual_source_draw_buffers,
2272 FeatureInfo* feature_info) 2273 FeatureInfo* feature_info)
2273 : program_count_(0), 2274 : program_count_(0),
2274 have_context_(true), 2275 have_context_(true),
2275 program_cache_(program_cache), 2276 program_cache_(program_cache),
2276 max_varying_vectors_(max_varying_vectors), 2277 max_varying_vectors_(max_varying_vectors),
2277 max_dual_source_draw_buffers_(max_dual_source_draw_buffers), 2278 max_dual_source_draw_buffers_(max_dual_source_draw_buffers),
2278 feature_info_(feature_info) {} 2279 feature_info_(feature_info) {}
2279 2280
2280 ProgramManager::~ProgramManager() { 2281 ProgramManager::~ProgramManager() {
2281 DCHECK(programs_.empty()); 2282 DCHECK(programs_.empty());
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
2376 DCHECK(IsOwned(program)); 2377 DCHECK(IsOwned(program));
2377 program->DecUseCount(); 2378 program->DecUseCount();
2378 RemoveProgramInfoIfUnused(shader_manager, program); 2379 RemoveProgramInfoIfUnused(shader_manager, program);
2379 } 2380 }
2380 2381
2381 void ProgramManager::ClearUniforms(Program* program) { 2382 void ProgramManager::ClearUniforms(Program* program) {
2382 DCHECK(program); 2383 DCHECK(program);
2383 program->ClearUniforms(&zero_); 2384 program->ClearUniforms(&zero_);
2384 } 2385 }
2385 2386
2386 int32 ProgramManager::MakeFakeLocation(int32 index, int32 element) { 2387 int32_t ProgramManager::MakeFakeLocation(int32_t index, int32_t element) {
2387 return index + element * 0x10000; 2388 return index + element * 0x10000;
2388 } 2389 }
2389 2390
2390 } // namespace gles2 2391 } // namespace gles2
2391 } // namespace gpu 2392 } // 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