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

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

Issue 2014313002: StreamTextureImages can now override a Texture's service id (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add SetLevelImageState Created 4 years, 6 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 <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 return service_id_; 146 return service_id_;
147 } 147 }
148 148
149 void SetServiceId(GLuint service_id) { 149 void SetServiceId(GLuint service_id) {
150 DCHECK(service_id); 150 DCHECK(service_id);
151 DCHECK_EQ(owned_service_id_, service_id_); 151 DCHECK_EQ(owned_service_id_, service_id_);
152 service_id_ = service_id; 152 service_id_ = service_id;
153 owned_service_id_ = service_id; 153 owned_service_id_ = service_id;
154 } 154 }
155 155
156 // Causes us to report |service_id| as our service id, but does not delete
157 // it when we are destroyed. Will rebind any OES_EXTERNAL texture units to
158 // our new service id in all contexts. If |service_id| is zero, then we
159 // revert to our original service id.
160 void SetUnownedServiceId(GLuint service_id);
161
162 // Returns the target this texure was first bound to or 0 if it has not 156 // Returns the target this texure was first bound to or 0 if it has not
163 // been bound. Once a texture is bound to a specific target it can never be 157 // been bound. Once a texture is bound to a specific target it can never be
164 // bound to a different target. 158 // bound to a different target.
165 GLenum target() const { 159 GLenum target() const {
166 return target_; 160 return target_;
167 } 161 }
168 162
169 bool SafeToRenderFrom() const { 163 bool SafeToRenderFrom() const {
170 return cleared_; 164 return cleared_;
171 } 165 }
172 166
173 // Get the width/height/depth for a particular level. Returns false if level 167 // Get the width/height/depth for a particular level. Returns false if level
174 // does not exist. 168 // does not exist.
175 // |depth| is optional and can be nullptr. 169 // |depth| is optional and can be nullptr.
176 bool GetLevelSize( 170 bool GetLevelSize(
177 GLint target, GLint level, 171 GLint target, GLint level,
178 GLsizei* width, GLsizei* height, GLsizei* depth) const; 172 GLsizei* width, GLsizei* height, GLsizei* depth) const;
179 173
180 // Get the type of a level. Returns false if level does not exist. 174 // Get the type of a level. Returns false if level does not exist.
181 bool GetLevelType( 175 bool GetLevelType(
182 GLint target, GLint level, GLenum* type, GLenum* internal_format) const; 176 GLint target, GLint level, GLenum* type, GLenum* internal_format) const;
183 177
184 // Set the image for a particular level. 178 // Set the image for a particular level. If a GLStreamTextureImage was
179 // previously set with SetLevelStreamTextureImage(), this will reset
180 // |service_id_| back to |owned_service_id_|, removing the service id override
181 // set by the GLStreamTextureImage.
185 void SetLevelImage(GLenum target, 182 void SetLevelImage(GLenum target,
186 GLint level, 183 GLint level,
187 gl::GLImage* image, 184 gl::GLImage* image,
188 ImageState state); 185 ImageState state);
189 186
190 // Set the GLStreamTextureImage for a particular level. This is identical 187 // Set the GLStreamTextureImage for a particular level. This is like
191 // to SetLevelImage, but it also permits GetLevelStreamTextureImage to return 188 // SetLevelImage, but it also makes it optional to override |service_id_| with
192 // the image. 189 // a texture bound to the stream texture, and permits
190 // GetLevelStreamTextureImage to return the image. See
191 // SetStreamTextureServiceId() for the details of how |service_id| is used.
193 void SetLevelStreamTextureImage(GLenum target, 192 void SetLevelStreamTextureImage(GLenum target,
194 GLint level, 193 GLint level,
195 GLStreamTextureImage* image, 194 GLStreamTextureImage* image,
196 ImageState state); 195 ImageState state,
196 GLuint service_id);
197
198 // Set the ImageState for the image bound to the given level.
199 void SetLevelImageState(GLenum target, GLint level, ImageState state);
200
197 201
198 // Get the image associated with a particular level. Returns NULL if level 202 // Get the image associated with a particular level. Returns NULL if level
199 // does not exist. 203 // does not exist.
200 gl::GLImage* GetLevelImage(GLint target, 204 gl::GLImage* GetLevelImage(GLint target,
201 GLint level, 205 GLint level,
202 ImageState* state) const; 206 ImageState* state) const;
203 gl::GLImage* GetLevelImage(GLint target, GLint level) const; 207 gl::GLImage* GetLevelImage(GLint target, GLint level) const;
204 208
205 // Like GetLevelImage, but will return NULL if the image wasn't set via 209 // Like GetLevelImage, but will return NULL if the image wasn't set via
206 // a call to SetLevelStreamTextureImage. 210 // a call to SetLevelStreamTextureImage.
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 std::vector<LevelInfo> level_infos; 339 std::vector<LevelInfo> level_infos;
336 }; 340 };
337 341
338 // Helper for SetLevel*Image. |stream_texture_image| may be null. 342 // Helper for SetLevel*Image. |stream_texture_image| may be null.
339 void SetLevelImageInternal(GLenum target, 343 void SetLevelImageInternal(GLenum target,
340 GLint level, 344 GLint level,
341 gl::GLImage* image, 345 gl::GLImage* image,
342 GLStreamTextureImage* stream_texture_image, 346 GLStreamTextureImage* stream_texture_image,
343 ImageState state); 347 ImageState state);
344 348
345 // Helper for GetLevel*Image. Returns the LevelInfo for |target| and |level| 349 // Returns the LevelInfo for |target| and |level| if it's set, else NULL.
346 // if it's set, else NULL.
347 const LevelInfo* GetLevelInfo(GLint target, GLint level) const; 350 const LevelInfo* GetLevelInfo(GLint target, GLint level) const;
348 351
349 // Set the info for a particular level. 352 // Set the info for a particular level.
350 void SetLevelInfo(GLenum target, 353 void SetLevelInfo(GLenum target,
351 GLint level, 354 GLint level,
352 GLenum internal_format, 355 GLenum internal_format,
353 GLsizei width, 356 GLsizei width,
354 GLsizei height, 357 GLsizei height,
355 GLsizei depth, 358 GLsizei depth,
356 GLint border, 359 GLint border,
357 GLenum format, 360 GLenum format,
358 GLenum type, 361 GLenum type,
359 const gfx::Rect& cleared_rect); 362 const gfx::Rect& cleared_rect);
360 363
364 // Causes us to report |service_id| as our service id, but does not delete
365 // it when we are destroyed. Will rebind any OES_EXTERNAL texture units to
366 // our new service id in all contexts. If |service_id| is zero, then we
367 // revert to |owned_service_id_|.
368 void SetStreamTextureServiceId(GLuint service_id);
369
361 void MarkLevelAsInternalWorkaround(GLenum target, GLint level); 370 void MarkLevelAsInternalWorkaround(GLenum target, GLint level);
362 371
363 // In GLES2 "texture complete" means it has all required mips for filtering 372 // In GLES2 "texture complete" means it has all required mips for filtering
364 // down to a 1x1 pixel texture, they are in the correct order, they are all 373 // down to a 1x1 pixel texture, they are in the correct order, they are all
365 // the same format. 374 // the same format.
366 bool texture_complete() const { 375 bool texture_complete() const {
367 return texture_complete_; 376 return texture_complete_;
368 } 377 }
369 378
370 // In GLES2 "cube complete" means all 6 faces level 0 are defined, all the 379 // In GLES2 "cube complete" means all 6 faces level 0 are defined, all the
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 514
506 void UpdateBaseLevel(GLint base_level); 515 void UpdateBaseLevel(GLint base_level);
507 void UpdateMaxLevel(GLint max_level); 516 void UpdateMaxLevel(GLint max_level);
508 void UpdateNumMipLevels(); 517 void UpdateNumMipLevels();
509 518
510 // Increment the generation counter for all managers that have a reference to 519 // Increment the generation counter for all managers that have a reference to
511 // this texture. 520 // this texture.
512 void IncrementManagerServiceIdGeneration(); 521 void IncrementManagerServiceIdGeneration();
513 522
514 // Return the service id of the texture that we will delete when we are 523 // Return the service id of the texture that we will delete when we are
515 // destroyed. Normally, this is the same as service_id(), unless it is 524 // destroyed.
516 // overridden by SetUnownedServiceId.
517 GLuint owned_service_id() const { return owned_service_id_; } 525 GLuint owned_service_id() const { return owned_service_id_; }
518 526
519 GLenum GetCompatibilitySwizzleForChannel(GLenum channel); 527 GLenum GetCompatibilitySwizzleForChannel(GLenum channel);
520 void SetCompatibilitySwizzle(const CompatibilitySwizzle* swizzle); 528 void SetCompatibilitySwizzle(const CompatibilitySwizzle* swizzle);
521 529
522 MailboxManager* mailbox_manager_; 530 MailboxManager* mailbox_manager_;
523 531
524 // Info about each face and level of texture. 532 // Info about each face and level of texture.
525 std::vector<FaceInfo> face_infos_; 533 std::vector<FaceInfo> face_infos_;
526 534
527 // The texture refs that point to this Texture. 535 // The texture refs that point to this Texture.
528 typedef std::set<TextureRef*> RefSet; 536 typedef std::set<TextureRef*> RefSet;
529 RefSet refs_; 537 RefSet refs_;
530 538
531 // The single TextureRef that accounts for memory for this texture. Must be 539 // The single TextureRef that accounts for memory for this texture. Must be
532 // one of refs_. 540 // one of refs_.
533 TextureRef* memory_tracking_ref_; 541 TextureRef* memory_tracking_ref_;
534 542
535 // The id of the texure 543 // The id of the texture.
536 GLuint service_id_; 544 GLuint service_id_;
537 545
538 // The id of the texture that we are responsible for deleting. Normally, 546 // The id of the texture that we are responsible for deleting. Normally, this
539 // this is the same as service_id_, unless a call to SetUnownedServiceId 547 // is the same as |service_id_|, unless a GLStreamTextureImage with its own
540 // overrides it. In that case, we'll use the overridden service id (stored 548 // service id is bound. In that case the GLStreamTextureImage service id is
541 // in |service_id_|) for all purposes except deleting the texture name. 549 // stored in |service_id_| and overrides the owned service id for all purposes
542 // Whoever calls SetUnownedServiceId is assumed to handle deleting that id, 550 // except deleting the texture name.
543 // and only after we are either deleted or told to stop using it via
544 // another call to SetUnownedServiceId.
545 GLuint owned_service_id_; 551 GLuint owned_service_id_;
546 552
547 // Whether all renderable mips of this texture have been cleared. 553 // Whether all renderable mips of this texture have been cleared.
548 bool cleared_; 554 bool cleared_;
549 555
550 int num_uncleared_mips_; 556 int num_uncleared_mips_;
551 int num_npot_faces_; 557 int num_npot_faces_;
552 558
553 // The target. 0 if unset, otherwise GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP. 559 // The target. 0 if unset, otherwise GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP.
554 // Or GL_TEXTURE_2D_ARRAY or GL_TEXTURE_3D (for GLES3). 560 // Or GL_TEXTURE_2D_ARRAY or GL_TEXTURE_3D (for GLES3).
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
929 void SetLevelImage(TextureRef* ref, 935 void SetLevelImage(TextureRef* ref,
930 GLenum target, 936 GLenum target,
931 GLint level, 937 GLint level,
932 gl::GLImage* image, 938 gl::GLImage* image,
933 Texture::ImageState state); 939 Texture::ImageState state);
934 940
935 void SetLevelStreamTextureImage(TextureRef* ref, 941 void SetLevelStreamTextureImage(TextureRef* ref,
936 GLenum target, 942 GLenum target,
937 GLint level, 943 GLint level,
938 GLStreamTextureImage* image, 944 GLStreamTextureImage* image,
939 Texture::ImageState state); 945 Texture::ImageState state,
946 GLuint service_id);
947
948 void SetLevelImageState(TextureRef* ref,
949 GLenum target,
950 GLint level,
951 Texture::ImageState state);
940 952
941 size_t GetSignatureSize() const; 953 size_t GetSignatureSize() const;
942 954
943 void AddToSignature( 955 void AddToSignature(
944 TextureRef* ref, 956 TextureRef* ref,
945 GLenum target, 957 GLenum target,
946 GLint level, 958 GLint level,
947 std::string* signature) const; 959 std::string* signature) const;
948 960
949 void AddObserver(DestructionObserver* observer) { 961 void AddObserver(DestructionObserver* observer) {
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
1175 private: 1187 private:
1176 DecoderTextureState* texture_state_; 1188 DecoderTextureState* texture_state_;
1177 base::TimeTicks begin_time_; 1189 base::TimeTicks begin_time_;
1178 DISALLOW_COPY_AND_ASSIGN(ScopedTextureUploadTimer); 1190 DISALLOW_COPY_AND_ASSIGN(ScopedTextureUploadTimer);
1179 }; 1191 };
1180 1192
1181 } // namespace gles2 1193 } // namespace gles2
1182 } // namespace gpu 1194 } // namespace gpu
1183 1195
1184 #endif // GPU_COMMAND_BUFFER_SERVICE_TEXTURE_MANAGER_H_ 1196 #endif // GPU_COMMAND_BUFFER_SERVICE_TEXTURE_MANAGER_H_
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_decoder.cc ('k') | gpu/command_buffer/service/texture_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698