summaryrefslogtreecommitdiffstats
path: root/gpu
diff options
context:
space:
mode:
authorpiman@chromium.org <piman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-25 02:04:33 +0000
committerpiman@chromium.org <piman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-25 02:04:33 +0000
commit6d04d282ddbf9f69ade8c124459e6877fe085e38 (patch)
treefddc2a63627f9c7eeda538ca50f9beb2f5aadb8c /gpu
parent845260ab832a2f719972be9acc97f73bfce522ce (diff)
downloadchromium_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.txt6
-rw-r--r--gpu/command_buffer/service/mailbox_manager.cc1
-rw-r--r--gpu/command_buffer/service/texture_definition.cc2
-rw-r--r--gpu/command_buffer/service/texture_definition.h6
-rw-r--r--gpu/command_buffer/service/texture_manager.cc10
-rw-r--r--gpu/command_buffer/service/texture_manager.h1
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;
}