summaryrefslogtreecommitdiff
path: root/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp')
-rw-r--r--Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp22
1 files changed, 16 insertions, 6 deletions
diff --git a/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp b/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp
index 532665fbe..75b4e2d67 100644
--- a/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp
+++ b/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp
@@ -29,6 +29,7 @@
#include "cc/CCLayerImpl.h"
#include "cc/CCMathUtil.h"
+#include "cc/CCOcclusionTracker.h"
#include "cc/CCQuadCuller.h"
#include "cc/CCSharedQuadState.h"
#include "cc/CCSolidColorDrawQuad.h"
@@ -47,6 +48,7 @@ CCRenderPass::CCRenderPass(CCRenderSurface* targetSurface, int id)
, m_targetSurface(targetSurface)
, m_framebufferOutputRect(targetSurface->contentRect())
, m_hasTransparentBackground(true)
+ , m_hasOcclusionFromOutsideTargetSurface(false)
{
ASSERT(targetSurface);
ASSERT(id > 0);
@@ -54,35 +56,43 @@ CCRenderPass::CCRenderPass(CCRenderSurface* targetSurface, int id)
void CCRenderPass::appendQuadsForLayer(CCLayerImpl* layer, CCOcclusionTrackerImpl* occlusionTracker, bool& hadMissingTiles)
{
- CCQuadCuller quadCuller(m_quadList, layer, occlusionTracker, layer->hasDebugBorders());
+ const bool forSurface = false;
+ CCQuadCuller quadCuller(m_quadList, layer, occlusionTracker, layer->hasDebugBorders(), forSurface);
- OwnPtr<CCSharedQuadState> sharedQuadState = layer->createSharedQuadState();
+ OwnPtr<CCSharedQuadState> sharedQuadState = layer->createSharedQuadState(m_sharedQuadStateList.size());
layer->appendDebugBorderQuad(quadCuller, sharedQuadState.get());
layer->appendQuads(quadCuller, sharedQuadState.get(), hadMissingTiles);
m_sharedQuadStateList.append(sharedQuadState.release());
+
+ m_hasOcclusionFromOutsideTargetSurface |= quadCuller.hasOcclusionFromOutsideTargetSurface();
}
void CCRenderPass::appendQuadsForRenderSurfaceLayer(CCLayerImpl* layer, const CCRenderPass* contributingRenderPass, CCOcclusionTrackerImpl* occlusionTracker)
{
// FIXME: render surface layers should be a CCLayerImpl-derived class and
// not be handled specially here.
- CCQuadCuller quadCuller(m_quadList, layer, occlusionTracker, layer->hasDebugBorders());
+ const bool forSurface = true;
+ CCQuadCuller quadCuller(m_quadList, layer, occlusionTracker, layer->hasDebugBorders(), forSurface);
CCRenderSurface* surface = layer->renderSurface();
- OwnPtr<CCSharedQuadState> sharedQuadState = surface->createSharedQuadState();
+ OwnPtr<CCSharedQuadState> sharedQuadState = surface->createSharedQuadState(m_sharedQuadStateList.size());
bool isReplica = false;
surface->appendQuads(quadCuller, sharedQuadState.get(), isReplica, contributingRenderPass->id());
m_sharedQuadStateList.append(sharedQuadState.release());
+ m_hasOcclusionFromOutsideTargetSurface |= quadCuller.hasOcclusionFromOutsideTargetSurface();
+
if (!layer->hasReplica())
return;
// Add replica after the surface so that it appears below the surface.
- OwnPtr<CCSharedQuadState> replicaSharedQuadState = surface->createReplicaSharedQuadState();
+ OwnPtr<CCSharedQuadState> replicaSharedQuadState = surface->createReplicaSharedQuadState(m_sharedQuadStateList.size());
isReplica = true;
surface->appendQuads(quadCuller, replicaSharedQuadState.get(), isReplica, contributingRenderPass->id());
m_sharedQuadStateList.append(replicaSharedQuadState.release());
+
+ m_hasOcclusionFromOutsideTargetSurface |= quadCuller.hasOcclusionFromOutsideTargetSurface();
}
void CCRenderPass::appendQuadsToFillScreen(CCLayerImpl* rootLayer, SkColor screenBackgroundColor, const CCOcclusionTrackerImpl& occlusionTracker)
@@ -96,7 +106,7 @@ void CCRenderPass::appendQuadsToFillScreen(CCLayerImpl* rootLayer, SkColor scree
// Manually create the quad state for the gutter quads, as the root layer
// doesn't have any bounds and so can't generate this itself.
- OwnPtr<CCSharedQuadState> sharedQuadState = rootLayer->createSharedQuadState();
+ OwnPtr<CCSharedQuadState> sharedQuadState = rootLayer->createSharedQuadState(m_sharedQuadStateList.size());
WebTransformationMatrix transformToLayerSpace = rootLayer->screenSpaceTransform().inverse();
Vector<IntRect> fillRects = fillRegion.rects();
for (size_t i = 0; i < fillRects.size(); ++i) {