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

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

Issue 633773002: Optimized Texture::Update() function. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed issue with caching level0 and mip results Created 6 years, 2 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 #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 <algorithm> 8 #include <algorithm>
9 #include <list> 9 #include <list>
10 #include <set> 10 #include <set>
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 GLsizei width; 201 GLsizei width;
202 GLsizei height; 202 GLsizei height;
203 GLsizei depth; 203 GLsizei depth;
204 GLint border; 204 GLint border;
205 GLenum format; 205 GLenum format;
206 GLenum type; 206 GLenum type;
207 scoped_refptr<gfx::GLImage> image; 207 scoped_refptr<gfx::GLImage> image;
208 uint32 estimated_size; 208 uint32 estimated_size;
209 }; 209 };
210 210
211 struct FaceInfo {
212 FaceInfo();
213 ~FaceInfo();
214
215 GLsizei num_mip_levels;
216 std::vector<LevelInfo> level_infos;
217 };
218
211 // Set the info for a particular level. 219 // Set the info for a particular level.
212 void SetLevelInfo( 220 void SetLevelInfo(
213 const FeatureInfo* feature_info, 221 const FeatureInfo* feature_info,
214 GLenum target, 222 GLenum target,
215 GLint level, 223 GLint level,
216 GLenum internal_format, 224 GLenum internal_format,
217 GLsizei width, 225 GLsizei width,
218 GLsizei height, 226 GLsizei height,
219 GLsizei depth, 227 GLsizei depth,
220 GLint border, 228 GLint border,
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 return min_filter_ != GL_NEAREST && min_filter_ != GL_LINEAR; 277 return min_filter_ != GL_NEAREST && min_filter_ != GL_LINEAR;
270 } 278 }
271 279
272 // True if this texture meets all the GLES2 criteria for rendering. 280 // True if this texture meets all the GLES2 criteria for rendering.
273 // See section 3.8.2 of the GLES2 spec. 281 // See section 3.8.2 of the GLES2 spec.
274 bool CanRender(const FeatureInfo* feature_info) const; 282 bool CanRender(const FeatureInfo* feature_info) const;
275 283
276 // Returns true if mipmaps can be generated by GL. 284 // Returns true if mipmaps can be generated by GL.
277 bool CanGenerateMipmaps(const FeatureInfo* feature_info) const; 285 bool CanGenerateMipmaps(const FeatureInfo* feature_info) const;
278 286
287 // Returns true if any of the texture dimensions are not a power of two.
288 static bool TextureIsNPOT(GLsizei width, GLsizei height, GLsizei depth);
289
290 // Returns true if texture face is complete relative to the first face.
291 static bool TextureFaceComplete(const Texture::LevelInfo& first_face,
292 size_t face_index,
293 GLenum target,
294 GLenum internal_format,
295 GLsizei width,
296 GLsizei height,
297 GLsizei depth,
298 GLenum format,
299 GLenum type);
300
301 // Returns true if texture mip level is complete relative to first level.
302 static bool TextureMipComplete(const Texture::LevelInfo& level0_face,
303 GLenum target,
304 GLint level,
305 GLenum internal_format,
306 GLsizei width,
307 GLsizei height,
308 GLsizei depth,
309 GLenum format,
310 GLenum type);
311
279 // Sets the Texture's target 312 // Sets the Texture's target
280 // Parameters: 313 // Parameters:
281 // target: GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP or 314 // target: GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP or
282 // GL_TEXTURE_EXTERNAL_OES or GL_TEXTURE_RECTANGLE_ARB 315 // GL_TEXTURE_EXTERNAL_OES or GL_TEXTURE_RECTANGLE_ARB
283 // max_levels: The maximum levels this type of target can have. 316 // max_levels: The maximum levels this type of target can have.
284 void SetTarget( 317 void SetTarget(
285 const FeatureInfo* feature_info, GLenum target, GLint max_levels); 318 const FeatureInfo* feature_info, GLenum target, GLint max_levels);
286 319
287 // Update info about this texture. 320 // Update info about this texture.
288 void Update(const FeatureInfo* feature_info); 321 void Update(const FeatureInfo* feature_info);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 // texture. 353 // texture.
321 void UpdateHasImages(); 354 void UpdateHasImages();
322 355
323 // Increment the framebuffer state change count in all the managers 356 // Increment the framebuffer state change count in all the managers
324 // referencing this texture. 357 // referencing this texture.
325 void IncAllFramebufferStateChangeCount(); 358 void IncAllFramebufferStateChangeCount();
326 359
327 MailboxManager* mailbox_manager_; 360 MailboxManager* mailbox_manager_;
328 361
329 // Info about each face and level of texture. 362 // Info about each face and level of texture.
330 std::vector<std::vector<LevelInfo> > level_infos_; 363 std::vector<FaceInfo> face_infos_;
331 364
332 // The texture refs that point to this Texture. 365 // The texture refs that point to this Texture.
333 typedef std::set<TextureRef*> RefSet; 366 typedef std::set<TextureRef*> RefSet;
334 RefSet refs_; 367 RefSet refs_;
335 368
336 // The single TextureRef that accounts for memory for this texture. Must be 369 // The single TextureRef that accounts for memory for this texture. Must be
337 // one of refs_. 370 // one of refs_.
338 TextureRef* memory_tracking_ref_; 371 TextureRef* memory_tracking_ref_;
339 372
340 // The id of the texure 373 // The id of the texure
341 GLuint service_id_; 374 GLuint service_id_;
342 375
343 // Whether all renderable mips of this texture have been cleared. 376 // Whether all renderable mips of this texture have been cleared.
344 bool cleared_; 377 bool cleared_;
345 378
346 int num_uncleared_mips_; 379 int num_uncleared_mips_;
380 int num_npot_faces_;
347 381
348 // The target. 0 if unset, otherwise GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP. 382 // The target. 0 if unset, otherwise GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP.
349 GLenum target_; 383 GLenum target_;
350 384
351 // Texture parameters. 385 // Texture parameters.
352 GLenum min_filter_; 386 GLenum min_filter_;
353 GLenum mag_filter_; 387 GLenum mag_filter_;
354 GLenum wrap_s_; 388 GLenum wrap_s_;
355 GLenum wrap_t_; 389 GLenum wrap_t_;
356 GLenum usage_; 390 GLenum usage_;
357 GLenum pool_; 391 GLenum pool_;
358 392
359 // The maximum level that has been set. 393 // The maximum level that has been set.
360 GLint max_level_set_; 394 GLint max_level_set_;
361 395
362 // Whether or not this texture is "texture complete" 396 // Whether or not this texture is "texture complete"
363 bool texture_complete_; 397 bool texture_complete_;
364 398
399 // Whether mip levels have changed and should be reverified.
400 bool texture_mips_dirty_;
401 bool texture_mips_complete_;
402
365 // Whether or not this texture is "cube complete" 403 // Whether or not this texture is "cube complete"
366 bool cube_complete_; 404 bool cube_complete_;
367 405
406 // Whether any level 0 faces have changed and should be reverified.
407 bool texture_level0_dirty_;
408 bool texture_level0_complete_;
409
368 // Whether or not this texture is non-power-of-two 410 // Whether or not this texture is non-power-of-two
369 bool npot_; 411 bool npot_;
370 412
371 // Whether this texture has ever been bound. 413 // Whether this texture has ever been bound.
372 bool has_been_bound_; 414 bool has_been_bound_;
373 415
374 // The number of framebuffers this texture is attached to. 416 // The number of framebuffers this texture is attached to.
375 int framebuffer_attachment_count_; 417 int framebuffer_attachment_count_;
376 418
377 // Whether the texture is immutable and no further changes to the format 419 // Whether the texture is immutable and no further changes to the format
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after
824 private: 866 private:
825 DecoderTextureState* texture_state_; 867 DecoderTextureState* texture_state_;
826 base::TimeTicks begin_time_; 868 base::TimeTicks begin_time_;
827 DISALLOW_COPY_AND_ASSIGN(ScopedTextureUploadTimer); 869 DISALLOW_COPY_AND_ASSIGN(ScopedTextureUploadTimer);
828 }; 870 };
829 871
830 } // namespace gles2 872 } // namespace gles2
831 } // namespace gpu 873 } // namespace gpu
832 874
833 #endif // GPU_COMMAND_BUFFER_SERVICE_TEXTURE_MANAGER_H_ 875 #endif // GPU_COMMAND_BUFFER_SERVICE_TEXTURE_MANAGER_H_
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/texture_definition.cc ('k') | gpu/command_buffer/service/texture_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698