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

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

Issue 619723008: Switch to use ANGLE's new APIs to query shader variables. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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/shader_manager.h" 5 #include "gpu/command_buffer/service/shader_manager.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/strings/string_util.h" 10 #include "base/strings/string_util.h"
11 11
12 namespace gpu { 12 namespace gpu {
13 namespace gles2 { 13 namespace gles2 {
14 14
15 namespace {
16
17 // Given a variable name | a[0].b.c[0] |, return |a|.
18 std::string GetTopVariableName(const std::string& fullname) {
19 size_t pos = fullname.find_first_of("[.");
20 if (pos == std::string::npos)
21 return fullname;
22 return fullname.substr(0, pos);
23 }
24
25 } // namespace anonymous
26
15 Shader::Shader(GLuint service_id, GLenum shader_type) 27 Shader::Shader(GLuint service_id, GLenum shader_type)
16 : use_count_(0), 28 : use_count_(0),
17 service_id_(service_id), 29 service_id_(service_id),
18 shader_type_(shader_type), 30 shader_type_(shader_type),
19 valid_(false) { 31 valid_(false) {
20 } 32 }
21 33
22 Shader::~Shader() { 34 Shader::~Shader() {
23 } 35 }
24 36
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 void Shader::DecUseCount() { 101 void Shader::DecUseCount() {
90 --use_count_; 102 --use_count_;
91 DCHECK_GE(use_count_, 0); 103 DCHECK_GE(use_count_, 0);
92 } 104 }
93 105
94 void Shader::MarkAsDeleted() { 106 void Shader::MarkAsDeleted() {
95 DCHECK_NE(service_id_, 0u); 107 DCHECK_NE(service_id_, 0u);
96 service_id_ = 0; 108 service_id_ = 0;
97 } 109 }
98 110
99 const Shader::VariableInfo* Shader::GetAttribInfo( 111 const sh::Attribute* Shader::GetAttribInfo(const std::string& name) const {
100 const std::string& name) const { 112 AttributeMap::const_iterator it = attrib_map_.find(GetTopVariableName(name));
Ken Russell (switch to Gerrit) 2014/10/07 03:35:26 Per comment above: vertex shader inputs can't be a
Zhenyao Mo 2014/10/07 18:23:41 Done.
101 VariableMap::const_iterator it = attrib_map_.find(name);
102 return it != attrib_map_.end() ? &it->second : NULL; 113 return it != attrib_map_.end() ? &it->second : NULL;
103 } 114 }
104 115
105 const std::string* Shader::GetAttribMappedName( 116 const std::string* Shader::GetAttribMappedName(
106 const std::string& original_name) const { 117 const std::string& original_name) const {
107 for (VariableMap::const_iterator it = attrib_map_.begin(); 118 for (AttributeMap::const_iterator it = attrib_map_.begin();
108 it != attrib_map_.end(); ++it) { 119 it != attrib_map_.end(); ++it) {
109 if (it->second.name == original_name) 120 if (it->second.name == original_name)
110 return &(it->first); 121 return &(it->first);
111 } 122 }
112 return NULL; 123 return NULL;
113 } 124 }
114 125
115 const std::string* Shader::GetOriginalNameFromHashedName( 126 const std::string* Shader::GetOriginalNameFromHashedName(
116 const std::string& hashed_name) const { 127 const std::string& hashed_name) const {
117 NameMap::const_iterator it = name_map_.find(hashed_name); 128 NameMap::const_iterator it = name_map_.find(hashed_name);
118 if (it != name_map_.end()) 129 if (it != name_map_.end())
119 return &(it->second); 130 return &(it->second);
120 return NULL; 131 return NULL;
121 } 132 }
122 133
123 const Shader::VariableInfo* Shader::GetUniformInfo( 134 const sh::Uniform* Shader::GetUniformInfo(const std::string& name) const {
124 const std::string& name) const { 135 UniformMap::const_iterator it = uniform_map_.find(GetTopVariableName(name));
125 VariableMap::const_iterator it = uniform_map_.find(name);
126 return it != uniform_map_.end() ? &it->second : NULL; 136 return it != uniform_map_.end() ? &it->second : NULL;
127 } 137 }
128 138
129 const Shader::VariableInfo* Shader::GetVaryingInfo( 139 const sh::Varying* Shader::GetVaryingInfo(const std::string& name) const {
130 const std::string& name) const { 140 VaryingMap::const_iterator it = varying_map_.find(GetTopVariableName(name));
131 VariableMap::const_iterator it = varying_map_.find(name);
132 return it != varying_map_.end() ? &it->second : NULL; 141 return it != varying_map_.end() ? &it->second : NULL;
133 } 142 }
134 143
135 ShaderManager::ShaderManager() {} 144 ShaderManager::ShaderManager() {}
136 145
137 ShaderManager::~ShaderManager() { 146 ShaderManager::~ShaderManager() {
138 DCHECK(shaders_.empty()); 147 DCHECK(shaders_.empty());
139 } 148 }
140 149
141 void ShaderManager::Destroy(bool have_context) { 150 void ShaderManager::Destroy(bool have_context) {
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 DCHECK(shader); 231 DCHECK(shader);
223 DCHECK(IsOwned(shader)); 232 DCHECK(IsOwned(shader));
224 shader->DecUseCount(); 233 shader->DecUseCount();
225 RemoveShader(shader); 234 RemoveShader(shader);
226 } 235 }
227 236
228 } // namespace gles2 237 } // namespace gles2
229 } // namespace gpu 238 } // namespace gpu
230 239
231 240
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698