| 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_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 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 79 &interface_block_map_, | 79 &interface_block_map_, |
| 80 &name_map_); | 80 &name_map_); |
| 81 if (!success) { | 81 if (!success) { |
| 82 return; | 82 return; |
| 83 } | 83 } |
| 84 source_for_driver = translated_source_.c_str(); | 84 source_for_driver = translated_source_.c_str(); |
| 85 } | 85 } |
| 86 | 86 |
| 87 glShaderSource(service_id_, 1, &source_for_driver, NULL); | 87 glShaderSource(service_id_, 1, &source_for_driver, NULL); |
| 88 glCompileShader(service_id_); | 88 glCompileShader(service_id_); |
| 89 |
| 89 if (source_type_ == kANGLE) { | 90 if (source_type_ == kANGLE) { |
| 90 GLint max_len = 0; | 91 RefreshTranslatedShaderSource(); |
| 91 glGetShaderiv(service_id_, | 92 source_for_driver = translated_source_.c_str(); |
| 92 GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE, | |
| 93 &max_len); | |
| 94 source_for_driver = "\0"; | |
| 95 translated_source_.resize(max_len); | |
| 96 if (max_len) { | |
| 97 GLint len = 0; | |
| 98 glGetTranslatedShaderSourceANGLE( | |
| 99 service_id_, translated_source_.size(), | |
| 100 &len, &translated_source_.at(0)); | |
| 101 DCHECK(max_len == 0 || len < max_len); | |
| 102 DCHECK(len == 0 || translated_source_[len] == '\0'); | |
| 103 translated_source_.resize(len); | |
| 104 source_for_driver = translated_source_.c_str(); | |
| 105 } | |
| 106 } | 93 } |
| 107 | 94 |
| 108 GLint status = GL_FALSE; | 95 GLint status = GL_FALSE; |
| 109 glGetShaderiv(service_id_, GL_COMPILE_STATUS, &status); | 96 glGetShaderiv(service_id_, GL_COMPILE_STATUS, &status); |
| 110 if (status == GL_TRUE) { | 97 if (status == GL_TRUE) { |
| 111 valid_ = true; | 98 valid_ = true; |
| 112 } else { | 99 } else { |
| 113 valid_ = false; | 100 valid_ = false; |
| 114 | 101 |
| 115 // We cannot reach here if we are using the shader translator. | 102 // We cannot reach here if we are using the shader translator. |
| (...skipping 15 matching lines...) Expand all Loading... |
| 131 LOG_IF(ERROR, translator) | 118 LOG_IF(ERROR, translator) |
| 132 << "Shader translator allowed/produced an invalid shader " | 119 << "Shader translator allowed/produced an invalid shader " |
| 133 << "unless the driver is buggy:" | 120 << "unless the driver is buggy:" |
| 134 << "\n--Log from shader translator--\n" << translator_log | 121 << "\n--Log from shader translator--\n" << translator_log |
| 135 << "\n--original-shader--\n" << last_compiled_source_ | 122 << "\n--original-shader--\n" << last_compiled_source_ |
| 136 << "\n--translated-shader--\n" << source_for_driver | 123 << "\n--translated-shader--\n" << source_for_driver |
| 137 << "\n--info-log--\n" << log_info_; | 124 << "\n--info-log--\n" << log_info_; |
| 138 } | 125 } |
| 139 } | 126 } |
| 140 | 127 |
| 128 void Shader::RefreshTranslatedShaderSource() { |
| 129 if (source_type_ == kANGLE) { |
| 130 GLint max_len = 0; |
| 131 glGetShaderiv(service_id_, GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE, |
| 132 &max_len); |
| 133 translated_source_.resize(max_len); |
| 134 if (max_len) { |
| 135 GLint len = 0; |
| 136 glGetTranslatedShaderSourceANGLE(service_id_, translated_source_.size(), |
| 137 &len, &translated_source_.at(0)); |
| 138 DCHECK(max_len == 0 || len < max_len); |
| 139 DCHECK(len == 0 || translated_source_[len] == '\0'); |
| 140 translated_source_.resize(len); |
| 141 } |
| 142 } |
| 143 } |
| 144 |
| 141 void Shader::IncUseCount() { | 145 void Shader::IncUseCount() { |
| 142 ++use_count_; | 146 ++use_count_; |
| 143 } | 147 } |
| 144 | 148 |
| 145 void Shader::DecUseCount() { | 149 void Shader::DecUseCount() { |
| 146 --use_count_; | 150 --use_count_; |
| 147 DCHECK_GE(use_count_, 0); | 151 DCHECK_GE(use_count_, 0); |
| 148 if (service_id_ && use_count_ == 0 && marked_for_deletion_) { | 152 if (service_id_ && use_count_ == 0 && marked_for_deletion_) { |
| 149 DeleteServiceID(); | 153 DeleteServiceID(); |
| 150 } | 154 } |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 330 | 334 |
| 331 void ShaderManager::UnuseShader(Shader* shader) { | 335 void ShaderManager::UnuseShader(Shader* shader) { |
| 332 DCHECK(shader); | 336 DCHECK(shader); |
| 333 DCHECK(IsOwned(shader)); | 337 DCHECK(IsOwned(shader)); |
| 334 shader->DecUseCount(); | 338 shader->DecUseCount(); |
| 335 RemoveShader(shader); | 339 RemoveShader(shader); |
| 336 } | 340 } |
| 337 | 341 |
| 338 } // namespace gles2 | 342 } // namespace gles2 |
| 339 } // namespace gpu | 343 } // namespace gpu |
| OLD | NEW |