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

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

Issue 22824009: Remove StreamTextureManager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address comments Created 7 years, 4 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_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 <list> 8 #include <list>
9 #include <set> 9 #include <set>
10 #include <string> 10 #include <string>
11 #include <vector> 11 #include <vector>
12 #include "base/basictypes.h" 12 #include "base/basictypes.h"
13 #include "base/containers/hash_tables.h" 13 #include "base/containers/hash_tables.h"
14 #include "base/logging.h" 14 #include "base/logging.h"
15 #include "base/memory/ref_counted.h" 15 #include "base/memory/ref_counted.h"
16 #include "base/observer_list.h" 16 #include "base/observer_list.h"
17 #include "gpu/command_buffer/service/async_pixel_transfer_delegate.h" 17 #include "gpu/command_buffer/service/async_pixel_transfer_delegate.h"
18 #include "gpu/command_buffer/service/gl_utils.h" 18 #include "gpu/command_buffer/service/gl_utils.h"
19 #include "gpu/command_buffer/service/memory_tracking.h" 19 #include "gpu/command_buffer/service/memory_tracking.h"
20 #include "gpu/gpu_export.h" 20 #include "gpu/gpu_export.h"
21 #include "ui/gl/gl_image.h" 21 #include "ui/gl/gl_image.h"
22 22
23 namespace gpu { 23 namespace gpu {
24 24
25 class StreamTextureManager;
26
27 namespace gles2 { 25 namespace gles2 {
28 26
29 class GLES2Decoder; 27 class GLES2Decoder;
30 class Display; 28 class Display;
31 class ErrorState; 29 class ErrorState;
32 class FeatureInfo; 30 class FeatureInfo;
33 class FramebufferManager; 31 class FramebufferManager;
34 class MailboxManager; 32 class MailboxManager;
35 class TextureManager; 33 class TextureManager;
36 class TextureRef; 34 class TextureRef;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 66
69 int num_uncleared_mips() const { 67 int num_uncleared_mips() const {
70 return num_uncleared_mips_; 68 return num_uncleared_mips_;
71 } 69 }
72 70
73 uint32 estimated_size() const { 71 uint32 estimated_size() const {
74 return estimated_size_; 72 return estimated_size_;
75 } 73 }
76 74
77 bool CanRenderTo() const { 75 bool CanRenderTo() const {
78 return !stream_texture_ && target_ != GL_TEXTURE_EXTERNAL_OES; 76 return target_ != GL_TEXTURE_EXTERNAL_OES;
79 } 77 }
80 78
81 // The service side OpenGL id of the texture. 79 // The service side OpenGL id of the texture.
82 GLuint service_id() const { 80 GLuint service_id() const {
83 return service_id_; 81 return service_id_;
84 } 82 }
85 83
86 void SetServiceId(GLuint service_id) { 84 void SetServiceId(GLuint service_id) {
87 DCHECK(service_id); 85 DCHECK(service_id);
88 service_id_ = service_id; 86 service_id_ = service_id;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 132
135 void AttachToFramebuffer() { 133 void AttachToFramebuffer() {
136 ++framebuffer_attachment_count_; 134 ++framebuffer_attachment_count_;
137 } 135 }
138 136
139 void DetachFromFramebuffer() { 137 void DetachFromFramebuffer() {
140 DCHECK_GT(framebuffer_attachment_count_, 0); 138 DCHECK_GT(framebuffer_attachment_count_, 0);
141 --framebuffer_attachment_count_; 139 --framebuffer_attachment_count_;
142 } 140 }
143 141
144 bool IsStreamTexture() const {
145 return stream_texture_;
146 }
147
148 void SetImmutable(bool immutable) { 142 void SetImmutable(bool immutable) {
149 immutable_ = immutable; 143 immutable_ = immutable;
150 } 144 }
151 145
152 bool IsImmutable() const { 146 bool IsImmutable() const {
153 return immutable_; 147 return immutable_;
154 } 148 }
155 149
156 // Whether a particular level/face is cleared. 150 // Whether a particular level/face is cleared.
157 bool IsLevelCleared(GLenum target, GLint level) const; 151 bool IsLevelCleared(GLenum target, GLint level) const;
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 // same format, all the same dimensions and all width = height. 223 // same format, all the same dimensions and all width = height.
230 bool cube_complete() const { 224 bool cube_complete() const {
231 return cube_complete_; 225 return cube_complete_;
232 } 226 }
233 227
234 // Whether or not this texture is a non-power-of-two texture. 228 // Whether or not this texture is a non-power-of-two texture.
235 bool npot() const { 229 bool npot() const {
236 return npot_; 230 return npot_;
237 } 231 }
238 232
239 void SetStreamTexture(bool stream_texture) {
240 stream_texture_ = stream_texture;
241 UpdateCanRenderCondition();
242 }
243
244 // Marks a particular level as cleared or uncleared. 233 // Marks a particular level as cleared or uncleared.
245 void SetLevelCleared(GLenum target, GLint level, bool cleared); 234 void SetLevelCleared(GLenum target, GLint level, bool cleared);
246 235
247 // Updates the cleared flag for this texture by inspecting all the mips. 236 // Updates the cleared flag for this texture by inspecting all the mips.
248 void UpdateCleared(); 237 void UpdateCleared();
249 238
250 // Clears any renderable uncleared levels. 239 // Clears any renderable uncleared levels.
251 // Returns false if a GL error was generated. 240 // Returns false if a GL error was generated.
252 bool ClearRenderableLevels(GLES2Decoder* decoder); 241 bool ClearRenderableLevels(GLES2Decoder* decoder);
253 242
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 351
363 // Whether or not this texture is non-power-of-two 352 // Whether or not this texture is non-power-of-two
364 bool npot_; 353 bool npot_;
365 354
366 // Whether this texture has ever been bound. 355 // Whether this texture has ever been bound.
367 bool has_been_bound_; 356 bool has_been_bound_;
368 357
369 // The number of framebuffers this texture is attached to. 358 // The number of framebuffers this texture is attached to.
370 int framebuffer_attachment_count_; 359 int framebuffer_attachment_count_;
371 360
372 // Whether this is a special streaming texture.
373 bool stream_texture_;
374
375 // Whether the texture is immutable and no further changes to the format 361 // Whether the texture is immutable and no further changes to the format
376 // or dimensions of the texture object can be made. 362 // or dimensions of the texture object can be made.
377 bool immutable_; 363 bool immutable_;
378 364
379 // Size in bytes this texture is assumed to take in memory. 365 // Size in bytes this texture is assumed to take in memory.
380 uint32 estimated_size_; 366 uint32 estimated_size_;
381 367
382 // Cache of the computed CanRenderCondition flag. 368 // Cache of the computed CanRenderCondition flag.
383 CanRenderCondition can_render_condition_; 369 CanRenderCondition can_render_condition_;
384 370
385 DISALLOW_COPY_AND_ASSIGN(Texture); 371 DISALLOW_COPY_AND_ASSIGN(Texture);
386 }; 372 };
387 373
388 // This class represents a texture in a client context group. It's mostly 1:1 374 // This class represents a texture in a client context group. It's mostly 1:1
389 // with a client id, though it can outlive the client id if it's still bound to 375 // with a client id, though it can outlive the client id if it's still bound to
390 // a FBO or another context when destroyed. 376 // a FBO or another context when destroyed.
391 // Multiple TextureRef can point to the same texture with cross-context sharing. 377 // Multiple TextureRef can point to the same texture with cross-context sharing.
392 //
393 // Note: for stream textures, the TextureRef that created the stream texture is
394 // set as the "owner" of the stream texture, i.e. it will call
395 // DestroyStreamTexture on destruction. This is because the StreamTextureManager
396 // isn't generally shared between ContextGroups, so ownership can't be at the
397 // Texture level. We also can't have multiple StreamTexture on the same service
398 // id, so there can be only one owner.
399 class GPU_EXPORT TextureRef : public base::RefCounted<TextureRef> { 378 class GPU_EXPORT TextureRef : public base::RefCounted<TextureRef> {
400 public: 379 public:
401 TextureRef(TextureManager* manager, GLuint client_id, Texture* texture); 380 TextureRef(TextureManager* manager, GLuint client_id, Texture* texture);
402 static scoped_refptr<TextureRef> Create(TextureManager* manager, 381 static scoped_refptr<TextureRef> Create(TextureManager* manager,
403 GLuint client_id, 382 GLuint client_id,
404 GLuint service_id); 383 GLuint service_id);
405 const Texture* texture() const { return texture_; } 384 const Texture* texture() const { return texture_; }
406 Texture* texture() { return texture_; } 385 Texture* texture() { return texture_; }
407 GLuint client_id() const { return client_id_; } 386 GLuint client_id() const { return client_id_; }
408 GLuint service_id() const { return texture_->service_id(); } 387 GLuint service_id() const { return texture_->service_id(); }
409 388
410 private: 389 private:
411 friend class base::RefCounted<TextureRef>; 390 friend class base::RefCounted<TextureRef>;
412 friend class Texture; 391 friend class Texture;
413 friend class TextureManager; 392 friend class TextureManager;
414 393
415 ~TextureRef(); 394 ~TextureRef();
416 const TextureManager* manager() const { return manager_; } 395 const TextureManager* manager() const { return manager_; }
417 TextureManager* manager() { return manager_; } 396 TextureManager* manager() { return manager_; }
418 void reset_client_id() { client_id_ = 0; } 397 void reset_client_id() { client_id_ = 0; }
419 void set_is_stream_texture_owner(bool owner) {
420 is_stream_texture_owner_ = owner;
421 }
422 bool is_stream_texture_owner() const { return is_stream_texture_owner_; }
423 398
424 TextureManager* manager_; 399 TextureManager* manager_;
425 Texture* texture_; 400 Texture* texture_;
426 GLuint client_id_; 401 GLuint client_id_;
427 bool is_stream_texture_owner_;
428 402
429 DISALLOW_COPY_AND_ASSIGN(TextureRef); 403 DISALLOW_COPY_AND_ASSIGN(TextureRef);
430 }; 404 };
431 405
432 // This class keeps track of the textures and their sizes so we can do NPOT and 406 // This class keeps track of the textures and their sizes so we can do NPOT and
433 // texture complete checking. 407 // texture complete checking.
434 // 408 //
435 // NOTE: To support shared resources an instance of this class will need to be 409 // NOTE: To support shared resources an instance of this class will need to be
436 // shared by multiple GLES2Decoders. 410 // shared by multiple GLES2Decoders.
437 class GPU_EXPORT TextureManager { 411 class GPU_EXPORT TextureManager {
(...skipping 24 matching lines...) Expand all
462 TextureManager(MemoryTracker* memory_tracker, 436 TextureManager(MemoryTracker* memory_tracker,
463 FeatureInfo* feature_info, 437 FeatureInfo* feature_info,
464 GLsizei max_texture_size, 438 GLsizei max_texture_size,
465 GLsizei max_cube_map_texture_size); 439 GLsizei max_cube_map_texture_size);
466 ~TextureManager(); 440 ~TextureManager();
467 441
468 void set_framebuffer_manager(FramebufferManager* manager) { 442 void set_framebuffer_manager(FramebufferManager* manager) {
469 framebuffer_manager_ = manager; 443 framebuffer_manager_ = manager;
470 } 444 }
471 445
472 void set_stream_texture_manager(StreamTextureManager* manager) {
473 stream_texture_manager_ = manager;
474 }
475
476 // Init the texture manager. 446 // Init the texture manager.
477 bool Initialize(); 447 bool Initialize();
478 448
479 // Must call before destruction. 449 // Must call before destruction.
480 void Destroy(bool have_context); 450 void Destroy(bool have_context);
481 451
482 // Returns the maximum number of levels. 452 // Returns the maximum number of levels.
483 GLint MaxLevelsForTarget(GLenum target) const { 453 GLint MaxLevelsForTarget(GLenum target) const {
484 switch (target) { 454 switch (target) {
485 case GL_TEXTURE_2D: 455 case GL_TEXTURE_2D:
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 } 493 }
524 494
525 // Sets the Texture's target 495 // Sets the Texture's target
526 // Parameters: 496 // Parameters:
527 // target: GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP 497 // target: GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP
528 // max_levels: The maximum levels this type of target can have. 498 // max_levels: The maximum levels this type of target can have.
529 void SetTarget( 499 void SetTarget(
530 TextureRef* ref, 500 TextureRef* ref,
531 GLenum target); 501 GLenum target);
532 502
533 // Marks a texture as a stream texture, and the ref as the stream texture
534 // owner.
535 void SetStreamTexture(TextureRef* ref, bool stream_texture);
536
537 // Whether the TextureRef is the stream texture owner.
538 bool IsStreamTextureOwner(TextureRef* ref);
539
540 // Set the info for a particular level in a TexureInfo. 503 // Set the info for a particular level in a TexureInfo.
541 void SetLevelInfo( 504 void SetLevelInfo(
542 TextureRef* ref, 505 TextureRef* ref,
543 GLenum target, 506 GLenum target,
544 GLint level, 507 GLint level,
545 GLenum internal_format, 508 GLenum internal_format,
546 GLsizei width, 509 GLsizei width,
547 GLsizei height, 510 GLsizei height,
548 GLsizei depth, 511 GLsizei depth,
549 GLint border, 512 GLint border,
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 Texture::CanRenderCondition new_condition); 652 Texture::CanRenderCondition new_condition);
690 void IncFramebufferStateChangeCount(); 653 void IncFramebufferStateChangeCount();
691 654
692 MemoryTypeTracker* GetMemTracker(GLenum texture_pool); 655 MemoryTypeTracker* GetMemTracker(GLenum texture_pool);
693 scoped_ptr<MemoryTypeTracker> memory_tracker_managed_; 656 scoped_ptr<MemoryTypeTracker> memory_tracker_managed_;
694 scoped_ptr<MemoryTypeTracker> memory_tracker_unmanaged_; 657 scoped_ptr<MemoryTypeTracker> memory_tracker_unmanaged_;
695 658
696 scoped_refptr<FeatureInfo> feature_info_; 659 scoped_refptr<FeatureInfo> feature_info_;
697 660
698 FramebufferManager* framebuffer_manager_; 661 FramebufferManager* framebuffer_manager_;
699 StreamTextureManager* stream_texture_manager_;
700 662
701 // Info for each texture in the system. 663 // Info for each texture in the system.
702 typedef base::hash_map<GLuint, scoped_refptr<TextureRef> > TextureMap; 664 typedef base::hash_map<GLuint, scoped_refptr<TextureRef> > TextureMap;
703 TextureMap textures_; 665 TextureMap textures_;
704 666
705 GLsizei max_texture_size_; 667 GLsizei max_texture_size_;
706 GLsizei max_cube_map_texture_size_; 668 GLsizei max_cube_map_texture_size_;
707 GLint max_levels_; 669 GLint max_levels_;
708 GLint max_cube_map_levels_; 670 GLint max_cube_map_levels_;
709 671
(...skipping 17 matching lines...) Expand all
727 689
728 ObserverList<DestructionObserver> destruction_observers_; 690 ObserverList<DestructionObserver> destruction_observers_;
729 691
730 DISALLOW_COPY_AND_ASSIGN(TextureManager); 692 DISALLOW_COPY_AND_ASSIGN(TextureManager);
731 }; 693 };
732 694
733 } // namespace gles2 695 } // namespace gles2
734 } // namespace gpu 696 } // namespace gpu
735 697
736 #endif // GPU_COMMAND_BUFFER_SERVICE_TEXTURE_MANAGER_H_ 698 #endif // GPU_COMMAND_BUFFER_SERVICE_TEXTURE_MANAGER_H_
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/stream_texture_mock.cc ('k') | gpu/command_buffer/service/texture_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698