Chromium Code Reviews| 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 ac7021ad7f752a2ecd4bf312378e6df77f5f2416..cd1b74a141acbd080634223f1648d23127a0d5b8 100644 |
| --- a/gpu/command_buffer/service/program_manager.cc |
| +++ b/gpu/command_buffer/service/program_manager.cc |
| @@ -193,8 +193,7 @@ bool ProgramManager::IsInvalidPrefix(const char* name, size_t length) { |
| memcmp(name, kInvalidPrefix, sizeof(kInvalidPrefix)) == 0); |
| } |
| -Program::Program( |
| - ProgramManager* manager, GLuint service_id) |
| +Program::Program(ProgramManager* manager, GLuint service_id) |
| : manager_(manager), |
| use_count_(0), |
| max_attrib_name_length_(0), |
| @@ -204,6 +203,7 @@ Program::Program( |
| valid_(false), |
| link_status_(false), |
| uniforms_cleared_(false), |
| + needs_update_subscriptions_(true), |
| num_uniforms_(0) { |
| manager_->StartTracking(this); |
| } |
| @@ -211,6 +211,7 @@ Program::Program( |
| void Program::Reset() { |
| valid_ = false; |
| link_status_ = false; |
| + needs_update_subscriptions_ = true; |
| num_uniforms_ = 0; |
| max_uniform_name_length_ = 0; |
| max_attrib_name_length_ = 0; |
| @@ -635,6 +636,10 @@ void Program::Validate() { |
| UpdateLogInfo(); |
| } |
| +void Program::SetNeedsUpdateSubscriptions() { |
| + needs_update_subscriptions_ = true; |
|
piman
2014/10/23 02:30:48
When will that be reset to false? In GLES2DecoderI
|
| +} |
| + |
| GLint Program::GetUniformFakeLocation( |
| const std::string& name) const { |
| bool getting_array_location = false; |
| @@ -1198,6 +1203,14 @@ bool Program::CheckVaryingsPacking( |
| combined_map.size()) == 1; |
| } |
| +void Program::AddSubscription(GLint location, GLenum target) { |
| + subscription_map_[location] = target; |
| +} |
| + |
| +void Program::RemoveSubscription(GLint location) { |
| + subscription_map_.erase(location); |
| +} |
| + |
| static uint32 ComputeOffset(const void* start, const void* position) { |
| return static_cast<const uint8*>(position) - |
| static_cast<const uint8*>(start); |
| @@ -1364,6 +1377,15 @@ bool ProgramManager::IsOwned(Program* program) { |
| return false; |
| } |
| +void ProgramManager::ActivateUniformSubscriptionState() { |
|
brianderson
2014/10/24 00:28:34
It looks like ProgramManager has a 1:1 relationshi
|
| + // TODO(orglofch): Make active_state = pending_state |
| + // only set needs update subscriptions if !pending_state.empty() |
| + for (ProgramMap::iterator it = programs_.begin(); it != programs_.end(); |
| + ++it) { |
|
piman
2014/10/23 02:30:48
Maybe make it a TODO, but it would be nice not to
|
| + it->second.get()->SetNeedsUpdateSubscriptions(); |
| + } |
| +} |
| + |
| void ProgramManager::RemoveProgramInfoIfUnused( |
| ShaderManager* shader_manager, Program* program) { |
| DCHECK(shader_manager); |
| @@ -1417,5 +1439,15 @@ int32 ProgramManager::MakeFakeLocation(int32 index, int32 element) { |
| return index + element * 0x10000; |
| } |
| +Program::UniformApiType ProgramManager::ApiTypeForSubscriptionTarget( |
| + GLenum target) { |
| + switch (target) { |
| + case GL_MOUSE_POSITION_CHROMIUM: |
| + return Program::kUniform2i; |
| + } |
| + NOTREACHED() << "Unhandled uniform subscription target " << target; |
| + return Program::kUniformNone; |
| +} |
| + |
| } // namespace gles2 |
| } // namespace gpu |