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

Unified Diff: gpu/command_buffer/service/shader_manager.cc

Issue 903273002: Update from https://crrev.com/315085 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gpu/command_buffer/service/shader_manager.h ('k') | gpu/command_buffer/service/shader_manager_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gpu/command_buffer/service/shader_manager.cc
diff --git a/gpu/command_buffer/service/shader_manager.cc b/gpu/command_buffer/service/shader_manager.cc
index 2707b90b92de4105d6b8c9f1dad28a0663158f0e..90b15760a5e8438a275047e8993e215905ffff5a 100644
--- a/gpu/command_buffer/service/shader_manager.cc
+++ b/gpu/command_buffer/service/shader_manager.cc
@@ -26,6 +26,7 @@ std::string GetTopVariableName(const std::string& fullname) {
Shader::Shader(GLuint service_id, GLenum shader_type)
: use_count_(0),
+ shader_state_(kShaderStateWaiting),
service_id_(service_id),
shader_type_(shader_type),
valid_(false) {
@@ -34,13 +35,28 @@ Shader::Shader(GLuint service_id, GLenum shader_type)
Shader::~Shader() {
}
+void Shader::RequestCompile() {
+ shader_state_ = kShaderStateCompileRequested;
+ last_compiled_source_ = source_;
+}
+
void Shader::DoCompile(ShaderTranslatorInterface* translator,
TranslatedShaderSourceType type) {
+ // We require that RequestCompile() must be called before DoCompile(),
+ // so we can return early if the shader state is not what we expect.
+ if (shader_state_ != kShaderStateCompileRequested) {
+ return;
+ }
+
+ // Signify the shader has been compiled, whether or not it is valid
+ // is dependent on the |valid_| member variable.
+ shader_state_ = kShaderStateCompiled;
+
// Translate GL ES 2.0 shader to Desktop GL shader and pass that to
// glShaderSource and then glCompileShader.
- const char* source_for_driver = source_.c_str();
+ const char* source_for_driver = last_compiled_source_.c_str();
if (translator) {
- valid_ = translator->Translate(source_,
+ valid_ = translator->Translate(last_compiled_source_,
&log_info_,
&translated_source_,
&attrib_map_,
@@ -50,7 +66,6 @@ void Shader::DoCompile(ShaderTranslatorInterface* translator,
if (!valid_) {
return;
}
- signature_source_ = source_;
source_for_driver = translated_source_.c_str();
}
@@ -61,13 +76,14 @@ void Shader::DoCompile(ShaderTranslatorInterface* translator,
glGetShaderiv(service_id_,
GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE,
&max_len);
- scoped_ptr<char[]> buffer(new char[max_len]);
+ translated_source_.resize(max_len);
GLint len = 0;
glGetTranslatedShaderSourceANGLE(
- service_id_, max_len, &len, buffer.get());
+ service_id_, translated_source_.size(),
+ &len, &translated_source_.at(0));
DCHECK(max_len == 0 || len < max_len);
- DCHECK(len == 0 || buffer[len] == '\0');
- translated_source_ = std::string(buffer.get(), len);
+ DCHECK(len == 0 || translated_source_[len] == '\0');
+ translated_source_.resize(len);
}
GLint status = GL_FALSE;
@@ -78,17 +94,17 @@ void Shader::DoCompile(ShaderTranslatorInterface* translator,
// All translated shaders must compile.
GLint max_len = 0;
glGetShaderiv(service_id_, GL_INFO_LOG_LENGTH, &max_len);
- scoped_ptr<char[]> buffer(new char[max_len]);
+ log_info_.resize(max_len);
GLint len = 0;
- glGetShaderInfoLog(service_id_, max_len, &len, buffer.get());
+ glGetShaderInfoLog(service_id_, log_info_.size(), &len, &log_info_.at(0));
DCHECK(max_len == 0 || len < max_len);
- DCHECK(len == 0 || buffer[len] == '\0');
+ DCHECK(len == 0 || log_info_[len] == '\0');
valid_ = false;
- log_info_ = std::string(buffer.get(), len);
+ log_info_.resize(len);
LOG_IF(ERROR, translator)
<< "Shader translator allowed/produced an invalid shader "
<< "unless the driver is buggy:"
- << "\n--original-shader--\n" << source_
+ << "\n--original-shader--\n" << last_compiled_source_
<< "\n--translated-shader--\n" << source_for_driver
<< "\n--info-log--\n" << log_info_;
}
« no previous file with comments | « gpu/command_buffer/service/shader_manager.h ('k') | gpu/command_buffer/service/shader_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698