Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / gpu / command_buffer / service / program_manager.cc
index 32b9140..8e0ff92 100644 (file)
@@ -18,7 +18,6 @@
 #include "base/time/time.h"
 #include "gpu/command_buffer/common/gles2_cmd_format.h"
 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
-#include "gpu/command_buffer/service/feature_info.h"
 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
 #include "gpu/command_buffer/service/gpu_switches.h"
 #include "gpu/command_buffer/service/program_cache.h"
@@ -461,9 +460,10 @@ void Program::ExecuteBindAttribLocationCalls() {
   }
 }
 
-void ProgramManager::DoCompileShader(Shader* shader,
-                                     ShaderTranslator* translator,
-                                     FeatureInfo* feature_info) {
+void ProgramManager::DoCompileShader(
+    Shader* shader,
+    ShaderTranslator* translator,
+    ProgramManager::TranslatedShaderSourceType translated_shader_source_type) {
   // Translate GL ES 2.0 shader to Desktop GL shader and pass that to
   // glShaderSource and then glCompileShader.
   const std::string* source = shader->source();
@@ -474,13 +474,13 @@ void ProgramManager::DoCompileShader(Shader* shader,
       return;
     }
     shader_src = translator->translated_shader();
-    if (!feature_info->feature_flags().angle_translated_shader_source)
+    if (translated_shader_source_type != kANGLE)
       shader->UpdateTranslatedSource(shader_src);
   }
 
   glShaderSource(shader->service_id(), 1, &shader_src, NULL);
   glCompileShader(shader->service_id());
-  if (feature_info->feature_flags().angle_translated_shader_source) {
+  if (translated_shader_source_type == kANGLE) {
     GLint max_len = 0;
     glGetShaderiv(shader->service_id(),
                   GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE,
@@ -522,7 +522,7 @@ void ProgramManager::DoCompileShader(Shader* shader,
 bool Program::Link(ShaderManager* manager,
                    ShaderTranslator* vertex_translator,
                    ShaderTranslator* fragment_translator,
-                   FeatureInfo* feature_info,
+                   Program::VaryingsPackingOption varyings_packing_option,
                    const ShaderCacheCallback& shader_callback) {
   ClearLinkStatus();
   if (!CanLink()) {
@@ -553,7 +553,7 @@ bool Program::Link(ShaderManager* manager,
     set_log_info(ProcessLogInfo(info_log).c_str());
     return false;
   }
-  if (!CheckVaryingsPacking()) {
+  if (!CheckVaryingsPacking(varyings_packing_option)) {
     set_log_info("Varyings over maximum register limit");
     return false;
   }
@@ -1098,7 +1098,8 @@ bool Program::DetectGlobalNameConflicts(std::string* conflicting_name) const {
   return false;
 }
 
-bool Program::CheckVaryingsPacking() const {
+bool Program::CheckVaryingsPacking(
+    Program::VaryingsPackingOption option) const {
   DCHECK(attached_shaders_[0] &&
          attached_shaders_[0]->shader_type() == GL_VERTEX_SHADER &&
          attached_shaders_[1] &&
@@ -1113,13 +1114,14 @@ bool Program::CheckVaryingsPacking() const {
   for (ShaderTranslator::VariableMap::const_iterator iter =
            fragment_varyings->begin();
        iter != fragment_varyings->end(); ++iter) {
-    if (!iter->second.static_use)
+    if (!iter->second.static_use && option == kCountOnlyStaticallyUsed)
       continue;
     if (!IsBuiltInVarying(iter->first)) {
       ShaderTranslator::VariableMap::const_iterator vertex_iter =
           vertex_varyings->find(iter->first);
       if (vertex_iter == vertex_varyings->end() ||
-          !vertex_iter->second.static_use)
+          (!vertex_iter->second.static_use &&
+           option == kCountOnlyStaticallyUsed))
         continue;
     }
 
@@ -1251,9 +1253,6 @@ ProgramManager::ProgramManager(ProgramCache* program_cache,
                                uint32 max_varying_vectors)
     : program_count_(0),
       have_context_(true),
-      disable_workarounds_(
-          CommandLine::ForCurrentProcess()->HasSwitch(
-              switches::kDisableGpuDriverBugWorkarounds)),
       program_cache_(program_cache),
       max_varying_vectors_(max_varying_vectors) { }
 
@@ -1348,7 +1347,6 @@ void ProgramManager::UseProgram(Program* program) {
   DCHECK(program);
   DCHECK(IsOwned(program));
   program->IncUseCount();
-  ClearUniforms(program);
 }
 
 void ProgramManager::UnuseProgram(
@@ -1363,9 +1361,7 @@ void ProgramManager::UnuseProgram(
 
 void ProgramManager::ClearUniforms(Program* program) {
   DCHECK(program);
-  if (!disable_workarounds_) {
-    program->ClearUniforms(&zero_);
-  }
+  program->ClearUniforms(&zero_);
 }
 
 int32 ProgramManager::MakeFakeLocation(int32 index, int32 element) {