OLD | NEW |
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 Loading... |
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 protected: |
| 54 // The id of the texture. |
| 55 GLuint service_id_; |
| 56 |
| 57 void DeleteFromMailboxManager(); |
| 58 |
| 59 private: |
| 60 friend class MailboxManagerSync; |
| 61 friend class MailboxManagerImpl; |
| 62 |
| 63 void SetMailboxManager(MailboxManager* mailbox_manager); |
| 64 |
| 65 MailboxManager* mailbox_manager_; |
| 66 }; |
| 67 |
44 // Info about Textures currently in the system. | 68 // Info about Textures currently in the system. |
45 // This class wraps a real GL texture, keeping track of its meta-data. It is | 69 // This class wraps a real GL texture, keeping track of its meta-data. It is |
46 // jointly owned by possibly multiple TextureRef. | 70 // jointly owned by possibly multiple TextureRef. |
47 class GPU_EXPORT Texture { | 71 class GPU_EXPORT Texture final : public TextureBase { |
48 public: | 72 public: |
49 enum ImageState { | 73 enum ImageState { |
50 // If an image is associated with the texture and image state is UNBOUND, | 74 // 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 | 75 // then sampling out of the texture or using it as a target for drawing |
52 // will not read/write from/to the image. | 76 // will not read/write from/to the image. |
53 UNBOUND, | 77 UNBOUND, |
54 // If image state is BOUND, then sampling from the texture will return the | 78 // 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. | 79 // contents of the image and using it as a target will modify the image. |
56 BOUND, | 80 BOUND, |
57 // Image state is set to COPIED if the contents of the image has been | 81 // Image state is set to COPIED if the contents of the image has been |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 GLenum swizzle_a() const { return swizzle_a_; } | 158 GLenum swizzle_a() const { return swizzle_a_; } |
135 | 159 |
136 int num_uncleared_mips() const { | 160 int num_uncleared_mips() const { |
137 return num_uncleared_mips_; | 161 return num_uncleared_mips_; |
138 } | 162 } |
139 | 163 |
140 uint32_t estimated_size() const { return estimated_size_; } | 164 uint32_t estimated_size() const { return estimated_size_; } |
141 | 165 |
142 bool CanRenderTo(const FeatureInfo* feature_info, GLint level) const; | 166 bool CanRenderTo(const FeatureInfo* feature_info, GLint level) const; |
143 | 167 |
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) { | 168 void SetServiceId(GLuint service_id) { |
150 DCHECK(service_id); | 169 DCHECK(service_id); |
151 DCHECK_EQ(owned_service_id_, service_id_); | 170 DCHECK_EQ(owned_service_id_, service_id_); |
152 service_id_ = service_id; | 171 service_id_ = service_id; |
153 owned_service_id_ = service_id; | 172 owned_service_id_ = service_id; |
154 } | 173 } |
155 | 174 |
156 // Returns the target this texure was first bound to or 0 if it has not | 175 // 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 | 176 // been bound. Once a texture is bound to a specific target it can never be |
158 // bound to a different target. | 177 // bound to a different target. |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
282 | 301 |
283 private: | 302 private: |
284 friend class MailboxManagerImpl; | 303 friend class MailboxManagerImpl; |
285 friend class MailboxManagerSync; | 304 friend class MailboxManagerSync; |
286 friend class MailboxManagerTest; | 305 friend class MailboxManagerTest; |
287 friend class TextureDefinition; | 306 friend class TextureDefinition; |
288 friend class TextureManager; | 307 friend class TextureManager; |
289 friend class TextureRef; | 308 friend class TextureRef; |
290 friend class TextureTestHelper; | 309 friend class TextureTestHelper; |
291 | 310 |
292 ~Texture(); | 311 ~Texture() override; |
293 void AddTextureRef(TextureRef* ref); | 312 void AddTextureRef(TextureRef* ref); |
294 void RemoveTextureRef(TextureRef* ref, bool have_context); | 313 void RemoveTextureRef(TextureRef* ref, bool have_context); |
295 MemoryTypeTracker* GetMemTracker(); | 314 MemoryTypeTracker* GetMemTracker(); |
296 | 315 |
297 // Condition on which this texture is renderable. Can be ONLY_IF_NPOT if it | 316 // 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 | 317 // 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 | 318 // 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 | 319 // 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. | 320 // (e.g. complete POT), NEVER means it's not renderable regardless (e.g. |
302 // incomplete). | 321 // incomplete). |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
473 void SetTarget(GLenum target, GLint max_levels); | 492 void SetTarget(GLenum target, GLint max_levels); |
474 | 493 |
475 // Update info about this texture. | 494 // Update info about this texture. |
476 void Update(); | 495 void Update(); |
477 | 496 |
478 // Appends a signature for the given level. | 497 // Appends a signature for the given level. |
479 void AddToSignature( | 498 void AddToSignature( |
480 const FeatureInfo* feature_info, | 499 const FeatureInfo* feature_info, |
481 GLenum target, GLint level, std::string* signature) const; | 500 GLenum target, GLint level, std::string* signature) const; |
482 | 501 |
483 void SetMailboxManager(MailboxManager* mailbox_manager); | |
484 | |
485 // Updates the unsafe textures count in all the managers referencing this | 502 // Updates the unsafe textures count in all the managers referencing this |
486 // texture. | 503 // texture. |
487 void UpdateSafeToRenderFrom(bool cleared); | 504 void UpdateSafeToRenderFrom(bool cleared); |
488 | 505 |
489 // Updates the uncleared mip count in all the managers referencing this | 506 // Updates the uncleared mip count in all the managers referencing this |
490 // texture. | 507 // texture. |
491 void UpdateMipCleared(LevelInfo* info, | 508 void UpdateMipCleared(LevelInfo* info, |
492 GLsizei width, | 509 GLsizei width, |
493 GLsizei height, | 510 GLsizei height, |
494 const gfx::Rect& cleared_rect); | 511 const gfx::Rect& cleared_rect); |
(...skipping 25 matching lines...) Expand all Loading... |
520 // this texture. | 537 // this texture. |
521 void IncrementManagerServiceIdGeneration(); | 538 void IncrementManagerServiceIdGeneration(); |
522 | 539 |
523 // Return the service id of the texture that we will delete when we are | 540 // Return the service id of the texture that we will delete when we are |
524 // destroyed. | 541 // destroyed. |
525 GLuint owned_service_id() const { return owned_service_id_; } | 542 GLuint owned_service_id() const { return owned_service_id_; } |
526 | 543 |
527 GLenum GetCompatibilitySwizzleForChannel(GLenum channel); | 544 GLenum GetCompatibilitySwizzleForChannel(GLenum channel); |
528 void SetCompatibilitySwizzle(const CompatibilitySwizzle* swizzle); | 545 void SetCompatibilitySwizzle(const CompatibilitySwizzle* swizzle); |
529 | 546 |
530 MailboxManager* mailbox_manager_; | |
531 | |
532 // Info about each face and level of texture. | 547 // Info about each face and level of texture. |
533 std::vector<FaceInfo> face_infos_; | 548 std::vector<FaceInfo> face_infos_; |
534 | 549 |
535 // The texture refs that point to this Texture. | 550 // The texture refs that point to this Texture. |
536 typedef std::set<TextureRef*> RefSet; | 551 typedef std::set<TextureRef*> RefSet; |
537 RefSet refs_; | 552 RefSet refs_; |
538 | 553 |
539 // The single TextureRef that accounts for memory for this texture. Must be | 554 // The single TextureRef that accounts for memory for this texture. Must be |
540 // one of refs_. | 555 // one of refs_. |
541 TextureRef* memory_tracking_ref_; | 556 TextureRef* memory_tracking_ref_; |
542 | 557 |
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 | 558 // 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 | 559 // 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 | 560 // 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 | 561 // stored in |service_id_| and overrides the owned service id for all purposes |
550 // except deleting the texture name. | 562 // except deleting the texture name. |
551 GLuint owned_service_id_; | 563 GLuint owned_service_id_; |
552 | 564 |
553 // Whether all renderable mips of this texture have been cleared. | 565 // Whether all renderable mips of this texture have been cleared. |
554 bool cleared_; | 566 bool cleared_; |
555 | 567 |
(...skipping 638 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1194 private: | 1206 private: |
1195 DecoderTextureState* texture_state_; | 1207 DecoderTextureState* texture_state_; |
1196 base::TimeTicks begin_time_; | 1208 base::TimeTicks begin_time_; |
1197 DISALLOW_COPY_AND_ASSIGN(ScopedTextureUploadTimer); | 1209 DISALLOW_COPY_AND_ASSIGN(ScopedTextureUploadTimer); |
1198 }; | 1210 }; |
1199 | 1211 |
1200 } // namespace gles2 | 1212 } // namespace gles2 |
1201 } // namespace gpu | 1213 } // namespace gpu |
1202 | 1214 |
1203 #endif // GPU_COMMAND_BUFFER_SERVICE_TEXTURE_MANAGER_H_ | 1215 #endif // GPU_COMMAND_BUFFER_SERVICE_TEXTURE_MANAGER_H_ |
OLD | NEW |