| OLD | NEW |
| 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 <GLES2/gl2.h> | 7 #include <GLES2/gl2.h> |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <string.h> | 9 #include <string.h> |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 var_map->clear(); | 83 var_map->clear(); |
| 84 const std::vector<sh::InterfaceBlock>* interface_blocks = | 84 const std::vector<sh::InterfaceBlock>* interface_blocks = |
| 85 sh::GetInterfaceBlocks(compiler); | 85 sh::GetInterfaceBlocks(compiler); |
| 86 if (interface_blocks) { | 86 if (interface_blocks) { |
| 87 for (const auto& block : *interface_blocks) { | 87 for (const auto& block : *interface_blocks) { |
| 88 (*var_map)[block.mappedName] = block; | 88 (*var_map)[block.mappedName] = block; |
| 89 } | 89 } |
| 90 } | 90 } |
| 91 } | 91 } |
| 92 | 92 |
| 93 void GetNameHashingInfo(ShHandle compiler, NameMap* name_map) { | |
| 94 if (!name_map) | |
| 95 return; | |
| 96 name_map->clear(); | |
| 97 | |
| 98 typedef std::map<std::string, std::string> NameMapANGLE; | |
| 99 const NameMapANGLE* angle_map = sh::GetNameHashingMap(compiler); | |
| 100 DCHECK(angle_map); | |
| 101 | |
| 102 for (NameMapANGLE::const_iterator iter = angle_map->begin(); | |
| 103 iter != angle_map->end(); ++iter) { | |
| 104 // Note that in ANGLE, the map is (original_name, hash); | |
| 105 // here, we want (hash, original_name). | |
| 106 (*name_map)[iter->second] = iter->first; | |
| 107 } | |
| 108 } | |
| 109 | |
| 110 } // namespace | 93 } // namespace |
| 111 | 94 |
| 112 ShShaderOutput ShaderTranslator::GetShaderOutputLanguageForContext( | 95 ShShaderOutput ShaderTranslator::GetShaderOutputLanguageForContext( |
| 113 const gl::GLVersionInfo& version_info) { | 96 const gl::GLVersionInfo& version_info) { |
| 114 if (version_info.is_es) { | 97 if (version_info.is_es) { |
| 115 return SH_ESSL_OUTPUT; | 98 return SH_ESSL_OUTPUT; |
| 116 } | 99 } |
| 117 | 100 |
| 118 // Determine the GLSL version based on OpenGL specification. | 101 // Determine the GLSL version based on OpenGL specification. |
| 119 | 102 |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 202 break; | 185 break; |
| 203 } | 186 } |
| 204 | 187 |
| 205 return compiler_ != NULL; | 188 return compiler_ != NULL; |
| 206 } | 189 } |
| 207 | 190 |
| 208 ShCompileOptions ShaderTranslator::GetCompileOptions() const { | 191 ShCompileOptions ShaderTranslator::GetCompileOptions() const { |
| 209 return compile_options_; | 192 return compile_options_; |
| 210 } | 193 } |
| 211 | 194 |
| 212 bool ShaderTranslator::Translate(const std::string& shader_source, | 195 bool ShaderTranslator::Translate( |
| 213 std::string* info_log, | 196 const std::string& shader_source, |
| 214 std::string* translated_source, | 197 std::string* info_log, |
| 215 int* shader_version, | 198 std::string* translated_source, |
| 216 AttributeMap* attrib_map, | 199 int* shader_version, |
| 217 UniformMap* uniform_map, | 200 AttributeMap* attrib_map, |
| 218 VaryingMap* varying_map, | 201 UniformMap* uniform_map, |
| 219 InterfaceBlockMap* interface_block_map, | 202 VaryingMap* varying_map, |
| 220 OutputVariableList* output_variable_list, | 203 InterfaceBlockMap* interface_block_map, |
| 221 NameMap* name_map) const { | 204 OutputVariableList* output_variable_list) const { |
| 222 // Make sure this instance is initialized. | 205 // Make sure this instance is initialized. |
| 223 DCHECK(compiler_ != NULL); | 206 DCHECK(compiler_ != NULL); |
| 224 | 207 |
| 225 bool success = false; | 208 bool success = false; |
| 226 { | 209 { |
| 227 TRACE_EVENT0("gpu", "ShCompile"); | 210 TRACE_EVENT0("gpu", "ShCompile"); |
| 228 const char* const shader_strings[] = { shader_source.c_str() }; | 211 const char* const shader_strings[] = { shader_source.c_str() }; |
| 229 success = sh::Compile(compiler_, shader_strings, 1, GetCompileOptions()); | 212 success = sh::Compile(compiler_, shader_strings, 1, GetCompileOptions()); |
| 230 } | 213 } |
| 231 if (success) { | 214 if (success) { |
| 232 // Get translated shader. | 215 // Get translated shader. |
| 233 if (translated_source) { | 216 if (translated_source) { |
| 234 *translated_source = sh::GetObjectCode(compiler_); | 217 *translated_source = sh::GetObjectCode(compiler_); |
| 235 } | 218 } |
| 236 // Get shader version. | 219 // Get shader version. |
| 237 *shader_version = sh::GetShaderVersion(compiler_); | 220 *shader_version = sh::GetShaderVersion(compiler_); |
| 238 // Get info for attribs, uniforms, varyings and output variables. | 221 // Get info for attribs, uniforms, varyings and output variables. |
| 239 GetAttributes(compiler_, attrib_map); | 222 GetAttributes(compiler_, attrib_map); |
| 240 GetUniforms(compiler_, uniform_map); | 223 GetUniforms(compiler_, uniform_map); |
| 241 GetVaryings(compiler_, varying_map); | 224 GetVaryings(compiler_, varying_map); |
| 242 GetInterfaceBlocks(compiler_, interface_block_map); | 225 GetInterfaceBlocks(compiler_, interface_block_map); |
| 243 GetOutputVariables(compiler_, output_variable_list); | 226 GetOutputVariables(compiler_, output_variable_list); |
| 244 // Get info for name hashing. | |
| 245 GetNameHashingInfo(compiler_, name_map); | |
| 246 } | 227 } |
| 247 | 228 |
| 248 // Get info log. | 229 // Get info log. |
| 249 if (info_log) { | 230 if (info_log) { |
| 250 *info_log = sh::GetInfoLog(compiler_); | 231 *info_log = sh::GetInfoLog(compiler_); |
| 251 } | 232 } |
| 252 | 233 |
| 253 // We don't need results in the compiler anymore. | 234 // We don't need results in the compiler anymore. |
| 254 sh::ClearResults(compiler_); | 235 sh::ClearResults(compiler_); |
| 255 | 236 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 278 for (auto& observer : destruction_observers_) | 259 for (auto& observer : destruction_observers_) |
| 279 observer.OnDestruct(this); | 260 observer.OnDestruct(this); |
| 280 | 261 |
| 281 if (compiler_ != NULL) | 262 if (compiler_ != NULL) |
| 282 sh::Destruct(compiler_); | 263 sh::Destruct(compiler_); |
| 283 } | 264 } |
| 284 | 265 |
| 285 } // namespace gles2 | 266 } // namespace gles2 |
| 286 } // namespace gpu | 267 } // namespace gpu |
| 287 | 268 |
| OLD | NEW |