 Chromium Code Reviews
 Chromium Code Reviews Issue 2852923004:
  Remove NameMap from shader translator and shader/program managers  (Closed)
    
  
    Issue 2852923004:
  Remove NameMap from shader translator and shader/program managers  (Closed) 
  | Index: gpu/command_buffer/service/program_manager.cc | 
| diff --git a/gpu/command_buffer/service/program_manager.cc b/gpu/command_buffer/service/program_manager.cc | 
| index f8dcbc197a9a5113feda4e464e7572495238e9bb..db0a4b4db321d2f6ff469b2b4bd6078cdeab60b2 100644 | 
| --- a/gpu/command_buffer/service/program_manager.cc | 
| +++ b/gpu/command_buffer/service/program_manager.cc | 
| @@ -1544,6 +1544,9 @@ const std::string* Program::GetUniformMappedName( | 
| const std::string* Program::GetOriginalNameFromHashedName( | 
| const std::string& hashed_name) const { | 
| + // TODO(kainino): Might not work on cache load, since name_map doesn't seem | 
| + // to be loaded from cache. In GetUniformBlocks, GetInterfaceBlockInfo is | 
| + // used instead. | 
| 
Ken Russell (switch to Gerrit)
2017/05/01 23:02:30
Please refer to crbug.com/716018 at the end of thi
 
Kai Ninomiya
2017/05/02 00:06:13
Acknowledged.
 | 
| for (auto shader : attached_shaders_) { | 
| if (shader) { | 
| const std::string* original_name = | 
| @@ -1555,6 +1558,19 @@ const std::string* Program::GetOriginalNameFromHashedName( | 
| return nullptr; | 
| } | 
| +const sh::InterfaceBlock* Program::GetInterfaceBlockInfo( | 
| + const std::string& hashed_name) const { | 
| + for (auto shader : attached_shaders_) { | 
| + if (shader) { | 
| + const sh::InterfaceBlock* info = | 
| + shader->GetInterfaceBlockInfo(hashed_name); | 
| + if (info) | 
| + return info; | 
| + } | 
| + } | 
| + return nullptr; | 
| +} | 
| + | 
| const Program::FragmentInputInfo* Program::GetFragmentInputInfoByFakeLocation( | 
| GLint fake_location) const { | 
| if (fake_location < 0) | 
| @@ -2231,16 +2247,16 @@ bool Program::GetUniformBlocks(CommonDecoder::Bucket* bucket) const { | 
| names[ii] = std::string(&buffer[0], length); | 
| // TODO(zmo): optimize the name mapping lookup. | 
| size_t pos = names[ii].find_first_of('['); | 
| - const std::string* original_name; | 
| + const sh::InterfaceBlock* interface_block = nullptr; | 
| std::string array_index_str = ""; | 
| if (pos != std::string::npos) { | 
| - original_name = GetOriginalNameFromHashedName(names[ii].substr(0, pos)); | 
| + interface_block = GetInterfaceBlockInfo(names[ii].substr(0, pos)); | 
| array_index_str = names[ii].substr(pos); | 
| } else { | 
| - original_name = GetOriginalNameFromHashedName(names[ii]); | 
| + interface_block = GetInterfaceBlockInfo(names[ii]); | 
| } | 
| - if (original_name) | 
| - names[ii] = *original_name + array_index_str; | 
| + if (interface_block) | 
| + names[ii] = interface_block->name + array_index_str; | 
| blocks[ii].name_length = names[ii].size() + 1; | 
| size += blocks[ii].name_length; |