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

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

Issue 224763002: Remove default textures in (!bind_generates_resource) context groups. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 8 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 #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 "base/strings/stringprintf.h" 7 #include "base/strings/stringprintf.h"
8 #include "gpu/command_buffer/common/gles2_cmd_utils.h" 8 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
9 #include "gpu/command_buffer/service/context_state.h" 9 #include "gpu/command_buffer/service/context_state.h"
10 #include "gpu/command_buffer/service/error_state.h" 10 #include "gpu/command_buffer/service/error_state.h"
(...skipping 878 matching lines...) Expand 10 before | Expand all | Expand 10 after
889 TextureRef::~TextureRef() { 889 TextureRef::~TextureRef() {
890 manager_->StopTracking(this); 890 manager_->StopTracking(this);
891 texture_->RemoveTextureRef(this, manager_->have_context_); 891 texture_->RemoveTextureRef(this, manager_->have_context_);
892 manager_ = NULL; 892 manager_ = NULL;
893 } 893 }
894 894
895 TextureManager::TextureManager(MemoryTracker* memory_tracker, 895 TextureManager::TextureManager(MemoryTracker* memory_tracker,
896 FeatureInfo* feature_info, 896 FeatureInfo* feature_info,
897 GLint max_texture_size, 897 GLint max_texture_size,
898 GLint max_cube_map_texture_size) 898 GLint max_cube_map_texture_size)
899 : memory_tracker_managed_(new MemoryTypeTracker(memory_tracker, 899 : memory_tracker_managed_(
900 MemoryTracker::kManaged)), 900 new MemoryTypeTracker(memory_tracker, MemoryTracker::kManaged)),
901 memory_tracker_unmanaged_( 901 memory_tracker_unmanaged_(
902 new MemoryTypeTracker(memory_tracker, MemoryTracker::kUnmanaged)), 902 new MemoryTypeTracker(memory_tracker, MemoryTracker::kUnmanaged)),
903 feature_info_(feature_info), 903 feature_info_(feature_info),
904 framebuffer_manager_(NULL), 904 framebuffer_manager_(NULL),
905 max_texture_size_(max_texture_size), 905 max_texture_size_(max_texture_size),
906 max_cube_map_texture_size_(max_cube_map_texture_size), 906 max_cube_map_texture_size_(max_cube_map_texture_size),
907 max_levels_(ComputeMipMapCount(GL_TEXTURE_2D, 907 max_levels_(ComputeMipMapCount(GL_TEXTURE_2D,
908 max_texture_size, 908 max_texture_size,
909 max_texture_size, 909 max_texture_size,
910 max_texture_size)), 910 max_texture_size)),
911 max_cube_map_levels_(ComputeMipMapCount(GL_TEXTURE_CUBE_MAP, 911 max_cube_map_levels_(ComputeMipMapCount(GL_TEXTURE_CUBE_MAP,
912 max_cube_map_texture_size, 912 max_cube_map_texture_size,
913 max_cube_map_texture_size, 913 max_cube_map_texture_size,
914 max_cube_map_texture_size)), 914 max_cube_map_texture_size)),
915 use_default_textures_(false),
915 num_unrenderable_textures_(0), 916 num_unrenderable_textures_(0),
916 num_unsafe_textures_(0), 917 num_unsafe_textures_(0),
917 num_uncleared_mips_(0), 918 num_uncleared_mips_(0),
918 num_images_(0), 919 num_images_(0),
919 texture_count_(0), 920 texture_count_(0),
920 have_context_(true) { 921 have_context_(true) {
921 for (int ii = 0; ii < kNumDefaultTextures; ++ii) { 922 for (int ii = 0; ii < kNumDefaultTextures; ++ii) {
922 black_texture_ids_[ii] = 0; 923 black_texture_ids_[ii] = 0;
923 } 924 }
924 } 925 }
(...skipping 27 matching lines...) Expand all
952 GLuint* black_texture) { 953 GLuint* black_texture) {
953 static uint8 black[] = {0, 0, 0, 255}; 954 static uint8 black[] = {0, 0, 0, 255};
954 955
955 // Sampling a texture not associated with any EGLImage sibling will return 956 // Sampling a texture not associated with any EGLImage sibling will return
956 // black values according to the spec. 957 // black values according to the spec.
957 bool needs_initialization = (target != GL_TEXTURE_EXTERNAL_OES); 958 bool needs_initialization = (target != GL_TEXTURE_EXTERNAL_OES);
958 bool needs_faces = (target == GL_TEXTURE_CUBE_MAP); 959 bool needs_faces = (target == GL_TEXTURE_CUBE_MAP);
959 960
960 // Make default textures and texture for replacing non-renderable textures. 961 // Make default textures and texture for replacing non-renderable textures.
961 GLuint ids[2]; 962 GLuint ids[2];
962 glGenTextures(arraysize(ids), ids); 963 const unsigned long num_ids = use_default_textures_ ? 2 : 1;
963 for (unsigned long ii = 0; ii < arraysize(ids); ++ii) { 964 glGenTextures(num_ids, ids);
965 for (unsigned long ii = 0; ii < num_ids; ++ii) {
964 glBindTexture(target, ids[ii]); 966 glBindTexture(target, ids[ii]);
965 if (needs_initialization) { 967 if (needs_initialization) {
966 if (needs_faces) { 968 if (needs_faces) {
967 for (int jj = 0; jj < GLES2Util::kNumFaces; ++jj) { 969 for (int jj = 0; jj < GLES2Util::kNumFaces; ++jj) {
968 glTexImage2D(GLES2Util::IndexToGLFaceTarget(jj), 0, GL_RGBA, 1, 1, 0, 970 glTexImage2D(GLES2Util::IndexToGLFaceTarget(jj), 0, GL_RGBA, 1, 1, 0,
969 GL_RGBA, GL_UNSIGNED_BYTE, black); 971 GL_RGBA, GL_UNSIGNED_BYTE, black);
970 } 972 }
971 } else { 973 } else {
972 glTexImage2D(target, 0, GL_RGBA, 1, 1, 0, GL_RGBA, 974 glTexImage2D(target, 0, GL_RGBA, 1, 1, 0, GL_RGBA,
973 GL_UNSIGNED_BYTE, black); 975 GL_UNSIGNED_BYTE, black);
974 } 976 }
975 } 977 }
976 } 978 }
977 glBindTexture(target, 0); 979 glBindTexture(target, 0);
978 980
979 scoped_refptr<TextureRef> default_texture( 981 scoped_refptr<TextureRef> default_texture;
980 TextureRef::Create(this, 0, ids[1])); 982 if (use_default_textures_) {
981 SetTarget(default_texture.get(), target); 983 default_texture = TextureRef::Create(this, 0, ids[1]);
982 if (needs_faces) { 984 SetTarget(default_texture.get(), target);
983 for (int ii = 0; ii < GLES2Util::kNumFaces; ++ii) { 985 if (needs_faces) {
984 SetLevelInfo(default_texture.get(), 986 for (int ii = 0; ii < GLES2Util::kNumFaces; ++ii) {
985 GLES2Util::IndexToGLFaceTarget(ii), 987 SetLevelInfo(default_texture.get(),
986 0, 988 GLES2Util::IndexToGLFaceTarget(ii),
987 GL_RGBA, 989 0,
988 1, 990 GL_RGBA,
989 1, 991 1,
990 1, 992 1,
991 0, 993 1,
992 GL_RGBA, 994 0,
993 GL_UNSIGNED_BYTE, 995 GL_RGBA,
994 true); 996 GL_UNSIGNED_BYTE,
995 } 997 true);
996 } else { 998 }
997 if (needs_initialization) {
998 SetLevelInfo(default_texture.get(),
999 GL_TEXTURE_2D,
1000 0,
1001 GL_RGBA,
1002 1,
1003 1,
1004 1,
1005 0,
1006 GL_RGBA,
1007 GL_UNSIGNED_BYTE,
1008 true);
1009 } else { 999 } else {
1010 SetLevelInfo(default_texture.get(), 1000 if (needs_initialization) {
1011 GL_TEXTURE_EXTERNAL_OES, 1001 SetLevelInfo(default_texture.get(),
1012 0, 1002 GL_TEXTURE_2D,
1013 GL_RGBA, 1003 0,
1014 1, 1004 GL_RGBA,
1015 1, 1005 1,
1016 1, 1006 1,
1017 0, 1007 1,
1018 GL_RGBA, 1008 0,
1019 GL_UNSIGNED_BYTE, 1009 GL_RGBA,
1020 true); 1010 GL_UNSIGNED_BYTE,
1011 true);
1012 } else {
1013 SetLevelInfo(default_texture.get(),
1014 GL_TEXTURE_EXTERNAL_OES,
1015 0,
1016 GL_RGBA,
1017 1,
1018 1,
1019 1,
1020 0,
1021 GL_RGBA,
1022 GL_UNSIGNED_BYTE,
1023 true);
1024 }
1021 } 1025 }
1022 } 1026 }
1023 1027
1024 *black_texture = ids[0]; 1028 *black_texture = ids[0];
1025 return default_texture; 1029 return default_texture;
1026 } 1030 }
1027 1031
1028 bool TextureManager::ValidForTarget( 1032 bool TextureManager::ValidForTarget(
1029 GLenum target, GLint level, GLsizei width, GLsizei height, GLsizei depth) { 1033 GLenum target, GLint level, GLsizei width, GLsizei height, GLsizei depth) {
1030 GLsizei max_size = MaxSizeForTarget(target) >> level; 1034 GLsizei max_size = MaxSizeForTarget(target) >> level;
(...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after
1567 } 1571 }
1568 1572
1569 ScopedTextureUploadTimer::~ScopedTextureUploadTimer() { 1573 ScopedTextureUploadTimer::~ScopedTextureUploadTimer() {
1570 texture_state_->texture_upload_count++; 1574 texture_state_->texture_upload_count++;
1571 texture_state_->total_texture_upload_time += 1575 texture_state_->total_texture_upload_time +=
1572 base::TimeTicks::HighResNow() - begin_time_; 1576 base::TimeTicks::HighResNow() - begin_time_;
1573 } 1577 }
1574 1578
1575 } // namespace gles2 1579 } // namespace gles2
1576 } // namespace gpu 1580 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698