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

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

Issue 1415763009: command_buffer: Make inactive bound fragment inputs reserve the location (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@binduniformlocation-reserve-location
Patch Set: rebase Created 5 years, 1 month 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 #ifndef GPU_COMMAND_BUFFER_SERVICE_PROGRAM_MANAGER_H_ 5 #ifndef GPU_COMMAND_BUFFER_SERVICE_PROGRAM_MANAGER_H_
6 #define GPU_COMMAND_BUFFER_SERVICE_PROGRAM_MANAGER_H_ 6 #define GPU_COMMAND_BUFFER_SERVICE_PROGRAM_MANAGER_H_
7 7
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 kUniformMatrix2x4f = 1 << 16, 59 kUniformMatrix2x4f = 1 << 16,
60 kUniformMatrix3x2f = 1 << 17, 60 kUniformMatrix3x2f = 1 << 17,
61 kUniformMatrix3x4f = 1 << 18, 61 kUniformMatrix3x4f = 1 << 18,
62 kUniformMatrix4x2f = 1 << 19, 62 kUniformMatrix4x2f = 1 << 19,
63 kUniformMatrix4x3f = 1 << 20, 63 kUniformMatrix4x3f = 1 << 20,
64 }; 64 };
65 struct FragmentInputInfo { 65 struct FragmentInputInfo {
66 FragmentInputInfo(GLenum _type, GLuint _location) 66 FragmentInputInfo(GLenum _type, GLuint _location)
67 : type(_type), location(_location) {} 67 : type(_type), location(_location) {}
68 FragmentInputInfo() : type(GL_NONE), location(0) {} 68 FragmentInputInfo() : type(GL_NONE), location(0) {}
69 bool IsValid() const { return type != GL_NONE; }
70 GLenum type; 69 GLenum type;
71 GLuint location; 70 GLuint location;
72 }; 71 };
73 72
74 struct UniformInfo { 73 struct UniformInfo {
75 UniformInfo(); 74 UniformInfo();
76 UniformInfo(const std::string& client_name, 75 UniformInfo(const std::string& client_name,
77 GLint client_location_base, 76 GLint client_location_base,
78 GLenum _type, 77 GLenum _type,
79 bool _is_array, 78 bool _is_array,
(...skipping 20 matching lines...) Expand all
100 type(_type), 99 type(_type),
101 location(_location), 100 location(_location),
102 name(_name) { 101 name(_name) {
103 } 102 }
104 GLsizei size; 103 GLsizei size;
105 GLenum type; 104 GLenum type;
106 GLint location; 105 GLint location;
107 std::string name; 106 std::string name;
108 }; 107 };
109 108
110 class UniformLocationEntry { 109 template <typename T>
110 class ShaderVariableLocationEntry {
111 public: 111 public:
112 UniformLocationEntry() : uniform_(nullptr), inactive_(false) {} 112 ShaderVariableLocationEntry()
113 bool IsUnused() const { return !uniform_ && !inactive_; } 113 : shader_variable_(nullptr), inactive_(false) {}
114 bool IsUnused() const { return !shader_variable_ && !inactive_; }
114 bool IsInactive() const { return inactive_; } 115 bool IsInactive() const { return inactive_; }
115 bool IsActive() const { return uniform_ != nullptr; } 116 bool IsActive() const { return shader_variable_ != nullptr; }
116 void SetInactive() { 117 void SetInactive() {
117 uniform_ = nullptr; 118 shader_variable_ = nullptr;
118 inactive_ = true; 119 inactive_ = true;
119 } 120 }
120 void SetActive(UniformInfo* uniform) { 121 void SetActive(T* shader_variable) {
121 DCHECK(uniform); 122 DCHECK(shader_variable);
122 uniform_ = uniform; 123 shader_variable_ = shader_variable;
123 inactive_ = false; 124 inactive_ = false;
124 } 125 }
125 const UniformInfo* uniform() const { 126 const T* shader_variable() const {
126 DCHECK(IsActive()); 127 DCHECK(IsActive());
127 return uniform_; 128 return shader_variable_;
128 } 129 }
129 UniformInfo* uniform() { 130 T* shader_variable() {
130 DCHECK(IsActive()); 131 DCHECK(IsActive());
131 return uniform_; 132 return shader_variable_;
132 } 133 }
133 134
134 private: 135 private:
135 UniformInfo* uniform_; // Pointer to uniform_info_ vector entry. 136 T* shader_variable_; // Pointer to *_info_ vector entry.
136 bool inactive_; 137 bool inactive_;
137 }; 138 };
138 139
139 typedef std::vector<UniformInfo> UniformInfoVector; 140 typedef std::vector<UniformInfo> UniformInfoVector;
140 typedef std::vector<UniformLocationEntry> UniformLocationVector; 141 typedef std::vector<ShaderVariableLocationEntry<UniformInfo>>
142 UniformLocationVector;
141 typedef std::vector<VertexAttrib> AttribInfoVector; 143 typedef std::vector<VertexAttrib> AttribInfoVector;
142 typedef std::vector<FragmentInputInfo> FragmentInputInfoVector; 144 typedef std::vector<FragmentInputInfo> FragmentInputInfoVector;
145 typedef std::vector<ShaderVariableLocationEntry<FragmentInputInfo>>
146 FragmentInputLocationVector;
143 typedef std::vector<int> SamplerIndices; 147 typedef std::vector<int> SamplerIndices;
144 typedef std::map<std::string, GLint> LocationMap; 148 typedef std::map<std::string, GLint> LocationMap;
145 typedef std::vector<std::string> StringVector; 149 typedef std::vector<std::string> StringVector;
146 150
147 Program(ProgramManager* manager, GLuint service_id); 151 Program(ProgramManager* manager, GLuint service_id);
148 152
149 GLuint service_id() const { 153 GLuint service_id() const {
150 return service_id_; 154 return service_id_;
151 } 155 }
152 156
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 const std::string* GetUniformMappedName( 189 const std::string* GetUniformMappedName(
186 const std::string& original_name) const; 190 const std::string& original_name) const;
187 191
188 // If the hashed name is not found, return NULL. 192 // If the hashed name is not found, return NULL.
189 const std::string* GetOriginalNameFromHashedName( 193 const std::string* GetOriginalNameFromHashedName(
190 const std::string& hashed_name) const; 194 const std::string& hashed_name) const;
191 195
192 const FragmentInputInfo* GetFragmentInputInfoByFakeLocation( 196 const FragmentInputInfo* GetFragmentInputInfoByFakeLocation(
193 GLint fake_location) const; 197 GLint fake_location) const;
194 198
199 bool IsInactiveFragmentInputLocationByFakeLocation(GLint fake_location) const;
200
195 // Gets the fake location of a uniform by name. 201 // Gets the fake location of a uniform by name.
196 GLint GetUniformFakeLocation(const std::string& name) const; 202 GLint GetUniformFakeLocation(const std::string& name) const;
197 203
198 // Gets the UniformInfo of a uniform by location. 204 // Gets the UniformInfo of a uniform by location.
199 const UniformInfo* GetUniformInfoByFakeLocation( 205 const UniformInfo* GetUniformInfoByFakeLocation(
200 GLint fake_location, GLint* real_location, GLint* array_index) const; 206 GLint fake_location, GLint* real_location, GLint* array_index) const;
201 207
202 // Returns true if |fake_location| is a location for an inactive uniform, 208 // Returns true if |fake_location| is a location for an inactive uniform,
203 // -1 for bound, non-existing uniform. 209 // -1 for bound, non-existing uniform.
204 bool IsInactiveUniformLocationByFakeLocation(GLint fake_location) const; 210 bool IsInactiveUniformLocationByFakeLocation(GLint fake_location) const;
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 GLsizei max_uniform_name_length_; 438 GLsizei max_uniform_name_length_;
433 439
434 // Uniform info by index. 440 // Uniform info by index.
435 UniformInfoVector uniform_infos_; 441 UniformInfoVector uniform_infos_;
436 UniformLocationVector uniform_locations_; 442 UniformLocationVector uniform_locations_;
437 443
438 // The indices of the uniforms that are samplers. 444 // The indices of the uniforms that are samplers.
439 SamplerIndices sampler_indices_; 445 SamplerIndices sampler_indices_;
440 446
441 FragmentInputInfoVector fragment_input_infos_; 447 FragmentInputInfoVector fragment_input_infos_;
448 FragmentInputLocationVector fragment_input_locations_;
442 449
443 // The program this Program is tracking. 450 // The program this Program is tracking.
444 GLuint service_id_; 451 GLuint service_id_;
445 452
446 // Shaders by type of shader. 453 // Shaders by type of shader.
447 scoped_refptr<Shader> 454 scoped_refptr<Shader>
448 attached_shaders_[kMaxAttachedShaders]; 455 attached_shaders_[kMaxAttachedShaders];
449 456
450 // True if this program is marked as deleted. 457 // True if this program is marked as deleted.
451 bool deleted_; 458 bool deleted_;
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 }; 567 };
561 568
562 inline const FeatureInfo& Program::feature_info() const { 569 inline const FeatureInfo& Program::feature_info() const {
563 return *manager_->feature_info_.get(); 570 return *manager_->feature_info_.get();
564 } 571 }
565 572
566 } // namespace gles2 573 } // namespace gles2
567 } // namespace gpu 574 } // namespace gpu
568 575
569 #endif // GPU_COMMAND_BUFFER_SERVICE_PROGRAM_MANAGER_H_ 576 #endif // GPU_COMMAND_BUFFER_SERVICE_PROGRAM_MANAGER_H_
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_decoder.cc ('k') | gpu/command_buffer/service/program_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698