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

Side by Side Diff: gpu/command_buffer/service/renderbuffer_manager.h

Issue 12326146: Refactor/Rename a bunch of GPU stuff (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_RENDERBUFFER_MANAGER_H_ 5 #ifndef GPU_COMMAND_BUFFER_SERVICE_RENDERBUFFER_MANAGER_H_
6 #define GPU_COMMAND_BUFFER_SERVICE_RENDERBUFFER_MANAGER_H_ 6 #define GPU_COMMAND_BUFFER_SERVICE_RENDERBUFFER_MANAGER_H_
7 7
8 #include <string> 8 #include <string>
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/hash_tables.h" 10 #include "base/hash_tables.h"
11 #include "base/memory/ref_counted.h" 11 #include "base/memory/ref_counted.h"
12 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
13 #include "gpu/command_buffer/service/gl_utils.h" 13 #include "gpu/command_buffer/service/gl_utils.h"
14 #include "gpu/command_buffer/service/memory_tracking.h" 14 #include "gpu/command_buffer/service/memory_tracking.h"
15 #include "gpu/gpu_export.h" 15 #include "gpu/gpu_export.h"
16 16
17 namespace gpu { 17 namespace gpu {
18 namespace gles2 { 18 namespace gles2 {
19 19
20 class RenderbufferManager;
21
22 // Info about a Renderbuffer.
23 class GPU_EXPORT Renderbuffer
24 : public base::RefCounted<Renderbuffer> {
25 public:
26 Renderbuffer(RenderbufferManager* manager, GLuint service_id);
27
28 GLuint service_id() const {
29 return service_id_;
30 }
31
32 bool cleared() const {
33 return cleared_;
34 }
35
36 GLenum internal_format() const {
37 return internal_format_;
38 }
39
40 GLsizei samples() const {
41 return samples_;
42 }
43
44 GLsizei width() const {
45 return width_;
46 }
47
48 GLsizei height() const {
49 return height_;
50 }
51
52 bool IsDeleted() const {
53 return deleted_;
54 }
55
56 void MarkAsValid() {
57 has_been_bound_ = true;
58 }
59
60 bool IsValid() const {
61 return has_been_bound_ && !IsDeleted();
62 }
63
64 size_t EstimatedSize();
65
66 void AddToSignature(std::string* signature) const;
67
68 private:
69 friend class RenderbufferManager;
70 friend class base::RefCounted<Renderbuffer>;
71
72 ~Renderbuffer();
73
74 void set_cleared(bool cleared) {
75 cleared_ = cleared;
76 }
77
78 void SetInfo(
79 GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {
80 samples_ = samples;
81 internal_format_ = internalformat;
82 width_ = width;
83 height_ = height;
84 cleared_ = false;
85 }
86
87 void MarkAsDeleted() {
88 deleted_ = true;
89 }
90
91 // RenderbufferManager that owns this Renderbuffer.
92 RenderbufferManager* manager_;
93
94 bool deleted_;
95
96 // Service side renderbuffer id.
97 GLuint service_id_;
98
99 // Whether this renderbuffer has been cleared
100 bool cleared_;
101
102 // Whether this renderbuffer has ever been bound.
103 bool has_been_bound_;
104
105 // Number of samples (for multi-sampled renderbuffers)
106 GLsizei samples_;
107
108 // Renderbuffer internalformat set through RenderbufferStorage().
109 GLenum internal_format_;
110
111 // Dimensions of renderbuffer.
112 GLsizei width_;
113 GLsizei height_;
114 };
115
20 // This class keeps track of the renderbuffers and whether or not they have 116 // This class keeps track of the renderbuffers and whether or not they have
21 // been cleared. 117 // been cleared.
22 class GPU_EXPORT RenderbufferManager { 118 class GPU_EXPORT RenderbufferManager {
23 public: 119 public:
24 // Info about Renderbuffers currently in the system.
25 class GPU_EXPORT RenderbufferInfo
26 : public base::RefCounted<RenderbufferInfo> {
27 public:
28 typedef scoped_refptr<RenderbufferInfo> Ref;
29
30 RenderbufferInfo(RenderbufferManager* manager, GLuint service_id)
31 : manager_(manager),
32 deleted_(false),
33 service_id_(service_id),
34 cleared_(true),
35 has_been_bound_(false),
36 samples_(0),
37 internal_format_(GL_RGBA4),
38 width_(0),
39 height_(0) {
40 manager_->StartTracking(this);
41 }
42
43 GLuint service_id() const {
44 return service_id_;
45 }
46
47 bool cleared() const {
48 return cleared_;
49 }
50
51 GLenum internal_format() const {
52 return internal_format_;
53 }
54
55 GLsizei samples() const {
56 return samples_;
57 }
58
59 GLsizei width() const {
60 return width_;
61 }
62
63 GLsizei height() const {
64 return height_;
65 }
66
67 bool IsDeleted() const {
68 return deleted_;
69 }
70
71 void MarkAsValid() {
72 has_been_bound_ = true;
73 }
74
75 bool IsValid() const {
76 return has_been_bound_ && !IsDeleted();
77 }
78
79 size_t EstimatedSize();
80
81 void AddToSignature(std::string* signature) const;
82
83 private:
84 friend class RenderbufferManager;
85 friend class base::RefCounted<RenderbufferInfo>;
86
87 ~RenderbufferInfo();
88
89 void set_cleared(bool cleared) {
90 cleared_ = cleared;
91 }
92
93 void SetInfo(
94 GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {
95 samples_ = samples;
96 internal_format_ = internalformat;
97 width_ = width;
98 height_ = height;
99 cleared_ = false;
100 }
101
102 void MarkAsDeleted() {
103 deleted_ = true;
104 }
105
106 // RenderbufferManager that owns this RenderbufferInfo.
107 RenderbufferManager* manager_;
108
109 bool deleted_;
110
111 // Service side renderbuffer id.
112 GLuint service_id_;
113
114 // Whether this renderbuffer has been cleared
115 bool cleared_;
116
117 // Whether this renderbuffer has ever been bound.
118 bool has_been_bound_;
119
120 // Number of samples (for multi-sampled renderbuffers)
121 GLsizei samples_;
122
123 // Renderbuffer internalformat set through RenderbufferStorage().
124 GLenum internal_format_;
125
126 // Dimensions of renderbuffer.
127 GLsizei width_;
128 GLsizei height_;
129 };
130
131 RenderbufferManager(MemoryTracker* memory_tracker, 120 RenderbufferManager(MemoryTracker* memory_tracker,
132 GLint max_renderbuffer_size, 121 GLint max_renderbuffer_size,
133 GLint max_samples); 122 GLint max_samples);
134 ~RenderbufferManager(); 123 ~RenderbufferManager();
135 124
136 GLint max_renderbuffer_size() const { 125 GLint max_renderbuffer_size() const {
137 return max_renderbuffer_size_; 126 return max_renderbuffer_size_;
138 } 127 }
139 128
140 GLint max_samples() const { 129 GLint max_samples() const {
141 return max_samples_; 130 return max_samples_;
142 } 131 }
143 132
144 bool HaveUnclearedRenderbuffers() const { 133 bool HaveUnclearedRenderbuffers() const {
145 return num_uncleared_renderbuffers_ != 0; 134 return num_uncleared_renderbuffers_ != 0;
146 } 135 }
147 136
148 void SetInfo( 137 void SetInfo(
149 RenderbufferInfo* renderbuffer, 138 Renderbuffer* renderbuffer,
150 GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); 139 GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
151 140
152 void SetCleared(RenderbufferInfo* renderbuffer, bool cleared); 141 void SetCleared(Renderbuffer* renderbuffer, bool cleared);
153 142
154 // Must call before destruction. 143 // Must call before destruction.
155 void Destroy(bool have_context); 144 void Destroy(bool have_context);
156 145
157 // Creates a RenderbufferInfo for the given renderbuffer. 146 // Creates a Renderbuffer for the given renderbuffer.
158 void CreateRenderbufferInfo(GLuint client_id, GLuint service_id); 147 void CreateRenderbuffer(GLuint client_id, GLuint service_id);
159 148
160 // Gets the renderbuffer info for the given renderbuffer. 149 // Gets the renderbuffer info for the given renderbuffer.
161 RenderbufferInfo* GetRenderbufferInfo(GLuint client_id); 150 Renderbuffer* GetRenderbuffer(GLuint client_id);
162 151
163 // Removes a renderbuffer info for the given renderbuffer. 152 // Removes a renderbuffer info for the given renderbuffer.
164 void RemoveRenderbufferInfo(GLuint client_id); 153 void RemoveRenderbuffer(GLuint client_id);
165 154
166 // Gets a client id for a given service id. 155 // Gets a client id for a given service id.
167 bool GetClientId(GLuint service_id, GLuint* client_id) const; 156 bool GetClientId(GLuint service_id, GLuint* client_id) const;
168 157
169 size_t mem_represented() const { 158 size_t mem_represented() const {
170 return memory_tracker_->GetMemRepresented(); 159 return memory_tracker_->GetMemRepresented();
171 } 160 }
172 161
173 static bool ComputeEstimatedRenderbufferSize( 162 static bool ComputeEstimatedRenderbufferSize(
174 int width, int height, int samples, int internal_format, uint32* size); 163 int width, int height, int samples, int internal_format, uint32* size);
175 static GLenum InternalRenderbufferFormatToImplFormat(GLenum impl_format); 164 static GLenum InternalRenderbufferFormatToImplFormat(GLenum impl_format);
176 165
177 private: 166 private:
178 void StartTracking(RenderbufferInfo* renderbuffer); 167 friend class Renderbuffer;
179 void StopTracking(RenderbufferInfo* renderbuffer); 168
169 void StartTracking(Renderbuffer* renderbuffer);
170 void StopTracking(Renderbuffer* renderbuffer);
180 171
181 scoped_ptr<MemoryTypeTracker> memory_tracker_; 172 scoped_ptr<MemoryTypeTracker> memory_tracker_;
182 173
183 GLint max_renderbuffer_size_; 174 GLint max_renderbuffer_size_;
184 GLint max_samples_; 175 GLint max_samples_;
185 176
186 int num_uncleared_renderbuffers_; 177 int num_uncleared_renderbuffers_;
187 178
188 // Counts the number of RenderbufferInfo allocated with 'this' as its manager. 179 // Counts the number of Renderbuffer allocated with 'this' as its manager.
189 // Allows to check no RenderbufferInfo will outlive this. 180 // Allows to check no Renderbuffer will outlive this.
190 unsigned renderbuffer_info_count_; 181 unsigned renderbuffer_info_count_;
191 182
192 bool have_context_; 183 bool have_context_;
193 184
194 // Info for each renderbuffer in the system. 185 // Info for each renderbuffer in the system.
195 typedef base::hash_map<GLuint, RenderbufferInfo::Ref> RenderbufferInfoMap; 186 typedef base::hash_map<GLuint,
187 scoped_refptr<Renderbuffer> > RenderbufferInfoMap;
196 RenderbufferInfoMap renderbuffer_infos_; 188 RenderbufferInfoMap renderbuffer_infos_;
197 189
198 DISALLOW_COPY_AND_ASSIGN(RenderbufferManager); 190 DISALLOW_COPY_AND_ASSIGN(RenderbufferManager);
199 }; 191 };
200 192
201 } // namespace gles2 193 } // namespace gles2
202 } // namespace gpu 194 } // namespace gpu
203 195
204 #endif // GPU_COMMAND_BUFFER_SERVICE_RENDERBUFFER_MANAGER_H_ 196 #endif // GPU_COMMAND_BUFFER_SERVICE_RENDERBUFFER_MANAGER_H_
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/query_manager_unittest.cc ('k') | gpu/command_buffer/service/renderbuffer_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698