Index: gpu/command_buffer/service/shader_translator.cc |
diff --git a/gpu/command_buffer/service/shader_translator.cc b/gpu/command_buffer/service/shader_translator.cc |
index bc06ab349fff441748642cd0929b91b80f59f7e8..0fdb4bc0b811ac7d68b64ba4342de66ff85e4950 100644 |
--- a/gpu/command_buffer/service/shader_translator.cc |
+++ b/gpu/command_buffer/service/shader_translator.cc |
@@ -14,9 +14,10 @@ |
#include "base/logging.h" |
#include "base/strings/string_number_conversions.h" |
-namespace { |
+namespace gpu { |
+namespace gles2 { |
-using gpu::gles2::ShaderTranslator; |
+namespace { |
class ShaderTranslatorInitializer { |
public: |
@@ -34,58 +35,40 @@ class ShaderTranslatorInitializer { |
base::LazyInstance<ShaderTranslatorInitializer> g_translator_initializer = |
LAZY_INSTANCE_INITIALIZER; |
-void GetVariableInfo(ShHandle compiler, ShShaderInfo var_type, |
- ShaderTranslator::VariableMap* var_map) { |
+void GetAttributes(ShHandle compiler, AttributeMap* var_map) { |
if (!var_map) |
return; |
var_map->clear(); |
+ const std::vector<sh::Attribute>* attribs = ShGetAttributes(compiler); |
+ if (attribs) { |
+ for (size_t ii = 0; ii < attribs->size(); ++ii) |
+ (*var_map)[(*attribs)[ii].mappedName] = (*attribs)[ii]; |
+ } |
+} |
- size_t name_len = 0, mapped_name_len = 0; |
- switch (var_type) { |
- case SH_ACTIVE_ATTRIBUTES: |
- ShGetInfo(compiler, SH_ACTIVE_ATTRIBUTE_MAX_LENGTH, &name_len); |
- break; |
- case SH_ACTIVE_UNIFORMS: |
- ShGetInfo(compiler, SH_ACTIVE_UNIFORM_MAX_LENGTH, &name_len); |
- break; |
- case SH_VARYINGS: |
- ShGetInfo(compiler, SH_VARYING_MAX_LENGTH, &name_len); |
- break; |
- default: NOTREACHED(); |
+void GetUniforms(ShHandle compiler, UniformMap* var_map) { |
+ if (!var_map) |
+ return; |
+ var_map->clear(); |
+ const std::vector<sh::Uniform>* uniforms = ShGetUniforms(compiler); |
+ if (uniforms) { |
+ for (size_t ii = 0; ii < uniforms->size(); ++ii) |
+ (*var_map)[(*uniforms)[ii].mappedName] = (*uniforms)[ii]; |
} |
- ShGetInfo(compiler, SH_MAPPED_NAME_MAX_LENGTH, &mapped_name_len); |
- if (name_len <= 1 || mapped_name_len <= 1) return; |
- scoped_ptr<char[]> name(new char[name_len]); |
- scoped_ptr<char[]> mapped_name(new char[mapped_name_len]); |
- |
- size_t num_vars = 0; |
- ShGetInfo(compiler, var_type, &num_vars); |
- for (size_t i = 0; i < num_vars; ++i) { |
- size_t len = 0; |
- int size = 0; |
- sh::GLenum type = GL_NONE; |
- ShPrecisionType precision = SH_PRECISION_UNDEFINED; |
- int static_use = 0; |
- |
- ShGetVariableInfo(compiler, var_type, i, |
- &len, &size, &type, &precision, &static_use, |
- name.get(), mapped_name.get()); |
- |
- // In theory we should CHECK(len <= name_len - 1) here, but ANGLE needs |
- // to handle long struct field name mapping before we can do this. |
- // Also, we should modify the ANGLE interface to also return a length |
- // for mapped_name. |
- std::string name_string(name.get(), std::min(len, name_len - 1)); |
- mapped_name.get()[mapped_name_len - 1] = '\0'; |
- |
- ShaderTranslator::VariableInfo info( |
- type, size, precision, static_use, name_string); |
- (*var_map)[mapped_name.get()] = info; |
+} |
+ |
+void GetVaryings(ShHandle compiler, VaryingMap* var_map) { |
+ if (!var_map) |
+ return; |
+ var_map->clear(); |
+ const std::vector<sh::Varying>* varyings = ShGetVaryings(compiler); |
+ if (varyings) { |
+ for (size_t ii = 0; ii < varyings->size(); ++ii) |
+ (*var_map)[(*varyings)[ii].mappedName] = (*varyings)[ii]; |
} |
} |
-void GetNameHashingInfo( |
- ShHandle compiler, ShaderTranslator::NameMap* name_map) { |
+void GetNameHashingInfo(ShHandle compiler, NameMap* name_map) { |
if (!name_map) |
return; |
name_map->clear(); |
@@ -110,9 +93,6 @@ void GetNameHashingInfo( |
} // namespace |
-namespace gpu { |
-namespace gles2 { |
- |
ShaderTranslator::DestructionObserver::DestructionObserver() { |
} |
@@ -167,9 +147,9 @@ int ShaderTranslator::GetCompileOptions() const { |
bool ShaderTranslator::Translate(const std::string& shader_source, |
std::string* info_log, |
std::string* translated_source, |
- VariableMap* attrib_map, |
- VariableMap* uniform_map, |
- VariableMap* varying_map, |
+ AttributeMap* attrib_map, |
+ UniformMap* uniform_map, |
+ VaryingMap* varying_map, |
NameMap* name_map) const { |
// Make sure this instance is initialized. |
DCHECK(compiler_ != NULL); |
@@ -194,9 +174,9 @@ bool ShaderTranslator::Translate(const std::string& shader_source, |
} |
} |
// Get info for attribs, uniforms, and varyings. |
- GetVariableInfo(compiler_, SH_ACTIVE_ATTRIBUTES, attrib_map); |
- GetVariableInfo(compiler_, SH_ACTIVE_UNIFORMS, uniform_map); |
- GetVariableInfo(compiler_, SH_VARYINGS, varying_map); |
+ GetAttributes(compiler_, attrib_map); |
+ GetUniforms(compiler_, uniform_map); |
+ GetVaryings(compiler_, varying_map); |
// Get info for name hashing. |
GetNameHashingInfo(compiler_, name_map); |
} |