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 #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/stringprintf.h" | 7 #include "base/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/error_state.h" | 9 #include "gpu/command_buffer/service/error_state.h" |
10 #include "gpu/command_buffer/service/feature_info.h" | 10 #include "gpu/command_buffer/service/feature_info.h" |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 wrap_s_(GL_REPEAT), | 107 wrap_s_(GL_REPEAT), |
108 wrap_t_(GL_REPEAT), | 108 wrap_t_(GL_REPEAT), |
109 usage_(GL_NONE), | 109 usage_(GL_NONE), |
110 pool_(GL_TEXTURE_POOL_UNMANAGED_CHROMIUM), | 110 pool_(GL_TEXTURE_POOL_UNMANAGED_CHROMIUM), |
111 max_level_set_(-1), | 111 max_level_set_(-1), |
112 texture_complete_(false), | 112 texture_complete_(false), |
113 cube_complete_(false), | 113 cube_complete_(false), |
114 npot_(false), | 114 npot_(false), |
115 has_been_bound_(false), | 115 has_been_bound_(false), |
116 framebuffer_attachment_count_(0), | 116 framebuffer_attachment_count_(0), |
117 owned_(true), | |
118 stream_texture_(false), | 117 stream_texture_(false), |
119 immutable_(false), | 118 immutable_(false), |
120 estimated_size_(0), | 119 estimated_size_(0), |
121 can_render_condition_(CAN_RENDER_ALWAYS) { | 120 can_render_condition_(CAN_RENDER_ALWAYS) { |
122 } | 121 } |
123 | 122 |
124 Texture::~Texture() { | 123 Texture::~Texture() { |
125 if (mailbox_manager_) | 124 if (mailbox_manager_) |
126 mailbox_manager_->TextureDeleted(this); | 125 mailbox_manager_->TextureDeleted(this); |
127 } | 126 } |
128 | 127 |
129 void Texture::AddTextureRef(TextureRef* ref) { | 128 void Texture::AddTextureRef(TextureRef* ref) { |
130 DCHECK(refs_.find(ref) == refs_.end()); | 129 DCHECK(refs_.find(ref) == refs_.end()); |
131 refs_.insert(ref); | 130 refs_.insert(ref); |
132 if (!memory_tracking_ref_) { | 131 if (!memory_tracking_ref_) { |
133 memory_tracking_ref_ = ref; | 132 memory_tracking_ref_ = ref; |
134 GetMemTracker()->TrackMemAlloc(estimated_size()); | 133 GetMemTracker()->TrackMemAlloc(estimated_size()); |
135 } | 134 } |
136 } | 135 } |
137 | 136 |
138 void Texture::RemoveTextureRef(TextureRef* ref, bool have_context) { | 137 void Texture::RemoveTextureRef(TextureRef* ref, bool have_context) { |
139 if (memory_tracking_ref_ == ref) { | 138 if (memory_tracking_ref_ == ref) { |
140 GetMemTracker()->TrackMemFree(estimated_size()); | 139 GetMemTracker()->TrackMemFree(estimated_size()); |
141 memory_tracking_ref_ = NULL; | 140 memory_tracking_ref_ = NULL; |
142 } | 141 } |
143 size_t result = refs_.erase(ref); | 142 size_t result = refs_.erase(ref); |
144 DCHECK_EQ(result, 1u); | 143 DCHECK_EQ(result, 1u); |
145 if (refs_.empty()) { | 144 if (refs_.empty()) { |
146 if (owned_ && have_context) { | 145 if (have_context) { |
147 GLuint id = service_id(); | 146 GLuint id = service_id(); |
148 glDeleteTextures(1, &id); | 147 glDeleteTextures(1, &id); |
149 } | 148 } |
150 delete this; | 149 delete this; |
151 } else if (memory_tracking_ref_ == NULL) { | 150 } else if (memory_tracking_ref_ == NULL) { |
152 // TODO(piman): tune ownership semantics for cross-context group shared | 151 // TODO(piman): tune ownership semantics for cross-context group shared |
153 // textures. | 152 // textures. |
154 memory_tracking_ref_ = *refs_.begin(); | 153 memory_tracking_ref_ = *refs_.begin(); |
155 GetMemTracker()->TrackMemAlloc(estimated_size()); | 154 GetMemTracker()->TrackMemAlloc(estimated_size()); |
156 } | 155 } |
(...skipping 878 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1035 depth, | 1034 depth, |
1036 border, | 1035 border, |
1037 format, | 1036 format, |
1038 type, | 1037 type, |
1039 cleared); | 1038 cleared); |
1040 texture->GetMemTracker()->TrackMemAlloc(texture->estimated_size()); | 1039 texture->GetMemTracker()->TrackMemAlloc(texture->estimated_size()); |
1041 } | 1040 } |
1042 | 1041 |
1043 Texture* TextureManager::Produce(TextureRef* ref) { | 1042 Texture* TextureManager::Produce(TextureRef* ref) { |
1044 DCHECK(ref); | 1043 DCHECK(ref); |
1045 Texture* texture = ref->texture(); | 1044 return ref->texture(); |
1046 if (!texture->owned_) | |
1047 return NULL; | |
1048 return texture; | |
1049 } | 1045 } |
1050 | 1046 |
1051 TextureRef* TextureManager::Consume( | 1047 TextureRef* TextureManager::Consume( |
1052 GLuint client_id, | 1048 GLuint client_id, |
1053 Texture* texture) { | 1049 Texture* texture) { |
1054 DCHECK(client_id); | 1050 DCHECK(client_id); |
1055 scoped_refptr<TextureRef> ref(new TextureRef(this, client_id, texture)); | 1051 scoped_refptr<TextureRef> ref(new TextureRef(this, client_id, texture)); |
1056 bool result = textures_.insert(std::make_pair(client_id, ref)).second; | 1052 bool result = textures_.insert(std::make_pair(client_id, ref)).second; |
1057 DCHECK(result); | 1053 DCHECK(result); |
1058 return ref.get(); | 1054 return ref.get(); |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1219 } | 1215 } |
1220 | 1216 |
1221 void TextureManager::IncFramebufferStateChangeCount() { | 1217 void TextureManager::IncFramebufferStateChangeCount() { |
1222 if (framebuffer_manager_) | 1218 if (framebuffer_manager_) |
1223 framebuffer_manager_->IncFramebufferStateChangeCount(); | 1219 framebuffer_manager_->IncFramebufferStateChangeCount(); |
1224 | 1220 |
1225 } | 1221 } |
1226 | 1222 |
1227 } // namespace gles2 | 1223 } // namespace gles2 |
1228 } // namespace gpu | 1224 } // namespace gpu |
OLD | NEW |