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 |