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

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

Issue 8872061: Fixed service side implementation of glTexStorage2DEXT to only initialize the number of (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 #include "gpu/command_buffer/service/texture_manager.h" 5 #include "gpu/command_buffer/service/texture_manager.h"
6 #include "base/bits.h" 6 #include "base/bits.h"
7 #include "gpu/command_buffer/common/gles2_cmd_utils.h" 7 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
8 #include "gpu/command_buffer/service/feature_info.h" 8 #include "gpu/command_buffer/service/feature_info.h"
9 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" 9 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
10 10
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 return texture_complete(); 99 return texture_complete();
100 } else { 100 } else {
101 return texture_complete() && cube_complete(); 101 return texture_complete() && cube_complete();
102 } 102 }
103 } else { 103 } else {
104 return true; 104 return true;
105 } 105 }
106 } 106 }
107 107
108 bool TextureManager::TextureInfo::MarkMipmapsGenerated( 108 bool TextureManager::TextureInfo::MarkMipmapsGenerated(
109 const FeatureInfo* feature_info, 109 const FeatureInfo* feature_info) {
110 bool cleared) {
111 if (!CanGenerateMipmaps(feature_info)) { 110 if (!CanGenerateMipmaps(feature_info)) {
112 return false; 111 return false;
113 } 112 }
114 for (size_t ii = 0; ii < level_infos_.size(); ++ii) { 113 for (size_t ii = 0; ii < level_infos_.size(); ++ii) {
115 const TextureInfo::LevelInfo& info1 = level_infos_[ii][0]; 114 const TextureInfo::LevelInfo& info1 = level_infos_[ii][0];
116 GLsizei width = info1.width; 115 GLsizei width = info1.width;
117 GLsizei height = info1.height; 116 GLsizei height = info1.height;
118 GLsizei depth = info1.depth; 117 GLsizei depth = info1.depth;
119 GLenum target = target_ == GL_TEXTURE_2D ? GL_TEXTURE_2D : 118 GLenum target = target_ == GL_TEXTURE_2D ? GL_TEXTURE_2D :
120 FaceIndexToGLTarget(ii); 119 FaceIndexToGLTarget(ii);
121 int num_mips = ComputeMipMapCount(width, height, depth); 120 int num_mips = ComputeMipMapCount(width, height, depth);
122 for (int level = 1; level < num_mips; ++level) { 121 for (int level = 1; level < num_mips; ++level) {
123 width = std::max(1, width >> 1); 122 width = std::max(1, width >> 1);
124 height = std::max(1, height >> 1); 123 height = std::max(1, height >> 1);
125 depth = std::max(1, depth >> 1); 124 depth = std::max(1, depth >> 1);
126 SetLevelInfo(feature_info, 125 SetLevelInfo(feature_info,
127 target, 126 target,
128 level, 127 level,
129 info1.internal_format, 128 info1.internal_format,
130 width, 129 width,
131 height, 130 height,
132 depth, 131 depth,
133 info1.border, 132 info1.border,
134 info1.format, 133 info1.format,
135 info1.type, 134 info1.type,
136 cleared); 135 true);
137 } 136 }
138 } 137 }
139 138
140 return true; 139 return true;
141 } 140 }
142 141
143 void TextureManager::TextureInfo::SetTarget(GLenum target, GLint max_levels) { 142 void TextureManager::TextureInfo::SetTarget(GLenum target, GLint max_levels) {
144 DCHECK_EQ(0u, target_); // you can only set this once. 143 DCHECK_EQ(0u, target_); // you can only set this once.
145 target_ = target; 144 target_ = target;
146 size_t num_faces = (target == GL_TEXTURE_CUBE_MAP) ? 6 : 1; 145 size_t num_faces = (target == GL_TEXTURE_CUBE_MAP) ? 6 : 1;
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after
517 } 516 }
518 517
519 DCHECK_NE(0, num_uncleared_mips_); 518 DCHECK_NE(0, num_uncleared_mips_);
520 --num_uncleared_mips_; 519 --num_uncleared_mips_;
521 520
522 // NOTE: It seems kind of gross to call back into the decoder for this 521 // NOTE: It seems kind of gross to call back into the decoder for this
523 // but only the decoder knows all the state (like unpack_alignment_) that's 522 // but only the decoder knows all the state (like unpack_alignment_) that's
524 // needed to be able to call GL correctly. 523 // needed to be able to call GL correctly.
525 info.cleared = decoder->ClearLevel( 524 info.cleared = decoder->ClearLevel(
526 service_id_, target_, info.target, info.level, info.format, info.type, 525 service_id_, target_, info.target, info.level, info.format, info.type,
527 info.width, info.height); 526 info.width, info.height, immutable_);
528 if (!info.cleared) { 527 if (!info.cleared) {
529 ++num_uncleared_mips_; 528 ++num_uncleared_mips_;
530 } 529 }
531 return info.cleared; 530 return info.cleared;
532 } 531 }
533 532
534 TextureManager::TextureManager( 533 TextureManager::TextureManager(
535 GLint max_texture_size, 534 GLint max_texture_size,
536 GLint max_cube_map_texture_size) 535 GLint max_cube_map_texture_size)
537 : max_texture_size_(max_texture_size), 536 : max_texture_size_(max_texture_size),
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
784 ++num_unrenderable_textures_; 783 ++num_unrenderable_textures_;
785 } 784 }
786 if (!info->SafeToRenderFrom()) { 785 if (!info->SafeToRenderFrom()) {
787 ++num_unsafe_textures_; 786 ++num_unsafe_textures_;
788 } 787 }
789 return result; 788 return result;
790 } 789 }
791 790
792 bool TextureManager::MarkMipmapsGenerated( 791 bool TextureManager::MarkMipmapsGenerated(
793 const FeatureInfo* feature_info, 792 const FeatureInfo* feature_info,
794 TextureManager::TextureInfo* info, 793 TextureManager::TextureInfo* info) {
795 bool cleared) {
796 DCHECK(info); 794 DCHECK(info);
797 if (!info->CanRender(feature_info)) { 795 if (!info->CanRender(feature_info)) {
798 DCHECK_NE(0, num_unrenderable_textures_); 796 DCHECK_NE(0, num_unrenderable_textures_);
799 --num_unrenderable_textures_; 797 --num_unrenderable_textures_;
800 } 798 }
801 if (!info->SafeToRenderFrom()) { 799 if (!info->SafeToRenderFrom()) {
802 DCHECK_NE(0, num_unsafe_textures_); 800 DCHECK_NE(0, num_unsafe_textures_);
803 --num_unsafe_textures_; 801 --num_unsafe_textures_;
804 } 802 }
805 num_uncleared_mips_ -= info->num_uncleared_mips(); 803 num_uncleared_mips_ -= info->num_uncleared_mips();
806 DCHECK_GE(num_uncleared_mips_, 0); 804 DCHECK_GE(num_uncleared_mips_, 0);
807 bool result = info->MarkMipmapsGenerated(feature_info, cleared); 805 bool result = info->MarkMipmapsGenerated(feature_info);
808 num_uncleared_mips_ += info->num_uncleared_mips(); 806 num_uncleared_mips_ += info->num_uncleared_mips();
809 if (!info->CanRender(feature_info)) { 807 if (!info->CanRender(feature_info)) {
810 ++num_unrenderable_textures_; 808 ++num_unrenderable_textures_;
811 } 809 }
812 if (!info->SafeToRenderFrom()) { 810 if (!info->SafeToRenderFrom()) {
813 ++num_unsafe_textures_; 811 ++num_unsafe_textures_;
814 } 812 }
815 return result; 813 return result;
816 } 814 }
817 815
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
873 GLsizei TextureManager::ComputeMipMapCount( 871 GLsizei TextureManager::ComputeMipMapCount(
874 GLsizei width, GLsizei height, GLsizei depth) { 872 GLsizei width, GLsizei height, GLsizei depth) {
875 return 1 + base::bits::Log2Floor(std::max(std::max(width, height), depth)); 873 return 1 + base::bits::Log2Floor(std::max(std::max(width, height), depth));
876 } 874 }
877 875
878 876
879 } // namespace gles2 877 } // namespace gles2
880 } // namespace gpu 878 } // namespace gpu
881 879
882 880
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/texture_manager.h ('k') | gpu/command_buffer/service/texture_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698