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

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

Issue 12647003: Refactor a bunch of Texture related GPU code (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_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 <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 423
424 // Returns true if mipmaps can be generated by GL. 424 // Returns true if mipmaps can be generated by GL.
425 bool CanGenerateMipmaps(const Texture* texture) const { 425 bool CanGenerateMipmaps(const Texture* texture) const {
426 return texture->CanGenerateMipmaps(feature_info_); 426 return texture->CanGenerateMipmaps(feature_info_);
427 } 427 }
428 428
429 // Sets the Texture's target 429 // Sets the Texture's target
430 // Parameters: 430 // Parameters:
431 // target: GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP 431 // target: GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP
432 // max_levels: The maximum levels this type of target can have. 432 // max_levels: The maximum levels this type of target can have.
433 void SetInfoTarget( 433 void SetTarget(
434 Texture* info, 434 Texture* texture,
435 GLenum target); 435 GLenum target);
436 436
437 // Set the info for a particular level in a TexureInfo. 437 // Set the info for a particular level in a TexureInfo.
438 void SetLevelInfo( 438 void SetLevelInfo(
439 Texture* info, 439 Texture* texture,
440 GLenum target, 440 GLenum target,
441 GLint level, 441 GLint level,
442 GLenum internal_format, 442 GLenum internal_format,
443 GLsizei width, 443 GLsizei width,
444 GLsizei height, 444 GLsizei height,
445 GLsizei depth, 445 GLsizei depth,
446 GLint border, 446 GLint border,
447 GLenum format, 447 GLenum format,
448 GLenum type, 448 GLenum type,
449 bool cleared); 449 bool cleared);
450 450
451 // Save the texture definition and leave it undefined. 451 // Save the texture definition and leave it undefined.
452 TextureDefinition* Save(Texture* info); 452 TextureDefinition* Save(Texture* texture);
453 453
454 // Redefine all the levels from the texture definition. 454 // Redefine all the levels from the texture definition.
455 bool Restore(Texture* info, 455 bool Restore(
456 TextureDefinition* definition); 456 const char* function_name,
457 GLES2Decoder* decoder,
458 Texture* texture,
459 TextureDefinition* definition);
457 460
458 // Sets a mip as cleared. 461 // Sets a mip as cleared.
459 void SetLevelCleared(Texture* info, GLenum target, 462 void SetLevelCleared(Texture* texture, GLenum target,
460 GLint level, bool cleared); 463 GLint level, bool cleared);
461 464
462 // Sets a texture parameter of a Texture 465 // Sets a texture parameter of a Texture
463 // Returns GL_NO_ERROR on success. Otherwise the error to generate. 466 // Returns GL_NO_ERROR on success. Otherwise the error to generate.
464 // TODO(gman): Expand to SetParameteri,f,iv,fv 467 // TODO(gman): Expand to SetParameteri,f,iv,fv
465 GLenum SetParameter( 468 void SetParameter(
466 Texture* info, GLenum pname, GLint param); 469 const char* function_name, GLES2Decoder* decoder,
470 Texture* texture, GLenum pname, GLint param);
467 471
468 // Makes each of the mip levels as though they were generated. 472 // Makes each of the mip levels as though they were generated.
469 // Returns false if that's not allowed for the given texture. 473 // Returns false if that's not allowed for the given texture.
470 bool MarkMipmapsGenerated(Texture* info); 474 bool MarkMipmapsGenerated(Texture* texture);
471 475
472 // Clears any uncleared renderable levels. 476 // Clears any uncleared renderable levels.
473 bool ClearRenderableLevels(GLES2Decoder* decoder, Texture* info); 477 bool ClearRenderableLevels(GLES2Decoder* decoder, Texture* texture);
474 478
475 // Clear a specific level. 479 // Clear a specific level.
476 bool ClearTextureLevel( 480 bool ClearTextureLevel(
477 GLES2Decoder* decoder,Texture* info, GLenum target, GLint level); 481 GLES2Decoder* decoder,Texture* texture, GLenum target, GLint level);
478 482
479 // Creates a new texture info. 483 // Creates a new texture info.
480 Texture* CreateTexture(GLuint client_id, GLuint service_id); 484 Texture* CreateTexture(GLuint client_id, GLuint service_id);
481 485
482 // Gets the texture info for the given texture. 486 // Gets the texture info for the given texture.
483 Texture* GetTexture(GLuint client_id) const; 487 Texture* GetTexture(GLuint client_id) const;
484 488
485 // Removes a texture info. 489 // Removes a texture info.
486 void RemoveTexture(GLuint client_id); 490 void RemoveTexture(GLuint client_id);
487 491
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
532 } 536 }
533 } 537 }
534 538
535 size_t mem_represented() const { 539 size_t mem_represented() const {
536 return 540 return
537 memory_tracker_managed_->GetMemRepresented() + 541 memory_tracker_managed_->GetMemRepresented() +
538 memory_tracker_unmanaged_->GetMemRepresented(); 542 memory_tracker_unmanaged_->GetMemRepresented();
539 } 543 }
540 544
541 void SetLevelImage( 545 void SetLevelImage(
542 Texture* info, 546 Texture* texture,
543 GLenum target, 547 GLenum target,
544 GLint level, 548 GLint level,
545 gfx::GLImage* image); 549 gfx::GLImage* image);
546 550
547 void AddToSignature( 551 void AddToSignature(
548 Texture* info, 552 Texture* texture,
549 GLenum target, 553 GLenum target,
550 GLint level, 554 GLint level,
551 std::string* signature) const; 555 std::string* signature) const;
552 556
553 // Transfers added will get their Texture updated at the same time 557 // Transfers added will get their Texture updated at the same time
554 // the async transfer is bound to the real texture. 558 // the async transfer is bound to the real texture.
555 void AddPendingAsyncPixelTransfer( 559 void AddPendingAsyncPixelTransfer(
556 base::WeakPtr<gfx::AsyncPixelTransferState> state, Texture* info); 560 base::WeakPtr<gfx::AsyncPixelTransferState> state, Texture* texture);
557 void BindFinishedAsyncPixelTransfers(bool* texture_dirty, 561 void BindFinishedAsyncPixelTransfers(bool* texture_dirty,
558 bool* framebuffer_dirty); 562 bool* framebuffer_dirty);
559 563
560 private: 564 private:
561 friend class Texture; 565 friend class Texture;
562 566
563 // Helper for Initialize(). 567 // Helper for Initialize().
564 scoped_refptr<Texture> CreateDefaultAndBlackTextures( 568 scoped_refptr<Texture> CreateDefaultAndBlackTextures(
565 GLenum target, 569 GLenum target,
566 GLuint* black_texture); 570 GLuint* black_texture);
567 571
568 void StartTracking(Texture* info); 572 void StartTracking(Texture* texture);
569 void StopTracking(Texture* info); 573 void StopTracking(Texture* texture);
570 574
571 MemoryTypeTracker* GetMemTracker(GLenum texture_pool); 575 MemoryTypeTracker* GetMemTracker(GLenum texture_pool);
572 scoped_ptr<MemoryTypeTracker> memory_tracker_managed_; 576 scoped_ptr<MemoryTypeTracker> memory_tracker_managed_;
573 scoped_ptr<MemoryTypeTracker> memory_tracker_unmanaged_; 577 scoped_ptr<MemoryTypeTracker> memory_tracker_unmanaged_;
574 578
575 scoped_refptr<FeatureInfo> feature_info_; 579 scoped_refptr<FeatureInfo> feature_info_;
576 580
577 // Info for each texture in the system. 581 // Info for each texture in the system.
578 typedef base::hash_map<GLuint, scoped_refptr<Texture> > TextureInfoMap; 582 typedef base::hash_map<GLuint, scoped_refptr<Texture> > TextureMap;
579 TextureInfoMap texture_infos_; 583 TextureMap textures_;
580 584
581 GLsizei max_texture_size_; 585 GLsizei max_texture_size_;
582 GLsizei max_cube_map_texture_size_; 586 GLsizei max_cube_map_texture_size_;
583 GLint max_levels_; 587 GLint max_levels_;
584 GLint max_cube_map_levels_; 588 GLint max_cube_map_levels_;
585 589
586 int num_unrenderable_textures_; 590 int num_unrenderable_textures_;
587 int num_unsafe_textures_; 591 int num_unsafe_textures_;
588 int num_uncleared_mips_; 592 int num_uncleared_mips_;
589 593
590 // Counts the number of Texture allocated with 'this' as its manager. 594 // Counts the number of Textures allocated with 'this' as its manager.
591 // Allows to check no Texture will outlive this. 595 // Allows to check no Texture will outlive this.
592 unsigned int texture_info_count_; 596 unsigned int texture_count_;
593 597
594 bool have_context_; 598 bool have_context_;
595 599
596 // Black (0,0,0,1) textures for when non-renderable textures are used. 600 // Black (0,0,0,1) textures for when non-renderable textures are used.
597 // NOTE: There is no corresponding Texture for these textures. 601 // NOTE: There is no corresponding Texture for these textures.
598 // TextureInfos are only for textures the client side can access. 602 // TextureInfos are only for textures the client side can access.
599 GLuint black_texture_ids_[kNumDefaultTextures]; 603 GLuint black_texture_ids_[kNumDefaultTextures];
600 604
601 // The default textures for each target (texture name = 0) 605 // The default textures for each target (texture name = 0)
602 scoped_refptr<Texture> default_textures_[kNumDefaultTextures]; 606 scoped_refptr<Texture> default_textures_[kNumDefaultTextures];
603 607
604 // Async texture allocations which haven't been bound to their textures 608 // Async texture allocations which haven't been bound to their textures
605 // yet. This facilitates updating the Texture at the same time the 609 // yet. This facilitates updating the Texture at the same time the
606 // real texture data is bound. 610 // real texture data is bound.
607 typedef std::pair<base::WeakPtr<gfx::AsyncPixelTransferState>, 611 typedef std::pair<base::WeakPtr<gfx::AsyncPixelTransferState>,
608 Texture*> PendingAsyncTransfer; 612 Texture*> PendingAsyncTransfer;
609 typedef std::list<PendingAsyncTransfer> PendingAsyncTransferList; 613 typedef std::list<PendingAsyncTransfer> PendingAsyncTransferList;
610 PendingAsyncTransferList pending_async_transfers_; 614 PendingAsyncTransferList pending_async_transfers_;
611 615
612 DISALLOW_COPY_AND_ASSIGN(TextureManager); 616 DISALLOW_COPY_AND_ASSIGN(TextureManager);
613 }; 617 };
614 618
615 } // namespace gles2 619 } // namespace gles2
616 } // namespace gpu 620 } // namespace gpu
617 621
618 #endif // GPU_COMMAND_BUFFER_SERVICE_TEXTURE_MANAGER_H_ 622 #endif // GPU_COMMAND_BUFFER_SERVICE_TEXTURE_MANAGER_H_
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/test_helper.cc ('k') | gpu/command_buffer/service/texture_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698