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

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

Issue 5676003: Make shader and program object lifetimes match OpenGL ES spec.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years 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/shader_manager.h
===================================================================
--- gpu/command_buffer/service/shader_manager.h (revision 68425)
+++ gpu/command_buffer/service/shader_manager.h (working copy)
@@ -8,6 +8,7 @@
#include <map>
#include <string>
#include "base/basictypes.h"
+#include "base/logging.h"
#include "base/ref_counted.h"
#include "gpu/command_buffer/service/gl_utils.h"
#include "gpu/command_buffer/service/shader_translator.h"
@@ -31,7 +32,8 @@
typedef ShaderTranslator::VariableInfo VariableInfo;
explicit ShaderInfo(GLuint service_id, GLenum shader_type)
- : service_id_(service_id),
+ : use_count_(0),
+ service_id_(service_id),
shader_type_(shader_type),
valid_(false) {
}
@@ -71,6 +73,11 @@
return service_id_ == 0;
}
+ bool InUse() const {
+ DCHECK_GE(use_count_, 0);
+ return use_count_ != 0;
+ }
+
private:
typedef ShaderTranslator::VariableMap VariableMap;
@@ -78,10 +85,22 @@
friend class ShaderManager;
~ShaderInfo() { }
+ void IncUseCount() {
+ ++use_count_;
+ }
+
+ void DecUseCount() {
+ --use_count_;
+ DCHECK_GE(use_count_, 0);
+ }
+
void MarkAsDeleted() {
+ DCHECK_NE(service_id_, 0u);
service_id_ = 0;
}
+ int use_count_;
+
// The shader this ShaderInfo is tracking.
GLuint service_id_;
// Type of shader - GL_VERTEX_SHADER or GL_FRAGMENT_SHADER.
@@ -116,17 +135,25 @@
// exists.
ShaderInfo* GetShaderInfo(GLuint client_id);
- // Deletes the shader info for the given shader.
- void RemoveShaderInfo(GLuint client_id);
-
// Gets a client id for a given service id.
bool GetClientId(GLuint service_id, GLuint* client_id) const;
+ void MarkAsDeleted(ShaderInfo* info);
+
+ // Mark a shader as used
+ void UseShader(ShaderInfo* info);
+
+ // Unmark a shader as used. If it has been deleted and is not used
+ // then we free the info.
+ void UnuseShader(ShaderInfo* info);
+
private:
// Info for each shader by service side shader Id.
typedef std::map<GLuint, ShaderInfo::Ref> ShaderInfoMap;
ShaderInfoMap shader_infos_;
+ void RemoveShaderInfoIfUnused(ShaderInfo* info);
+
DISALLOW_COPY_AND_ASSIGN(ShaderManager);
};
« no previous file with comments | « gpu/command_buffer/service/program_manager_unittest.cc ('k') | gpu/command_buffer/service/shader_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698