#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"
}
}
-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();
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,
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()) {
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;
}
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] &&
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;
}
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) { }
DCHECK(program);
DCHECK(IsOwned(program));
program->IncUseCount();
- ClearUniforms(program);
}
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) {