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

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

Issue 2315313003: Add a base class of Texture for interfacing with the mailbox manager. (Closed)
Patch Set: Created 4 years, 3 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
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_TEXTURE_MANAGER_H_ 5 #ifndef GPU_COMMAND_BUFFER_SERVICE_TEXTURE_MANAGER_H_
6 #define GPU_COMMAND_BUFFER_SERVICE_TEXTURE_MANAGER_H_ 6 #define GPU_COMMAND_BUFFER_SERVICE_TEXTURE_MANAGER_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 20 matching lines...) Expand all
31 31
32 class GLES2Decoder; 32 class GLES2Decoder;
33 class GLStreamTextureImage; 33 class GLStreamTextureImage;
34 struct ContextState; 34 struct ContextState;
35 struct DecoderFramebufferState; 35 struct DecoderFramebufferState;
36 class Display; 36 class Display;
37 class ErrorState; 37 class ErrorState;
38 class FeatureInfo; 38 class FeatureInfo;
39 class FramebufferManager; 39 class FramebufferManager;
40 class MailboxManager; 40 class MailboxManager;
41 class Texture;
41 class TextureManager; 42 class TextureManager;
42 class TextureRef; 43 class TextureRef;
43 44
45 class GPU_EXPORT TextureBase {
46 public:
47 explicit TextureBase(GLuint service_id);
48 virtual ~TextureBase();
49
50 // The service side OpenGL id of the texture.
51 GLuint service_id() const { return service_id_; }
52
53 // Down-cast to other texture classes
54 virtual Texture* AsTexture();
piman 2016/09/07 17:38:31 Will we ever use more than one derived type in a g
Geoff Lang 2016/09/07 18:14:49 No, each mailbox manager will only ever use one ki
55
56 protected:
57 // The id of the texture.
58 GLuint service_id_;
59
60 void DeleteFromMailboxManager();
61
62 private:
63 friend class MailboxManagerSync;
64 friend class MailboxManagerImpl;
65
66 void SetMailboxManager(MailboxManager* mailbox_manager);
67
68 MailboxManager* mailbox_manager_;
69 };
70
44 // Info about Textures currently in the system. 71 // Info about Textures currently in the system.
45 // This class wraps a real GL texture, keeping track of its meta-data. It is 72 // This class wraps a real GL texture, keeping track of its meta-data. It is
46 // jointly owned by possibly multiple TextureRef. 73 // jointly owned by possibly multiple TextureRef.
47 class GPU_EXPORT Texture { 74 class GPU_EXPORT Texture final : public TextureBase {
48 public: 75 public:
49 enum ImageState { 76 enum ImageState {
50 // If an image is associated with the texture and image state is UNBOUND, 77 // If an image is associated with the texture and image state is UNBOUND,
51 // then sampling out of the texture or using it as a target for drawing 78 // then sampling out of the texture or using it as a target for drawing
52 // will not read/write from/to the image. 79 // will not read/write from/to the image.
53 UNBOUND, 80 UNBOUND,
54 // If image state is BOUND, then sampling from the texture will return the 81 // If image state is BOUND, then sampling from the texture will return the
55 // contents of the image and using it as a target will modify the image. 82 // contents of the image and using it as a target will modify the image.
56 BOUND, 83 BOUND,
57 // Image state is set to COPIED if the contents of the image has been 84 // Image state is set to COPIED if the contents of the image has been
58 // copied to the texture. Sampling from the texture will be equivalent 85 // copied to the texture. Sampling from the texture will be equivalent
59 // to sampling out the image (assuming image has not been changed since 86 // to sampling out the image (assuming image has not been changed since
60 // it was copied). Using the texture as a target for drawing will only 87 // it was copied). Using the texture as a target for drawing will only
61 // modify the texture and not the image. 88 // modify the texture and not the image.
62 COPIED 89 COPIED
63 }; 90 };
64 91
65 struct CompatibilitySwizzle { 92 struct CompatibilitySwizzle {
66 GLenum format; 93 GLenum format;
67 GLenum dest_format; 94 GLenum dest_format;
68 GLenum red; 95 GLenum red;
69 GLenum green; 96 GLenum green;
70 GLenum blue; 97 GLenum blue;
71 GLenum alpha; 98 GLenum alpha;
72 }; 99 };
73 100
74 explicit Texture(GLuint service_id); 101 explicit Texture(GLuint service_id);
75 102
103 Texture* AsTexture() final;
104
76 const SamplerState& sampler_state() const { 105 const SamplerState& sampler_state() const {
77 return sampler_state_; 106 return sampler_state_;
78 } 107 }
79 108
80 GLenum min_filter() const { 109 GLenum min_filter() const {
81 return sampler_state_.min_filter; 110 return sampler_state_.min_filter;
82 } 111 }
83 112
84 GLenum mag_filter() const { 113 GLenum mag_filter() const {
85 return sampler_state_.mag_filter; 114 return sampler_state_.mag_filter;
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 GLenum swizzle_a() const { return swizzle_a_; } 163 GLenum swizzle_a() const { return swizzle_a_; }
135 164
136 int num_uncleared_mips() const { 165 int num_uncleared_mips() const {
137 return num_uncleared_mips_; 166 return num_uncleared_mips_;
138 } 167 }
139 168
140 uint32_t estimated_size() const { return estimated_size_; } 169 uint32_t estimated_size() const { return estimated_size_; }
141 170
142 bool CanRenderTo(const FeatureInfo* feature_info, GLint level) const; 171 bool CanRenderTo(const FeatureInfo* feature_info, GLint level) const;
143 172
144 // The service side OpenGL id of the texture.
145 GLuint service_id() const {
146 return service_id_;
147 }
148
149 void SetServiceId(GLuint service_id) { 173 void SetServiceId(GLuint service_id) {
150 DCHECK(service_id); 174 DCHECK(service_id);
151 DCHECK_EQ(owned_service_id_, service_id_); 175 DCHECK_EQ(owned_service_id_, service_id_);
152 service_id_ = service_id; 176 service_id_ = service_id;
153 owned_service_id_ = service_id; 177 owned_service_id_ = service_id;
154 } 178 }
155 179
156 // Returns the target this texure was first bound to or 0 if it has not 180 // Returns the target this texure was first bound to or 0 if it has not
157 // been bound. Once a texture is bound to a specific target it can never be 181 // been bound. Once a texture is bound to a specific target it can never be
158 // bound to a different target. 182 // bound to a different target.
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 306
283 private: 307 private:
284 friend class MailboxManagerImpl; 308 friend class MailboxManagerImpl;
285 friend class MailboxManagerSync; 309 friend class MailboxManagerSync;
286 friend class MailboxManagerTest; 310 friend class MailboxManagerTest;
287 friend class TextureDefinition; 311 friend class TextureDefinition;
288 friend class TextureManager; 312 friend class TextureManager;
289 friend class TextureRef; 313 friend class TextureRef;
290 friend class TextureTestHelper; 314 friend class TextureTestHelper;
291 315
292 ~Texture(); 316 ~Texture() override;
293 void AddTextureRef(TextureRef* ref); 317 void AddTextureRef(TextureRef* ref);
294 void RemoveTextureRef(TextureRef* ref, bool have_context); 318 void RemoveTextureRef(TextureRef* ref, bool have_context);
295 MemoryTypeTracker* GetMemTracker(); 319 MemoryTypeTracker* GetMemTracker();
296 320
297 // Condition on which this texture is renderable. Can be ONLY_IF_NPOT if it 321 // Condition on which this texture is renderable. Can be ONLY_IF_NPOT if it
298 // depends on context support for non-power-of-two textures (i.e. will be 322 // depends on context support for non-power-of-two textures (i.e. will be
299 // renderable if NPOT support is in the context, otherwise not, e.g. texture 323 // renderable if NPOT support is in the context, otherwise not, e.g. texture
300 // with a NPOT level). ALWAYS means it doesn't depend on context features 324 // with a NPOT level). ALWAYS means it doesn't depend on context features
301 // (e.g. complete POT), NEVER means it's not renderable regardless (e.g. 325 // (e.g. complete POT), NEVER means it's not renderable regardless (e.g.
302 // incomplete). 326 // incomplete).
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 void SetTarget(GLenum target, GLint max_levels); 497 void SetTarget(GLenum target, GLint max_levels);
474 498
475 // Update info about this texture. 499 // Update info about this texture.
476 void Update(); 500 void Update();
477 501
478 // Appends a signature for the given level. 502 // Appends a signature for the given level.
479 void AddToSignature( 503 void AddToSignature(
480 const FeatureInfo* feature_info, 504 const FeatureInfo* feature_info,
481 GLenum target, GLint level, std::string* signature) const; 505 GLenum target, GLint level, std::string* signature) const;
482 506
483 void SetMailboxManager(MailboxManager* mailbox_manager);
484
485 // Updates the unsafe textures count in all the managers referencing this 507 // Updates the unsafe textures count in all the managers referencing this
486 // texture. 508 // texture.
487 void UpdateSafeToRenderFrom(bool cleared); 509 void UpdateSafeToRenderFrom(bool cleared);
488 510
489 // Updates the uncleared mip count in all the managers referencing this 511 // Updates the uncleared mip count in all the managers referencing this
490 // texture. 512 // texture.
491 void UpdateMipCleared(LevelInfo* info, 513 void UpdateMipCleared(LevelInfo* info,
492 GLsizei width, 514 GLsizei width,
493 GLsizei height, 515 GLsizei height,
494 const gfx::Rect& cleared_rect); 516 const gfx::Rect& cleared_rect);
(...skipping 25 matching lines...) Expand all
520 // this texture. 542 // this texture.
521 void IncrementManagerServiceIdGeneration(); 543 void IncrementManagerServiceIdGeneration();
522 544
523 // Return the service id of the texture that we will delete when we are 545 // Return the service id of the texture that we will delete when we are
524 // destroyed. 546 // destroyed.
525 GLuint owned_service_id() const { return owned_service_id_; } 547 GLuint owned_service_id() const { return owned_service_id_; }
526 548
527 GLenum GetCompatibilitySwizzleForChannel(GLenum channel); 549 GLenum GetCompatibilitySwizzleForChannel(GLenum channel);
528 void SetCompatibilitySwizzle(const CompatibilitySwizzle* swizzle); 550 void SetCompatibilitySwizzle(const CompatibilitySwizzle* swizzle);
529 551
530 MailboxManager* mailbox_manager_;
531
532 // Info about each face and level of texture. 552 // Info about each face and level of texture.
533 std::vector<FaceInfo> face_infos_; 553 std::vector<FaceInfo> face_infos_;
534 554
535 // The texture refs that point to this Texture. 555 // The texture refs that point to this Texture.
536 typedef std::set<TextureRef*> RefSet; 556 typedef std::set<TextureRef*> RefSet;
537 RefSet refs_; 557 RefSet refs_;
538 558
539 // The single TextureRef that accounts for memory for this texture. Must be 559 // The single TextureRef that accounts for memory for this texture. Must be
540 // one of refs_. 560 // one of refs_.
541 TextureRef* memory_tracking_ref_; 561 TextureRef* memory_tracking_ref_;
542 562
543 // The id of the texture.
544 GLuint service_id_;
545
546 // The id of the texture that we are responsible for deleting. Normally, this 563 // The id of the texture that we are responsible for deleting. Normally, this
547 // is the same as |service_id_|, unless a GLStreamTextureImage with its own 564 // is the same as |service_id_|, unless a GLStreamTextureImage with its own
548 // service id is bound. In that case the GLStreamTextureImage service id is 565 // service id is bound. In that case the GLStreamTextureImage service id is
549 // stored in |service_id_| and overrides the owned service id for all purposes 566 // stored in |service_id_| and overrides the owned service id for all purposes
550 // except deleting the texture name. 567 // except deleting the texture name.
551 GLuint owned_service_id_; 568 GLuint owned_service_id_;
552 569
553 // Whether all renderable mips of this texture have been cleared. 570 // Whether all renderable mips of this texture have been cleared.
554 bool cleared_; 571 bool cleared_;
555 572
(...skipping 638 matching lines...) Expand 10 before | Expand all | Expand 10 after
1194 private: 1211 private:
1195 DecoderTextureState* texture_state_; 1212 DecoderTextureState* texture_state_;
1196 base::TimeTicks begin_time_; 1213 base::TimeTicks begin_time_;
1197 DISALLOW_COPY_AND_ASSIGN(ScopedTextureUploadTimer); 1214 DISALLOW_COPY_AND_ASSIGN(ScopedTextureUploadTimer);
1198 }; 1215 };
1199 1216
1200 } // namespace gles2 1217 } // namespace gles2
1201 } // namespace gpu 1218 } // namespace gpu
1202 1219
1203 #endif // GPU_COMMAND_BUFFER_SERVICE_TEXTURE_MANAGER_H_ 1220 #endif // GPU_COMMAND_BUFFER_SERVICE_TEXTURE_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698