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

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

Issue 10795037: Revert 147328 - Current status of patch: (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 5 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/gl_utils.h ('k') | gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gpu/command_buffer/service/gles2_cmd_decoder.cc
===================================================================
--- gpu/command_buffer/service/gles2_cmd_decoder.cc (revision 147496)
+++ gpu/command_buffer/service/gles2_cmd_decoder.cc (working copy)
@@ -38,7 +38,6 @@
#include "gpu/command_buffer/service/gles2_cmd_validation.h"
#include "gpu/command_buffer/service/gpu_switches.h"
#include "gpu/command_buffer/service/mailbox_manager.h"
-#include "gpu/command_buffer/service/program_cache.h"
#include "gpu/command_buffer/service/program_manager.h"
#include "gpu/command_buffer/service/query_manager.h"
#include "gpu/command_buffer/service/renderbuffer_manager.h"
@@ -4720,16 +4719,7 @@
return;
}
- ShaderTranslator* vertex_translator = NULL;
- ShaderTranslator* fragment_translator = NULL;
- if (use_shader_translator_) {
- vertex_translator = vertex_translator_;
- fragment_translator = fragment_translator_;
- }
- if (info->Link(shader_manager(),
- vertex_translator,
- fragment_translator,
- feature_info_)) {
+ if (info->Link()) {
if (info == current_program_.get()) {
program_manager()->ClearUniforms(info);
}
@@ -5816,13 +5806,58 @@
if (!info) {
return;
}
+ // Translate GL ES 2.0 shader to Desktop GL shader and pass that to
+ // glShaderSource and then glCompileShader.
+ const char* shader_src = info->source() ? info->source()->c_str() : "";
ShaderTranslator* translator = NULL;
if (use_shader_translator_) {
translator = info->shader_type() == GL_VERTEX_SHADER ?
vertex_translator_.get() : fragment_translator_.get();
+
+ if (!translator->Translate(shader_src)) {
+ info->SetStatus(false, translator->info_log(), NULL);
+ return;
+ }
+ shader_src = translator->translated_shader();
+ if (!feature_info_->feature_flags().angle_translated_shader_source)
+ info->UpdateTranslatedSource(shader_src);
}
- program_manager()->DoCompileShader(info, translator, feature_info_);
+ glShaderSource(info->service_id(), 1, &shader_src, NULL);
+ glCompileShader(info->service_id());
+ if (feature_info_->feature_flags().angle_translated_shader_source) {
+ GLint max_len = 0;
+ glGetShaderiv(info->service_id(),
+ GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE,
+ &max_len);
+ scoped_array<char> temp(new char[max_len]);
+ GLint len = 0;
+ glGetTranslatedShaderSourceANGLE(
+ info->service_id(), max_len, &len, temp.get());
+ DCHECK(max_len == 0 || len < max_len);
+ DCHECK(len == 0 || temp[len] == '\0');
+ info->UpdateTranslatedSource(temp.get());
+ }
+
+ GLint status = GL_FALSE;
+ glGetShaderiv(info->service_id(), GL_COMPILE_STATUS, &status);
+ if (status) {
+ info->SetStatus(true, "", translator);
+ } else {
+ // We cannot reach here if we are using the shader translator.
+ // All invalid shaders must be rejected by the translator.
+ // All translated shaders must compile.
+ LOG_IF(ERROR, use_shader_translator_)
+ << "Shader translator allowed/produced an invalid shader.";
+ GLint max_len = 0;
+ glGetShaderiv(info->service_id(), GL_INFO_LOG_LENGTH, &max_len);
+ scoped_array<char> temp(new char[max_len]);
+ GLint len = 0;
+ glGetShaderInfoLog(info->service_id(), max_len, &len, temp.get());
+ DCHECK(max_len == 0 || len < max_len);
+ DCHECK(len == 0 || temp[len] == '\0');
+ info->SetStatus(false, std::string(temp.get(), len).c_str(), NULL);
+ }
};
void GLES2DecoderImpl::DoGetShaderiv(
« no previous file with comments | « gpu/command_buffer/service/gl_utils.h ('k') | gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698