Index: gpu/command_buffer/service/program_manager.cc |
diff --git a/gpu/command_buffer/service/program_manager.cc b/gpu/command_buffer/service/program_manager.cc |
index aef7e44976e7f70709ec78c1ca5e62e28d7f3b87..9187c882ac07d1afffbb4cf5196485dd6b42610a 100644 |
--- a/gpu/command_buffer/service/program_manager.cc |
+++ b/gpu/command_buffer/service/program_manager.cc |
@@ -211,7 +211,8 @@ Program::Program(ProgramManager* manager, GLuint service_id) |
valid_(false), |
link_status_(false), |
uniforms_cleared_(false), |
- num_uniforms_(0) { |
+ num_uniforms_(0), |
+ transform_feedback_buffer_mode_(GL_NONE) { |
manager_->StartTracking(this); |
} |
@@ -532,7 +533,9 @@ bool Program::Link(ShaderManager* manager, |
ProgramCache::LinkedProgramStatus status = cache->GetLinkedProgramStatus( |
attached_shaders_[0]->last_compiled_signature(), |
attached_shaders_[1]->last_compiled_signature(), |
- &bind_attrib_location_map_); |
+ &bind_attrib_location_map_, |
+ transform_feedback_varyings_, |
+ transform_feedback_buffer_mode_); |
if (status == ProgramCache::LINK_SUCCEEDED) { |
ProgramCache::ProgramLoadResult success = |
@@ -540,6 +543,8 @@ bool Program::Link(ShaderManager* manager, |
attached_shaders_[0].get(), |
attached_shaders_[1].get(), |
&bind_attrib_location_map_, |
+ transform_feedback_varyings_, |
+ transform_feedback_buffer_mode_, |
shader_callback); |
link = success != ProgramCache::PROGRAM_LOAD_SUCCESS; |
UMA_HISTOGRAM_BOOLEAN("GPU.ProgramCache.LoadBinarySuccess", !link); |
@@ -608,6 +613,8 @@ bool Program::Link(ShaderManager* manager, |
attached_shaders_[0].get(), |
attached_shaders_[1].get(), |
&bind_attrib_location_map_, |
+ transform_feedback_varyings_, |
+ transform_feedback_buffer_mode_, |
shader_callback); |
} |
UMA_HISTOGRAM_CUSTOM_COUNTS( |
@@ -1603,6 +1610,16 @@ bool Program::GetUniformsES3(CommonDecoder::Bucket* bucket) const { |
return true; |
} |
+void Program::TransformFeedbackVaryings(GLsizei count, |
+ const char* const* varyings, |
+ GLenum buffer_mode) { |
+ transform_feedback_varyings_.clear(); |
+ for (GLsizei i = 0; i < count; ++i) { |
+ transform_feedback_varyings_.push_back(std::string(varyings[i])); |
+ } |
+ transform_feedback_buffer_mode_ = buffer_mode; |
+} |
+ |
Program::~Program() { |
if (manager_) { |
if (manager_->have_context_) { |