OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef GPU_COMMAND_BUFFER_SERVICE_SHADER_MANAGER_H_ | 5 #ifndef GPU_COMMAND_BUFFER_SERVICE_SHADER_MANAGER_H_ |
6 #define GPU_COMMAND_BUFFER_SERVICE_SHADER_MANAGER_H_ | 6 #define GPU_COMMAND_BUFFER_SERVICE_SHADER_MANAGER_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <string> | 9 #include <string> |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
11 #include "base/logging.h" | 11 #include "base/logging.h" |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
71 DCHECK_GE(use_count_, 0); | 71 DCHECK_GE(use_count_, 0); |
72 return use_count_ != 0; | 72 return use_count_ != 0; |
73 } | 73 } |
74 | 74 |
75 private: | 75 private: |
76 typedef ShaderTranslator::VariableMap VariableMap; | 76 typedef ShaderTranslator::VariableMap VariableMap; |
77 | 77 |
78 friend class base::RefCounted<ShaderInfo>; | 78 friend class base::RefCounted<ShaderInfo>; |
79 friend class ShaderManager; | 79 friend class ShaderManager; |
80 | 80 |
81 ShaderInfo(GLuint service_id, GLenum shader_type) | 81 ShaderInfo(GLuint service_id, GLenum shader_type); |
82 : use_count_(0), | 82 ~ShaderInfo(); |
83 service_id_(service_id), | |
84 shader_type_(shader_type), | |
85 valid_(false) { | |
86 } | |
87 | 83 |
88 ~ShaderInfo() { } | 84 void IncUseCount(); |
89 | 85 void DecUseCount(); |
90 void IncUseCount() { | 86 void MarkAsDeleted(); |
91 ++use_count_; | |
92 } | |
93 | |
94 void DecUseCount() { | |
95 --use_count_; | |
96 DCHECK_GE(use_count_, 0); | |
97 } | |
98 | |
99 void MarkAsDeleted() { | |
100 DCHECK_NE(service_id_, 0u); | |
101 service_id_ = 0; | |
102 } | |
103 | 87 |
104 int use_count_; | 88 int use_count_; |
105 | 89 |
106 // The shader this ShaderInfo is tracking. | 90 // The shader this ShaderInfo is tracking. |
107 GLuint service_id_; | 91 GLuint service_id_; |
108 // Type of shader - GL_VERTEX_SHADER or GL_FRAGMENT_SHADER. | 92 // Type of shader - GL_VERTEX_SHADER or GL_FRAGMENT_SHADER. |
109 GLenum shader_type_; | 93 GLenum shader_type_; |
110 | 94 |
111 // True if compilation succeeded. | 95 // True if compilation succeeded. |
112 bool valid_; | 96 bool valid_; |
(...skipping 29 matching lines...) Expand all Loading... |
142 | 126 |
143 void MarkAsDeleted(ShaderInfo* info); | 127 void MarkAsDeleted(ShaderInfo* info); |
144 | 128 |
145 // Mark a shader as used | 129 // Mark a shader as used |
146 void UseShader(ShaderInfo* info); | 130 void UseShader(ShaderInfo* info); |
147 | 131 |
148 // Unmark a shader as used. If it has been deleted and is not used | 132 // Unmark a shader as used. If it has been deleted and is not used |
149 // then we free the info. | 133 // then we free the info. |
150 void UnuseShader(ShaderInfo* info); | 134 void UnuseShader(ShaderInfo* info); |
151 | 135 |
| 136 // Check if a ShaderInfo is owned by this ShaderManager. |
| 137 bool IsOwned(ShaderInfo* info); |
| 138 |
152 private: | 139 private: |
153 // Info for each shader by service side shader Id. | 140 // Info for each shader by service side shader Id. |
154 typedef std::map<GLuint, ShaderInfo::Ref> ShaderInfoMap; | 141 typedef std::map<GLuint, ShaderInfo::Ref> ShaderInfoMap; |
155 ShaderInfoMap shader_infos_; | 142 ShaderInfoMap shader_infos_; |
156 | 143 |
157 void RemoveShaderInfoIfUnused(ShaderInfo* info); | 144 void RemoveShaderInfoIfUnused(ShaderInfo* info); |
158 | 145 |
159 DISALLOW_COPY_AND_ASSIGN(ShaderManager); | 146 DISALLOW_COPY_AND_ASSIGN(ShaderManager); |
160 }; | 147 }; |
161 | 148 |
162 } // namespace gles2 | 149 } // namespace gles2 |
163 } // namespace gpu | 150 } // namespace gpu |
164 | 151 |
165 #endif // GPU_COMMAND_BUFFER_SERVICE_SHADER_MANAGER_H_ | 152 #endif // GPU_COMMAND_BUFFER_SERVICE_SHADER_MANAGER_H_ |
166 | 153 |
OLD | NEW |