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 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 source_for_driver = translated_source_.c_str(); | 74 source_for_driver = translated_source_.c_str(); |
75 } | 75 } |
76 | 76 |
77 glShaderSource(service_id_, 1, &source_for_driver, NULL); | 77 glShaderSource(service_id_, 1, &source_for_driver, NULL); |
78 glCompileShader(service_id_); | 78 glCompileShader(service_id_); |
79 if (source_type_ == kANGLE) { | 79 if (source_type_ == kANGLE) { |
80 GLint max_len = 0; | 80 GLint max_len = 0; |
81 glGetShaderiv(service_id_, | 81 glGetShaderiv(service_id_, |
82 GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE, | 82 GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE, |
83 &max_len); | 83 &max_len); |
| 84 source_for_driver = "\0"; |
84 translated_source_.resize(max_len); | 85 translated_source_.resize(max_len); |
85 GLint len = 0; | 86 if (max_len) { |
86 glGetTranslatedShaderSourceANGLE( | 87 GLint len = 0; |
87 service_id_, translated_source_.size(), | 88 glGetTranslatedShaderSourceANGLE( |
88 &len, &translated_source_.at(0)); | 89 service_id_, translated_source_.size(), |
89 DCHECK(max_len == 0 || len < max_len); | 90 &len, &translated_source_.at(0)); |
90 DCHECK(len == 0 || translated_source_[len] == '\0'); | 91 DCHECK(max_len == 0 || len < max_len); |
91 translated_source_.resize(len); | 92 DCHECK(len == 0 || translated_source_[len] == '\0'); |
92 source_for_driver = translated_source_.c_str(); | 93 translated_source_.resize(len); |
| 94 source_for_driver = translated_source_.c_str(); |
| 95 } |
93 } | 96 } |
94 | 97 |
95 GLint status = GL_FALSE; | 98 GLint status = GL_FALSE; |
96 glGetShaderiv(service_id_, GL_COMPILE_STATUS, &status); | 99 glGetShaderiv(service_id_, GL_COMPILE_STATUS, &status); |
97 if (status == GL_TRUE) { | 100 if (status == GL_TRUE) { |
98 valid_ = true; | 101 valid_ = true; |
99 } else { | 102 } else { |
| 103 valid_ = false; |
| 104 |
100 // We cannot reach here if we are using the shader translator. | 105 // We cannot reach here if we are using the shader translator. |
101 // All invalid shaders must be rejected by the translator. | 106 // All invalid shaders must be rejected by the translator. |
102 // All translated shaders must compile. | 107 // All translated shaders must compile. |
103 GLint max_len = 0; | 108 GLint max_len = 0; |
104 glGetShaderiv(service_id_, GL_INFO_LOG_LENGTH, &max_len); | 109 glGetShaderiv(service_id_, GL_INFO_LOG_LENGTH, &max_len); |
105 log_info_.resize(max_len); | 110 log_info_.resize(max_len); |
106 GLint len = 0; | 111 if (max_len) { |
107 glGetShaderInfoLog(service_id_, log_info_.size(), &len, &log_info_.at(0)); | 112 GLint len = 0; |
108 DCHECK(max_len == 0 || len < max_len); | 113 glGetShaderInfoLog(service_id_, log_info_.size(), &len, &log_info_.at(0)); |
109 DCHECK(len == 0 || log_info_[len] == '\0'); | 114 DCHECK(max_len == 0 || len < max_len); |
110 valid_ = false; | 115 DCHECK(len == 0 || log_info_[len] == '\0'); |
111 log_info_.resize(len); | 116 log_info_.resize(len); |
| 117 } |
112 LOG_IF(ERROR, translator) | 118 LOG_IF(ERROR, translator) |
113 << "Shader translator allowed/produced an invalid shader " | 119 << "Shader translator allowed/produced an invalid shader " |
114 << "unless the driver is buggy:" | 120 << "unless the driver is buggy:" |
115 << "\n--original-shader--\n" << last_compiled_source_ | 121 << "\n--original-shader--\n" << last_compiled_source_ |
116 << "\n--translated-shader--\n" << source_for_driver | 122 << "\n--translated-shader--\n" << source_for_driver |
117 << "\n--info-log--\n" << log_info_; | 123 << "\n--info-log--\n" << log_info_; |
118 } | 124 } |
119 } | 125 } |
120 | 126 |
121 void Shader::IncUseCount() { | 127 void Shader::IncUseCount() { |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
258 DCHECK(shader); | 264 DCHECK(shader); |
259 DCHECK(IsOwned(shader)); | 265 DCHECK(IsOwned(shader)); |
260 shader->DecUseCount(); | 266 shader->DecUseCount(); |
261 RemoveShader(shader); | 267 RemoveShader(shader); |
262 } | 268 } |
263 | 269 |
264 } // namespace gles2 | 270 } // namespace gles2 |
265 } // namespace gpu | 271 } // namespace gpu |
266 | 272 |
267 | 273 |
OLD | NEW |