diff options
author | piman@chromium.org <piman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-25 02:04:33 +0000 |
---|---|---|
committer | piman@chromium.org <piman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-25 02:04:33 +0000 |
commit | 6d04d282ddbf9f69ade8c124459e6877fe085e38 (patch) | |
tree | fddc2a63627f9c7eeda538ca50f9beb2f5aadb8c /gpu | |
parent | 845260ab832a2f719972be9acc97f73bfce522ce (diff) | |
download | chromium_src-6d04d282ddbf9f69ade8c124459e6877fe085e38.zip chromium_src-6d04d282ddbf9f69ade8c124459e6877fe085e38.tar.gz chromium_src-6d04d282ddbf9f69ade8c124459e6877fe085e38.tar.bz2 |
Allow immutable textures into mailboxes
BUG=None
Review URL: https://chromiumcodereview.appspot.com/10984009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@158496 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu')
-rw-r--r-- | gpu/GLES2/extensions/CHROMIUM/CHROMIUM_texture_mailbox.txt | 6 | ||||
-rw-r--r-- | gpu/command_buffer/service/mailbox_manager.cc | 1 | ||||
-rw-r--r-- | gpu/command_buffer/service/texture_definition.cc | 2 | ||||
-rw-r--r-- | gpu/command_buffer/service/texture_definition.h | 6 | ||||
-rw-r--r-- | gpu/command_buffer/service/texture_manager.cc | 10 | ||||
-rw-r--r-- | gpu/command_buffer/service/texture_manager.h | 1 |
6 files changed, 14 insertions, 12 deletions
diff --git a/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_texture_mailbox.txt b/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_texture_mailbox.txt index 01b3edc..5a0a358 100644 --- a/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_texture_mailbox.txt +++ b/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_texture_mailbox.txt @@ -43,7 +43,8 @@ New Procedures and Functions zero by zero and the texture object is therefore incomplete. If the mailbox previously contained image data, the old image data is deleted. The state of the bound texture object is not saved in the mailbox, only the image - data. + data, as well as the immutable state. The texture object is no longer + immutable. If glProduceTextureCHROMIUM generates an error, the associated image data is preserved in the texture object. @@ -75,7 +76,8 @@ New Procedures and Functions Redefines the image data of the currently bound texture object with the image data in the mailbox and empties the mailbox. The state of the currently bound texture object is not modified, only the image data. All - levels are redefined. + levels are redefined, and the immutable state is set according to the + contents of the mailbox. If glConsumeTextureCHROMIUM generates an error, the associated image data is preserved in the texture object. diff --git a/gpu/command_buffer/service/mailbox_manager.cc b/gpu/command_buffer/service/mailbox_manager.cc index 43cb59b..9cdf0bc 100644 --- a/gpu/command_buffer/service/mailbox_manager.cc +++ b/gpu/command_buffer/service/mailbox_manager.cc @@ -77,7 +77,6 @@ void MailboxManager::DestroyOwnedTextures(TextureManager* owner, TextureDefinitionMap::iterator current_it = it; ++it; if (current_it->second.owner == owner) { - NOTREACHED(); GLuint service_id = current_it->second.definition->ReleaseServiceId(); if (have_context) glDeleteTextures(1, &service_id); diff --git a/gpu/command_buffer/service/texture_definition.cc b/gpu/command_buffer/service/texture_definition.cc index 731ff6f..098584f 100644 --- a/gpu/command_buffer/service/texture_definition.cc +++ b/gpu/command_buffer/service/texture_definition.cc @@ -29,9 +29,11 @@ TextureDefinition::LevelInfo::LevelInfo(GLenum target, TextureDefinition::TextureDefinition(GLenum target, GLuint service_id, + bool immutable, const LevelInfos& level_infos) : target_(target), service_id_(service_id), + immutable_(immutable), level_infos_(level_infos) { } diff --git a/gpu/command_buffer/service/texture_definition.h b/gpu/command_buffer/service/texture_definition.h index 520c6f8..9ea9357 100644 --- a/gpu/command_buffer/service/texture_definition.h +++ b/gpu/command_buffer/service/texture_definition.h @@ -46,6 +46,7 @@ class GPU_EXPORT TextureDefinition { TextureDefinition(GLenum target, GLuint service_id, + bool immutable, const LevelInfos& level_infos); ~TextureDefinition(); @@ -55,6 +56,8 @@ class GPU_EXPORT TextureDefinition { GLuint ReleaseServiceId(); + bool immutable() const { return immutable_; } + const LevelInfos& level_infos() const { return level_infos_; } @@ -62,6 +65,7 @@ class GPU_EXPORT TextureDefinition { private: GLenum target_; GLuint service_id_; + bool immutable_; std::vector<std::vector<LevelInfo> > level_infos_; DISALLOW_COPY_AND_ASSIGN(TextureDefinition); @@ -71,5 +75,3 @@ class GPU_EXPORT TextureDefinition { } // namespace gpu #endif // GPU_COMMAND_BUFFER_SERVICE_TEXTURE_DEFINITION_H_ - - diff --git a/gpu/command_buffer/service/texture_manager.cc b/gpu/command_buffer/service/texture_manager.cc index 3c30519..aa78668 100644 --- a/gpu/command_buffer/service/texture_manager.cc +++ b/gpu/command_buffer/service/texture_manager.cc @@ -861,9 +861,6 @@ TextureDefinition* TextureManager::Save(TextureInfo* info) { if (info->IsAttachedToFramebuffer()) return NULL; - if (info->IsImmutable()) - return NULL; - TextureDefinition::LevelInfos level_infos(info->level_infos_.size()); for (size_t face = 0; face < level_infos.size(); ++face) { GLenum target = info->target() == GL_TEXTURE_2D ? @@ -897,13 +894,16 @@ TextureDefinition* TextureManager::Save(TextureInfo* info) { } GLuint old_service_id = info->service_id(); + bool immutable = info->IsImmutable(); GLuint new_service_id = 0; glGenTextures(1, &new_service_id); info->SetServiceId(new_service_id); + info->SetImmutable(false); return new TextureDefinition(info->target(), old_service_id, + immutable, level_infos); } @@ -916,9 +916,6 @@ bool TextureManager::Restore(TextureInfo* info, if (info->IsAttachedToFramebuffer()) return false; - if (info->IsImmutable()) - return false; - if (info->target() != definition->target()) return false; @@ -951,6 +948,7 @@ bool TextureManager::Restore(TextureInfo* info, GLuint old_service_id = info->service_id(); glDeleteTextures(1, &old_service_id); info->SetServiceId(definition->ReleaseServiceId()); + info->SetImmutable(definition->immutable()); return true; } diff --git a/gpu/command_buffer/service/texture_manager.h b/gpu/command_buffer/service/texture_manager.h index 9fa01ab..26c0c0c 100644 --- a/gpu/command_buffer/service/texture_manager.h +++ b/gpu/command_buffer/service/texture_manager.h @@ -170,7 +170,6 @@ class GPU_EXPORT TextureManager { } void SetImmutable(bool immutable) { - DCHECK(!immutable_); immutable_ = immutable; } |