summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpiman@chromium.org <piman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-04 03:25:26 +0000
committerpiman@chromium.org <piman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-04 03:25:26 +0000
commita26776fe79e4960432f0a8d42dd0fa814956ca04 (patch)
tree943d3eb7f5f989c0f97f1a9b064a315b9a66a086
parent6610080fc23e4d9ea394f7077ebea3d2fb365720 (diff)
downloadchromium_src-a26776fe79e4960432f0a8d42dd0fa814956ca04.zip
chromium_src-a26776fe79e4960432f0a8d42dd0fa814956ca04.tar.gz
chromium_src-a26776fe79e4960432f0a8d42dd0fa814956ca04.tar.bz2
Simplify mailbox handling in MailboxOutputSurface
With r202992 landed, We don't need to consume anymore before recycling, we only need to produce once, and we don't need to unbind from FBOs before doing so. BUG=None Review URL: https://chromiumcodereview.appspot.com/16305019 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@203823 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--content/renderer/gpu/mailbox_output_surface.cc23
-rw-r--r--content/renderer/gpu/mailbox_output_surface.h2
2 files changed, 3 insertions, 22 deletions
diff --git a/content/renderer/gpu/mailbox_output_surface.cc b/content/renderer/gpu/mailbox_output_surface.cc
index c1166fc..3af09e2 100644
--- a/content/renderer/gpu/mailbox_output_surface.cc
+++ b/content/renderer/gpu/mailbox_output_surface.cc
@@ -47,12 +47,10 @@ void MailboxOutputSurface::EnsureBackbuffer() {
TransferableFrame& texture = returned_textures_.front();
if (texture.size == size_) {
current_backing_ = texture;
- ConsumeTexture(texture);
returned_textures_.pop();
break;
}
- ConsumeTexture(texture);
context3d_->deleteTexture(texture.texture_id);
returned_textures_.pop();
}
@@ -60,7 +58,6 @@ void MailboxOutputSurface::EnsureBackbuffer() {
if (!current_backing_.texture_id) {
current_backing_.texture_id = context3d_->createTexture();
current_backing_.size = size_;
- context3d_->genMailboxCHROMIUM(current_backing_.mailbox.name);
context3d_->bindTexture(GL_TEXTURE_2D, current_backing_.texture_id);
context3d_->texParameteri(
GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
@@ -73,6 +70,9 @@ void MailboxOutputSurface::EnsureBackbuffer() {
context3d_->texImage2D(
GL_TEXTURE_2D, 0, GL_RGBA, size_.width(), size_.height(), 0,
GL_RGBA, GL_UNSIGNED_BYTE, NULL);
+ context3d_->genMailboxCHROMIUM(current_backing_.mailbox.name);
+ context3d_->produceTextureCHROMIUM(
+ GL_TEXTURE_2D, current_backing_.mailbox.name);
}
}
}
@@ -87,7 +87,6 @@ void MailboxOutputSurface::DiscardBackbuffer() {
while (!returned_textures_.empty()) {
const TransferableFrame& frame = returned_textures_.front();
- ConsumeTexture(frame);
context3d_->deleteTexture(frame.texture_id);
returned_textures_.pop();
}
@@ -128,12 +127,6 @@ void MailboxOutputSurface::SendFrameToParentCompositor(
DCHECK(size_ == current_backing_.size);
DCHECK(!current_backing_.mailbox.IsZero());
- context3d_->framebufferTexture2D(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0);
- context3d_->bindFramebuffer(GL_FRAMEBUFFER, 0);
- context3d_->bindTexture(GL_TEXTURE_2D, current_backing_.texture_id);
- context3d_->produceTextureCHROMIUM(
- GL_TEXTURE_2D, current_backing_.mailbox.name);
frame->gl_frame_data->mailbox = current_backing_.mailbox;
frame->gl_frame_data->size = current_backing_.size;
context3d_->flush();
@@ -165,7 +158,6 @@ void MailboxOutputSurface::OnSwapAck(const cc::CompositorFrameAck& ack) {
if (!is_backbuffer_discarded_) {
returned_textures_.push(*it);
} else {
- ConsumeTexture(*it);
context3d_->deleteTexture(it->texture_id);
}
@@ -195,15 +187,6 @@ void MailboxOutputSurface::PostSubBuffer(gfx::Rect rect,
DCHECK(GetNumAcksPending() < 2);
}
-void MailboxOutputSurface::ConsumeTexture(const TransferableFrame& frame) {
- DCHECK(!frame.mailbox.IsZero());
- if (frame.sync_point)
- context3d_->waitSyncPoint(frame.sync_point);
-
- context3d_->bindTexture(GL_TEXTURE_2D, frame.texture_id);
- context3d_->consumeTextureCHROMIUM(GL_TEXTURE_2D, frame.mailbox.name);
-}
-
size_t MailboxOutputSurface::GetNumAcksPending() {
DCHECK(pending_textures_.size());
return pending_textures_.size() - 1;
diff --git a/content/renderer/gpu/mailbox_output_surface.h b/content/renderer/gpu/mailbox_output_surface.h
index 9f2119f..34c25fe 100644
--- a/content/renderer/gpu/mailbox_output_surface.h
+++ b/content/renderer/gpu/mailbox_output_surface.h
@@ -57,8 +57,6 @@ class MailboxOutputSurface : public CompositorOutputSurface {
uint32 sync_point;
};
- void ConsumeTexture(const TransferableFrame& frame);
-
TransferableFrame current_backing_;
std::deque<TransferableFrame> pending_textures_;
std::queue<TransferableFrame> returned_textures_;