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

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

Issue 1309743005: command_buffer: Implement EXT_blend_func_extended (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@new-05-path-fragment-input-gen
Patch Set: address review comments Created 5 years, 3 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"
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 // Signify the shader has been compiled, whether or not it is valid 62 // Signify the shader has been compiled, whether or not it is valid
63 // is dependent on the |valid_| member variable. 63 // is dependent on the |valid_| member variable.
64 shader_state_ = kShaderStateCompiled; 64 shader_state_ = kShaderStateCompiled;
65 valid_ = false; 65 valid_ = false;
66 66
67 // Translate GL ES 2.0 shader to Desktop GL shader and pass that to 67 // Translate GL ES 2.0 shader to Desktop GL shader and pass that to
68 // glShaderSource and then glCompileShader. 68 // glShaderSource and then glCompileShader.
69 const char* source_for_driver = last_compiled_source_.c_str(); 69 const char* source_for_driver = last_compiled_source_.c_str();
70 ShaderTranslatorInterface* translator = translator_.get(); 70 ShaderTranslatorInterface* translator = translator_.get();
71 if (translator) { 71 if (translator) {
72 bool success = translator->Translate(last_compiled_source_, 72 bool success = translator->Translate(
73 &log_info_, 73 last_compiled_source_, &log_info_, &translated_source_,
74 &translated_source_, 74 &shader_version_, &attrib_map_, &uniform_map_, &varying_map_,
75 &shader_version_, 75 &output_variable_list_, &name_map_);
76 &attrib_map_,
77 &uniform_map_,
78 &varying_map_,
79 &name_map_);
80 if (!success) { 76 if (!success) {
81 return; 77 return;
82 } 78 }
83 source_for_driver = translated_source_.c_str(); 79 source_for_driver = translated_source_.c_str();
84 } 80 }
85 81
86 glShaderSource(service_id_, 1, &source_for_driver, NULL); 82 glShaderSource(service_id_, 1, &source_for_driver, NULL);
87 glCompileShader(service_id_); 83 glCompileShader(service_id_);
88 if (source_type_ == kANGLE) { 84 if (source_type_ == kANGLE) {
89 GLint max_len = 0; 85 GLint max_len = 0;
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 if (it != name_map_.end()) 203 if (it != name_map_.end())
208 return &(it->second); 204 return &(it->second);
209 return NULL; 205 return NULL;
210 } 206 }
211 207
212 const sh::Uniform* Shader::GetUniformInfo(const std::string& name) const { 208 const sh::Uniform* Shader::GetUniformInfo(const std::string& name) const {
213 UniformMap::const_iterator it = uniform_map_.find(GetTopVariableName(name)); 209 UniformMap::const_iterator it = uniform_map_.find(GetTopVariableName(name));
214 return it != uniform_map_.end() ? &it->second : NULL; 210 return it != uniform_map_.end() ? &it->second : NULL;
215 } 211 }
216 212
217 const sh::Varying* Shader::GetVaryingInfo(const std::string& name) const { 213 const sh::Varying* Shader::GetInputVariableInfo(const std::string& name) const {
218 VaryingMap::const_iterator it = varying_map_.find(GetTopVariableName(name)); 214 VaryingMap::const_iterator it = varying_map_.find(GetTopVariableName(name));
219 return it != varying_map_.end() ? &it->second : NULL; 215 return it != varying_map_.end() ? &it->second : NULL;
220 } 216 }
221 217
218 const sh::OutputVariable* Shader::GetOutputVariableInfo(
219 const std::string& name) const {
220 std::string mappedName = GetTopVariableName(name);
221 // Number of output variables is expected to be so low that
222 // a linear search of a list should be faster than using a map.
223 auto iter =
224 std::find_if(output_variable_list_.begin(), output_variable_list_.end(),
225 [mappedName](const sh::OutputVariable& output_var) {
226 return output_var.mappedName == mappedName;
227 });
228 return iter != output_variable_list_.end() ? &(*iter) : nullptr;
229 }
230
222 ShaderManager::ShaderManager() {} 231 ShaderManager::ShaderManager() {}
223 232
224 ShaderManager::~ShaderManager() { 233 ShaderManager::~ShaderManager() {
225 DCHECK(shaders_.empty()); 234 DCHECK(shaders_.empty());
226 } 235 }
227 236
228 void ShaderManager::Destroy(bool have_context) { 237 void ShaderManager::Destroy(bool have_context) {
229 while (!shaders_.empty()) { 238 while (!shaders_.empty()) {
230 if (have_context) { 239 if (have_context) {
231 Shader* shader = shaders_.begin()->second.get(); 240 Shader* shader = shaders_.begin()->second.get();
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 313
305 void ShaderManager::UnuseShader(Shader* shader) { 314 void ShaderManager::UnuseShader(Shader* shader) {
306 DCHECK(shader); 315 DCHECK(shader);
307 DCHECK(IsOwned(shader)); 316 DCHECK(IsOwned(shader));
308 shader->DecUseCount(); 317 shader->DecUseCount();
309 RemoveShader(shader); 318 RemoveShader(shader);
310 } 319 }
311 320
312 } // namespace gles2 321 } // namespace gles2
313 } // namespace gpu 322 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698