Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(355)

Unified Diff: gpu/command_buffer/service/program_manager.h

Issue 659903002: Add subscribeUniform extension pipeline (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: piman@ review + merge uniform_subscription_manager with program_manager Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: gpu/command_buffer/service/program_manager.h
diff --git a/gpu/command_buffer/service/program_manager.h b/gpu/command_buffer/service/program_manager.h
index dbe9c14fa2695770aa1925a14297187507d567ce..af65aea545220316ea5189be0d748a92e6db21ba 100644
--- a/gpu/command_buffer/service/program_manager.h
+++ b/gpu/command_buffer/service/program_manager.h
@@ -39,6 +39,7 @@ class GPU_EXPORT Program : public base::RefCounted<Program> {
};
enum UniformApiType {
+ kUniformNone = 0,
kUniform1i = 1 << 0,
kUniform2i = 1 << 1,
kUniform3i = 1 << 2,
@@ -95,6 +96,7 @@ class GPU_EXPORT Program : public base::RefCounted<Program> {
typedef std::vector<VertexAttrib> AttribInfoVector;
typedef std::vector<int> SamplerIndices;
typedef std::map<std::string, GLint> LocationMap;
+ typedef base::hash_map<GLint, GLenum> SubscriptionMap;
Program(ProgramManager* manager, GLuint service_id);
@@ -191,6 +193,11 @@ class GPU_EXPORT Program : public base::RefCounted<Program> {
return use_count_ != 0;
}
+ void SetNeedsUpdateSubscriptions();
+ bool needs_update_subscriptions() const {
+ return needs_update_subscriptions_;
+ }
+
// Sets attribute-location binding from a glBindAttribLocation() call.
void SetAttribLocationBinding(const std::string& attrib, GLint location) {
bind_attrib_location_map_[attrib] = location;
@@ -226,11 +233,18 @@ class GPU_EXPORT Program : public base::RefCounted<Program> {
// varying registers.
bool CheckVaryingsPacking(VaryingsPackingOption option) const;
+ // Subscribe uniform |location| to |target|
+ void AddSubscription(GLint location, GLenum target);
+ // Unsubscribes uniform |location| for any targets
+ void RemoveSubscription(GLint location);
+
// Visible for testing
const LocationMap& bind_attrib_location_map() const {
return bind_attrib_location_map_;
}
+ const SubscriptionMap& subscription_map() const { return subscription_map_; }
+
private:
friend class base::RefCounted<Program>;
friend class ProgramManager;
@@ -348,6 +362,9 @@ class GPU_EXPORT Program : public base::RefCounted<Program> {
// True if the uniforms have been cleared.
bool uniforms_cleared_;
+ // True if one or more subscription uniforms are out of date
+ bool needs_update_subscriptions_;
+
// This is different than uniform_infos_.size() because
// that is a sparce array.
GLint num_uniforms_;
@@ -360,6 +377,8 @@ class GPU_EXPORT Program : public base::RefCounted<Program> {
// uniform-location binding map from glBindUniformLocationCHROMIUM() calls.
LocationMap bind_uniform_location_map_;
+
+ SubscriptionMap subscription_map_;
};
// Tracks the Programs.
@@ -405,8 +424,13 @@ class GPU_EXPORT ProgramManager {
// Check if a Program is owned by this ProgramManager.
bool IsOwned(Program* program);
+ // Update the active_state of the subscriptions
+ void ActivateUniformSubscriptionState();
+
static int32 MakeFakeLocation(int32 index, int32 element);
+ static Program::UniformApiType ApiTypeForSubscriptionTarget(GLenum target);
+
uint32 max_varying_vectors() const {
return max_varying_vectors_;
}

Powered by Google App Engine
This is Rietveld 408576698