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

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

Issue 693943003: Update from https://crrev.com/302630 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 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
« no previous file with comments | « gpu/command_buffer/service/program_manager.cc ('k') | gpu/command_buffer/tests/gl_manager.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_translator.h" 5 #include "gpu/command_buffer/service/shader_translator.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 #include <GLES2/gl2.h> 8 #include <GLES2/gl2.h>
9 #include <algorithm> 9 #include <algorithm>
10 10
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 for (size_t ii = 0; ii < varyings->size(); ++ii) 66 for (size_t ii = 0; ii < varyings->size(); ++ii)
67 (*var_map)[(*varyings)[ii].mappedName] = (*varyings)[ii]; 67 (*var_map)[(*varyings)[ii].mappedName] = (*varyings)[ii];
68 } 68 }
69 } 69 }
70 70
71 void GetNameHashingInfo(ShHandle compiler, NameMap* name_map) { 71 void GetNameHashingInfo(ShHandle compiler, NameMap* name_map) {
72 if (!name_map) 72 if (!name_map)
73 return; 73 return;
74 name_map->clear(); 74 name_map->clear();
75 75
76 size_t hashed_names_count = 0; 76 typedef std::map<std::string, std::string> NameMapANGLE;
77 ShGetInfo(compiler, SH_HASHED_NAMES_COUNT, &hashed_names_count); 77 const NameMapANGLE* angle_map = ShGetNameHashingMap(compiler);
78 if (hashed_names_count == 0) 78 DCHECK(angle_map);
79 return;
80 79
81 size_t name_max_len = 0, hashed_name_max_len = 0; 80 for (NameMapANGLE::const_iterator iter = angle_map->begin();
82 ShGetInfo(compiler, SH_NAME_MAX_LENGTH, &name_max_len); 81 iter != angle_map->end(); ++iter) {
83 ShGetInfo(compiler, SH_HASHED_NAME_MAX_LENGTH, &hashed_name_max_len); 82 // Note that in ANGLE, the map is (original_name, hash);
84 83 // here, we want (hash, original_name).
85 scoped_ptr<char[]> name(new char[name_max_len]); 84 (*name_map)[iter->second] = iter->first;
86 scoped_ptr<char[]> hashed_name(new char[hashed_name_max_len]);
87
88 for (size_t i = 0; i < hashed_names_count; ++i) {
89 ShGetNameHashingEntry(compiler, i, name.get(), hashed_name.get());
90 (*name_map)[hashed_name.get()] = name.get();
91 } 85 }
92 } 86 }
93 87
94 } // namespace 88 } // namespace
95 89
96 ShaderTranslator::DestructionObserver::DestructionObserver() { 90 ShaderTranslator::DestructionObserver::DestructionObserver() {
97 } 91 }
98 92
99 ShaderTranslator::DestructionObserver::~DestructionObserver() { 93 ShaderTranslator::DestructionObserver::~DestructionObserver() {
100 } 94 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 UniformMap* uniform_map, 145 UniformMap* uniform_map,
152 VaryingMap* varying_map, 146 VaryingMap* varying_map,
153 NameMap* name_map) const { 147 NameMap* name_map) const {
154 // Make sure this instance is initialized. 148 // Make sure this instance is initialized.
155 DCHECK(compiler_ != NULL); 149 DCHECK(compiler_ != NULL);
156 150
157 bool success = false; 151 bool success = false;
158 { 152 {
159 TRACE_EVENT0("gpu", "ShCompile"); 153 TRACE_EVENT0("gpu", "ShCompile");
160 const char* const shader_strings[] = { shader_source.c_str() }; 154 const char* const shader_strings[] = { shader_source.c_str() };
161 success = !!ShCompile( 155 success = ShCompile(
162 compiler_, shader_strings, 1, GetCompileOptions()); 156 compiler_, shader_strings, 1, GetCompileOptions());
163 } 157 }
164 if (success) { 158 if (success) {
159 // Get translated shader.
165 if (translated_source) { 160 if (translated_source) {
166 translated_source->clear(); 161 *translated_source = ShGetObjectCode(compiler_);
167 // Get translated shader.
168 size_t obj_code_len = 0;
169 ShGetInfo(compiler_, SH_OBJECT_CODE_LENGTH, &obj_code_len);
170 if (obj_code_len > 1) {
171 scoped_ptr<char[]> buffer(new char[obj_code_len]);
172 ShGetObjectCode(compiler_, buffer.get());
173 *translated_source = std::string(buffer.get(), obj_code_len - 1);
174 }
175 } 162 }
176 // Get info for attribs, uniforms, and varyings. 163 // Get info for attribs, uniforms, and varyings.
177 GetAttributes(compiler_, attrib_map); 164 GetAttributes(compiler_, attrib_map);
178 GetUniforms(compiler_, uniform_map); 165 GetUniforms(compiler_, uniform_map);
179 GetVaryings(compiler_, varying_map); 166 GetVaryings(compiler_, varying_map);
180 // Get info for name hashing. 167 // Get info for name hashing.
181 GetNameHashingInfo(compiler_, name_map); 168 GetNameHashingInfo(compiler_, name_map);
182 } 169 }
183 170
184 // Get info log. 171 // Get info log.
185 if (info_log) { 172 if (info_log) {
186 info_log->clear(); 173 *info_log = ShGetInfoLog(compiler_);
187 size_t info_log_len = 0;
188 ShGetInfo(compiler_, SH_INFO_LOG_LENGTH, &info_log_len);
189 if (info_log_len > 1) {
190 scoped_ptr<char[]> buffer(new char[info_log_len]);
191 ShGetInfoLog(compiler_, buffer.get());
192 *info_log = std::string(buffer.get(), info_log_len - 1);
193 }
194 } 174 }
195 175
196 return success; 176 return success;
197 } 177 }
198 178
199 std::string ShaderTranslator::GetStringForOptionsThatWouldAffectCompilation() 179 std::string ShaderTranslator::GetStringForOptionsThatWouldAffectCompilation()
200 const { 180 const {
201 DCHECK(compiler_ != NULL); 181 DCHECK(compiler_ != NULL);
202
203 size_t resource_len = 0;
204 ShGetInfo(compiler_, SH_RESOURCES_STRING_LENGTH, &resource_len);
205 DCHECK(resource_len > 1);
206 scoped_ptr<char[]> resource_str(new char[resource_len]);
207
208 ShGetBuiltInResourcesString(compiler_, resource_len, resource_str.get());
209
210 return std::string(":CompileOptions:" + 182 return std::string(":CompileOptions:" +
211 base::IntToString(GetCompileOptions())) + 183 base::IntToString(GetCompileOptions())) +
212 std::string(resource_str.get()); 184 ShGetBuiltInResourcesString(compiler_);
213 } 185 }
214 186
215 void ShaderTranslator::AddDestructionObserver( 187 void ShaderTranslator::AddDestructionObserver(
216 DestructionObserver* observer) { 188 DestructionObserver* observer) {
217 destruction_observers_.AddObserver(observer); 189 destruction_observers_.AddObserver(observer);
218 } 190 }
219 191
220 void ShaderTranslator::RemoveDestructionObserver( 192 void ShaderTranslator::RemoveDestructionObserver(
221 DestructionObserver* observer) { 193 DestructionObserver* observer) {
222 destruction_observers_.RemoveObserver(observer); 194 destruction_observers_.RemoveObserver(observer);
223 } 195 }
224 196
225 ShaderTranslator::~ShaderTranslator() { 197 ShaderTranslator::~ShaderTranslator() {
226 FOR_EACH_OBSERVER(DestructionObserver, 198 FOR_EACH_OBSERVER(DestructionObserver,
227 destruction_observers_, 199 destruction_observers_,
228 OnDestruct(this)); 200 OnDestruct(this));
229 201
230 if (compiler_ != NULL) 202 if (compiler_ != NULL)
231 ShDestruct(compiler_); 203 ShDestruct(compiler_);
232 } 204 }
233 205
234 } // namespace gles2 206 } // namespace gles2
235 } // namespace gpu 207 } // namespace gpu
236 208
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/program_manager.cc ('k') | gpu/command_buffer/tests/gl_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698