Changeset 119419 in webkit
- Timestamp:
- Jun 4, 2012 12:53:39 PM (12 years ago)
- Location:
- trunk/Source
- Files:
-
- 19 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r119409 r119419 1 2012-06-04 Dana Jansens <danakj@chromium.org> 2 3 [chromium] Make LayerRendererChromium use RenderPasses instead of RenderSurfaces 4 https://bugs.webkit.org/show_bug.cgi?id=88132 5 6 Reviewed by Adrienne Walker. 7 8 This patch is partly renaming, partly moving data into CCRenderPass 9 and CCRenderPassDrawQuad. LayerRendererChromium should accept as input 10 a set of RenderPasses and this should be sufficient for drawing. It 11 should have no notion of RenderSurfaces at all. 12 13 First, what isn't done: RenderSurfaces still hold the textures 14 where RenderPasses are drawn to/from, so that these textures can 15 persist across frames. This will be addressed separately. 16 17 Otherwise, this completely removes the concept of RenderSurface from 18 LayerRenderChromium and the CCDrawQuad, replacing it with RenderPass. 19 The "renderSurfaceTextureManager" is renamed to the "implTextureManager" 20 and like-wise for the TextureAllocator, as these are not used 21 exclusively for render surfaces (passes), and a texture manager for 22 render passes that does not require a RenderSurface* will be the focus 23 of future changes. 24 25 Covered by existing tests. 26 27 * WebCore.gypi: 28 * platform/graphics/chromium/LayerRendererChromium.cpp: 29 (WebCore::LayerRendererChromium::LayerRendererChromium): 30 (WebCore::LayerRendererChromium::setVisible): 31 (WebCore::LayerRendererChromium::releaseRenderPassTextures): 32 (WebCore::LayerRendererChromium::viewportChanged): 33 (WebCore::LayerRendererChromium::clearRenderPass): 34 (WebCore::LayerRendererChromium::beginDrawingFrame): 35 (WebCore::LayerRendererChromium::drawRenderPass): 36 (WebCore::LayerRendererChromium::drawQuad): 37 (WebCore::LayerRendererChromium::drawBackgroundFilters): 38 (WebCore::LayerRendererChromium::drawRenderPassQuad): 39 (WebCore::LayerRendererChromium::copyPlaneToTexture): 40 (WebCore::LayerRendererChromium::drawHeadsUpDisplay): 41 (WebCore::LayerRendererChromium::finishDrawingFrame): 42 (WebCore::LayerRendererChromium::copyTextureToFramebuffer): 43 (WebCore::LayerRendererChromium::getFramebufferTexture): 44 (WebCore::LayerRendererChromium::isCurrentRenderPass): 45 (WebCore::LayerRendererChromium::useRenderPass): 46 (WebCore::LayerRendererChromium::useManagedTexture): 47 (WebCore::LayerRendererChromium::bindFramebufferToTexture): 48 (WebCore::LayerRendererChromium::setScissorToRect): 49 (WebCore::LayerRendererChromium::setDrawFramebufferRect): 50 (WebCore::LayerRendererChromium::initializeSharedObjects): 51 (WebCore::LayerRendererChromium::renderPassProgram): 52 (WebCore::LayerRendererChromium::renderPassProgramAA): 53 (WebCore::LayerRendererChromium::renderPassMaskProgram): 54 (WebCore::LayerRendererChromium::renderPassMaskProgramAA): 55 (WebCore::LayerRendererChromium::cleanupSharedObjects): 56 * platform/graphics/chromium/LayerRendererChromium.h: 57 (WebCore): 58 (LayerRendererChromium): 59 * platform/graphics/chromium/cc/CCDrawQuad.cpp: 60 (WebCore::CCDrawQuad::toRenderPassDrawQuad): 61 * platform/graphics/chromium/cc/CCDrawQuad.h: 62 (WebCore): 63 (CCDrawQuad): 64 * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp: 65 (WebCore::CCHeadsUpDisplay::draw): 66 * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp: 67 (WebCore::CCLayerTreeHostImpl::calculateRenderPasses): 68 (WebCore::CCLayerTreeHostImpl::drawLayers): 69 * platform/graphics/chromium/cc/CCQuadCuller.cpp: 70 * platform/graphics/chromium/cc/CCRenderPass.cpp: 71 (WebCore::CCRenderPass::CCRenderPass): 72 (WebCore::CCRenderPass::appendQuadsForRenderSurfaceLayer): 73 * platform/graphics/chromium/cc/CCRenderPass.h: 74 (CCRenderPass): 75 (WebCore::CCRenderPass::framebufferOutputRect): 76 * platform/graphics/chromium/cc/CCRenderPassDrawQuad.cpp: Renamed from Source/WebCore/platform/graphics/chromium/cc/CCRenderSurfaceDrawQuad.cpp. 77 (WebCore): 78 (WebCore::CCRenderPassDrawQuad::create): 79 (WebCore::CCRenderPassDrawQuad::CCRenderPassDrawQuad): 80 * platform/graphics/chromium/cc/CCRenderPassDrawQuad.h: Renamed from Source/WebCore/platform/graphics/chromium/cc/CCRenderSurfaceDrawQuad.h. 81 (WebCore): 82 (CCRenderPassDrawQuad): 83 (WebCore::CCRenderPassDrawQuad::renderPass): 84 (WebCore::CCRenderPassDrawQuad::isReplica): 85 (WebCore::CCRenderPassDrawQuad::maskTextureId): 86 (WebCore::CCRenderPassDrawQuad::filters): 87 (WebCore::CCRenderPassDrawQuad::backgroundFilters): 88 * platform/graphics/chromium/cc/CCRenderSurface.cpp: 89 (WebCore::CCRenderSurface::prepareContentsTexture): 90 (WebCore::CCRenderSurface::prepareBackgroundTexture): 91 (WebCore::CCRenderSurface::appendQuads): 92 * platform/graphics/chromium/cc/CCRenderSurface.h: 93 (WebCore): 94 (CCRenderSurface): 95 * platform/graphics/chromium/cc/CCRenderer.h: 96 (CCRenderer): 97 * platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp: 98 (WebCore::CCScrollbarLayerImpl::willDraw): 99 * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp: 100 (WebCore::CCVideoLayerImpl::reserveTextures): 101 1 102 2012-06-04 Abhishek Arya <inferno@chromium.org> 2 103 -
trunk/Source/WebCore/WebCore.gypi
r119367 r119419 3730 3730 'platform/graphics/chromium/cc/CCRenderPass.cpp', 3731 3731 'platform/graphics/chromium/cc/CCRenderPass.h', 3732 'platform/graphics/chromium/cc/CCRenderPassDrawQuad.cpp', 3733 'platform/graphics/chromium/cc/CCRenderPassDrawQuad.h', 3732 3734 'platform/graphics/chromium/cc/CCRenderSurface.cpp', 3733 3735 'platform/graphics/chromium/cc/CCRenderSurface.h', 3734 'platform/graphics/chromium/cc/CCRenderSurfaceDrawQuad.cpp',3735 'platform/graphics/chromium/cc/CCRenderSurfaceDrawQuad.h',3736 3736 'platform/graphics/chromium/cc/CCRenderSurfaceFilters.cpp', 3737 3737 'platform/graphics/chromium/cc/CCRenderSurfaceFilters.h', -
trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
r119401 r119419 46 46 #include "PlatformColor.h" 47 47 #include "PlatformContextSkia.h" 48 #include "RenderSurfaceChromium.h"49 48 #include "SharedGraphicsContext3D.h" 50 49 #include "SkBitmap.h" … … 64 63 #include "cc/CCProxy.h" 65 64 #include "cc/CCRenderPass.h" 66 #include "cc/CCRender SurfaceDrawQuad.h"65 #include "cc/CCRenderPassDrawQuad.h" 67 66 #include "cc/CCRenderSurfaceFilters.h" 68 67 #include "cc/CCSolidColorDrawQuad.h" … … 231 230 TextureUploaderOption textureUploaderSetting) 232 231 : CCRenderer(client) 233 , m_currentRender Surface(0)232 , m_currentRenderPass(0) 234 233 , m_currentManagedTexture(0) 235 234 , m_offscreenFramebufferId(0) 236 235 , m_sharedGeometryQuad(FloatRect(-0.5f, -0.5f, 1.0f, 1.0f)) 237 236 , m_context(context) 238 , m_defaultRender Surface(0)237 , m_defaultRenderPass(0) 239 238 , m_isViewportChanged(false) 240 239 , m_isFramebufferDiscarded(false) … … 362 361 { 363 362 if (!visible) 364 releaseRender SurfaceTextures();363 releaseRenderPassTextures(); 365 364 366 365 // TODO: Replace setVisibilityCHROMIUM with an extension to explicitly manage front/backbuffers … … 372 371 } 373 372 374 void LayerRendererChromium::releaseRender SurfaceTextures()375 { 376 if (m_ renderSurfaceTextureManager)377 m_ renderSurfaceTextureManager->evictAndDeleteAllTextures(m_renderSurfaceTextureAllocator.get());373 void LayerRendererChromium::releaseRenderPassTextures() 374 { 375 if (m_implTextureManager) 376 m_implTextureManager->evictAndDeleteAllTextures(m_implTextureAllocator.get()); 378 377 } 379 378 … … 382 381 m_isViewportChanged = true; 383 382 384 // Reset the current render surfaceto force an update of the viewport and385 // projection matrix next time useRender Surfaceis called.386 m_currentRender Surface= 0;387 } 388 389 void LayerRendererChromium::clearRender Surface(CCRenderSurface* renderSurface, CCRenderSurface* rootRenderSurface, const FloatRect& rootScissorRectInCurrentSurface)383 // Reset the current RenderPass to force an update of the viewport and 384 // projection matrix next time useRenderPass is called. 385 m_currentRenderPass = 0; 386 } 387 388 void LayerRendererChromium::clearRenderPass(const CCRenderPass* renderPass, const CCRenderPass* rootRenderPass, const FloatRect& framebufferDamageRect) 390 389 { 391 390 // Non-root layers should clear their entire contents to transparent. On DEBUG builds, the root layer … … 395 394 // of the screen. 396 395 397 if (render Surface != rootRenderSurface)396 if (renderPass != rootRenderPass) 398 397 GLC(m_context, m_context->clearColor(0, 0, 0, 0)); 399 398 else … … 401 400 402 401 if (m_capabilities.usingPartialSwap) 403 setScissorToRect(enclosingIntRect( rootScissorRectInCurrentSurface));402 setScissorToRect(enclosingIntRect(framebufferDamageRect)); 404 403 else 405 404 GLC(m_context, m_context->disable(GraphicsContext3D::SCISSOR_TEST)); 406 405 407 406 #if defined(NDEBUG) 408 if (render Surface != rootRenderSurface)407 if (renderPass != rootRenderPass) 409 408 #endif 410 409 m_context->clear(GraphicsContext3D::COLOR_BUFFER_BIT); … … 413 412 } 414 413 415 void LayerRendererChromium::beginDrawingFrame( CCRenderSurface* defaultRenderSurface)414 void LayerRendererChromium::beginDrawingFrame(const CCRenderPass* rootRenderPass) 416 415 { 417 416 // FIXME: Remove this once framebuffer is automatically recreated on first use 418 417 ensureFramebuffer(); 419 418 420 m_defaultRender Surface = defaultRenderSurface;421 ASSERT(m_defaultRender Surface);419 m_defaultRenderPass = rootRenderPass; 420 ASSERT(m_defaultRenderPass); 422 421 423 422 size_t contentsMemoryUseBytes = m_contentsTextureAllocator->currentMemoryUseBytes(); 424 423 size_t maxLimit = TextureManager::highLimitBytes(viewportSize()); 425 424 size_t newLimit = (maxLimit > contentsMemoryUseBytes) ? maxLimit - contentsMemoryUseBytes : 0; 426 m_ renderSurfaceTextureManager->setMaxMemoryLimitBytes(newLimit);425 m_implTextureManager->setMaxMemoryLimitBytes(newLimit); 427 426 428 427 if (viewportSize().isEmpty()) … … 455 454 } 456 455 457 void LayerRendererChromium::drawRenderPass(const CCRenderPass* renderPass, const FloatRect& rootScissorRectInCurrentSurface) 458 { 459 CCRenderSurface* renderSurface = renderPass->targetSurface(); 460 if (!useRenderSurface(renderSurface)) 456 void LayerRendererChromium::drawRenderPass(const CCRenderPass* renderPass, const FloatRect& framebufferDamageRect) 457 { 458 if (!useRenderPass(renderPass)) 461 459 return; 462 460 463 clearRender Surface(renderSurface, m_defaultRenderSurface, rootScissorRectInCurrentSurface);461 clearRenderPass(renderPass, m_defaultRenderPass, framebufferDamageRect); 464 462 465 463 const CCQuadList& quadList = renderPass->quadList(); … … 496 494 drawIOSurfaceQuad(quad->toIOSurfaceDrawQuad()); 497 495 break; 498 case CCDrawQuad::Render Surface:499 drawRender SurfaceQuad(quad->toRenderSurfaceDrawQuad());496 case CCDrawQuad::RenderPass: 497 drawRenderPassQuad(quad->toRenderPassDrawQuad()); 500 498 break; 501 499 case CCDrawQuad::SolidColor: … … 581 579 } 582 580 583 void LayerRendererChromium::drawBackgroundFilters(const CCRender SurfaceDrawQuad* quad, const WebTransformationMatrix& contentsDeviceTransform)581 void LayerRendererChromium::drawBackgroundFilters(const CCRenderPassDrawQuad* quad, const WebTransformationMatrix& contentsDeviceTransform) 584 582 { 585 583 // This method draws a background filter, which applies a filter to any pixels behind the quad and seen through its background. … … 597 595 // Pixel copies in this algorithm occur at steps 2, 3, 4, and 5. 598 596 599 CCRenderSurface* drawingSurface = quad-> layer()->renderSurface();597 CCRenderSurface* drawingSurface = quad->renderPass()->targetSurface(); 600 598 if (quad->backgroundFilters().isEmpty()) 601 599 return; … … 603 601 // FIXME: We only allow background filters on the root render surface because other surfaces may contain 604 602 // translucent pixels, and the contents behind those translucent pixels wouldn't have the filter applied. 605 if (!isCurrentRender Surface(m_defaultRenderSurface))603 if (!isCurrentRenderPass(m_defaultRenderPass)) 606 604 return; 607 605 … … 614 612 deviceRect.expand(left + right, top + bottom); 615 613 616 deviceRect.intersect(m_currentRender Surface->contentRect());617 618 OwnPtr<ManagedTexture> deviceBackgroundTexture = ManagedTexture::create(m_ renderSurfaceTextureManager.get());614 deviceRect.intersect(m_currentRenderPass->framebufferOutputRect()); 615 616 OwnPtr<ManagedTexture> deviceBackgroundTexture = ManagedTexture::create(m_implTextureManager.get()); 619 617 if (!getFramebufferTexture(deviceBackgroundTexture.get(), deviceRect)) 620 618 return; … … 630 628 return; 631 629 632 CCRenderSurface* targetRenderSurface = m_currentRenderSurface;630 const CCRenderPass* targetRenderPass = m_currentRenderPass; 633 631 if (useManagedTexture(drawingSurface->backgroundTexture(), quad->quadRect())) { 634 632 // Copy the readback pixels from device to the background texture for the surface. 635 WebTransformationMatrix deviceTo SurfaceTransform;636 deviceTo SurfaceTransform.translate(quad->quadRect().width() / 2.0, quad->quadRect().height() / 2.0);637 deviceTo SurfaceTransform.scale3d(quad->quadRect().width(), quad->quadRect().height(), 1);638 deviceTo SurfaceTransform.multiply(contentsDeviceTransform.inverse());639 deviceTo SurfaceTransform.translate(deviceRect.width() / 2.0, deviceRect.height() / 2.0);640 deviceTo SurfaceTransform.translate(deviceRect.x(), deviceRect.y());641 642 copyTextureToFramebuffer(filteredDeviceBackgroundTextureId, deviceRect.size(), deviceTo SurfaceTransform);643 644 useRender Surface(targetRenderSurface);645 } 646 } 647 648 void LayerRendererChromium::drawRender SurfaceQuad(const CCRenderSurfaceDrawQuad* quad)633 WebTransformationMatrix deviceToFramebufferTransform; 634 deviceToFramebufferTransform.translate(quad->quadRect().width() / 2.0, quad->quadRect().height() / 2.0); 635 deviceToFramebufferTransform.scale3d(quad->quadRect().width(), quad->quadRect().height(), 1); 636 deviceToFramebufferTransform.multiply(contentsDeviceTransform.inverse()); 637 deviceToFramebufferTransform.translate(deviceRect.width() / 2.0, deviceRect.height() / 2.0); 638 deviceToFramebufferTransform.translate(deviceRect.x(), deviceRect.y()); 639 640 copyTextureToFramebuffer(filteredDeviceBackgroundTextureId, deviceRect.size(), deviceToFramebufferTransform); 641 642 useRenderPass(targetRenderPass); 643 } 644 } 645 646 void LayerRendererChromium::drawRenderPassQuad(const CCRenderPassDrawQuad* quad) 649 647 { 650 648 // The replica is always drawn first, so free after drawing the contents. 651 649 bool shouldReleaseTextures = !quad->isReplica(); 652 650 653 CCRenderSurface* drawingSurface = quad-> layer()->renderSurface();651 CCRenderSurface* drawingSurface = quad->renderPass()->targetSurface(); 654 652 655 653 WebTransformationMatrix renderTransform = quad->layerTransform(); … … 706 704 int shaderAlphaLocation = -1; 707 705 if (useAA && useMask) { 708 const Render SurfaceMaskProgramAA* program = renderSurfaceMaskProgramAA();706 const RenderPassMaskProgramAA* program = renderPassMaskProgramAA(); 709 707 GLC(context(), context()->useProgram(program->program())); 710 708 GLC(context(), context()->uniform1i(program->fragmentShader().samplerLocation(), 0)); … … 716 714 shaderAlphaLocation = program->fragmentShader().alphaLocation(); 717 715 } else if (!useAA && useMask) { 718 const Render SurfaceMaskProgram* program = renderSurfaceMaskProgram();716 const RenderPassMaskProgram* program = renderPassMaskProgram(); 719 717 GLC(context(), context()->useProgram(program->program())); 720 718 GLC(context(), context()->uniform1i(program->fragmentShader().samplerLocation(), 0)); … … 724 722 shaderAlphaLocation = program->fragmentShader().alphaLocation(); 725 723 } else if (useAA && !useMask) { 726 const Render SurfaceProgramAA* program = renderSurfaceProgramAA();724 const RenderPassProgramAA* program = renderPassProgramAA(); 727 725 GLC(context(), context()->useProgram(program->program())); 728 726 GLC(context(), context()->uniform1i(program->fragmentShader().samplerLocation(), 0)); … … 733 731 shaderAlphaLocation = program->fragmentShader().alphaLocation(); 734 732 } else { 735 const Render SurfaceProgram* program = renderSurfaceProgram();733 const RenderPassProgram* program = renderPassProgram(); 736 734 GLC(context(), context()->useProgram(program->program())); 737 735 GLC(context(), context()->uniform1i(program->fragmentShader().samplerLocation(), 0)); … … 1067 1065 { 1068 1066 CCVideoLayerImpl::Texture& texture = quad->textures()[index]; 1069 TextureAllocator* allocator = renderSurfaceTextureAllocator();1070 1067 RefPtr<CCGraphicsContext> ccContext = CCGraphicsContext::create3D(m_context); 1071 texture.m_texture->bindTexture(ccContext.get(), allocator);1068 texture.m_texture->bindTexture(ccContext.get(), m_implTextureAllocator.get()); 1072 1069 GC3Denum format = texture.m_texture->format(); 1073 1070 IntSize dimensions = texture.m_texture->size(); … … 1204 1201 GLC(m_context, m_context->blendFunc(GraphicsContext3D::ONE, GraphicsContext3D::ONE_MINUS_SRC_ALPHA)); 1205 1202 GLC(m_context, m_context->disable(GraphicsContext3D::SCISSOR_TEST)); 1206 useRender Surface(m_defaultRenderSurface);1203 useRenderPass(m_defaultRenderPass); 1207 1204 1208 1205 const HeadsUpDisplayProgram* program = headsUpDisplayProgram(); … … 1210 1207 GLC(m_context, m_context->activeTexture(GraphicsContext3D::TEXTURE0)); 1211 1208 RefPtr<CCGraphicsContext> ccContext = CCGraphicsContext::create3D(m_context); 1212 hudTexture->bindTexture(ccContext.get(), renderSurfaceTextureAllocator());1209 hudTexture->bindTexture(ccContext.get(), m_implTextureAllocator.get()); 1213 1210 GLC(m_context, m_context->useProgram(program->program())); 1214 1211 GLC(m_context, m_context->uniform1i(program->fragmentShader().samplerLocation(), 0)); … … 1227 1224 GLC(m_context, m_context->disable(GraphicsContext3D::BLEND)); 1228 1225 1229 m_ renderSurfaceTextureManager->unprotectAllTextures();1226 m_implTextureManager->unprotectAllTextures(); 1230 1227 1231 1228 size_t contentsMemoryUseBytes = m_contentsTextureAllocator->currentMemoryUseBytes(); 1232 1229 size_t reclaimLimit = TextureManager::reclaimLimitBytes(viewportSize()); 1233 1230 size_t preferredLimit = reclaimLimit > contentsMemoryUseBytes ? reclaimLimit - contentsMemoryUseBytes : 0; 1234 m_ renderSurfaceTextureManager->setPreferredMemoryLimitBytes(preferredLimit);1235 m_ renderSurfaceTextureManager->reduceMemoryToLimit(preferredLimit);1236 m_ renderSurfaceTextureManager->deleteEvictedTextures(m_renderSurfaceTextureAllocator.get());1231 m_implTextureManager->setPreferredMemoryLimitBytes(preferredLimit); 1232 m_implTextureManager->reduceMemoryToLimit(preferredLimit); 1233 m_implTextureManager->deleteEvictedTextures(m_implTextureAllocator.get()); 1237 1234 } 1238 1235 … … 1294 1291 void LayerRendererChromium::copyTextureToFramebuffer(int textureId, const IntSize& bounds, const WebTransformationMatrix& drawMatrix) 1295 1292 { 1296 const Render SurfaceProgram* program = renderSurfaceProgram();1293 const RenderPassProgram* program = renderPassProgram(); 1297 1294 1298 1295 GLC(context(), context()->activeTexture(GraphicsContext3D::TEXTURE0)); … … 1436 1433 1437 1434 RefPtr<CCGraphicsContext> ccContext = CCGraphicsContext::create3D(m_context); 1438 texture->bindTexture(ccContext.get(), m_ renderSurfaceTextureAllocator.get());1435 texture->bindTexture(ccContext.get(), m_implTextureAllocator.get()); 1439 1436 GLC(m_context, m_context->copyTexImage2D(GraphicsContext3D::TEXTURE_2D, 0, texture->format(), 1440 1437 deviceRect.x(), deviceRect.y(), deviceRect.width(), deviceRect.height(), 0)); … … 1442 1439 } 1443 1440 1444 bool LayerRendererChromium::isCurrentRenderSurface(CCRenderSurface* renderSurface) 1445 { 1446 // If renderSurface is 0, we can't tell if we are already using it, since m_currentRenderSurface is 1447 // initialized to 0. 1448 return m_currentRenderSurface == renderSurface && !m_currentManagedTexture; 1449 } 1450 1451 bool LayerRendererChromium::useRenderSurface(CCRenderSurface* renderSurface) 1452 { 1453 m_currentRenderSurface = renderSurface; 1441 bool LayerRendererChromium::isCurrentRenderPass(const CCRenderPass* renderPass) 1442 { 1443 return m_currentRenderPass == renderPass && !m_currentManagedTexture; 1444 } 1445 1446 bool LayerRendererChromium::useRenderPass(const CCRenderPass* renderPass) 1447 { 1448 m_currentRenderPass = renderPass; 1454 1449 m_currentManagedTexture = 0; 1455 1450 1456 if (render Surface == m_defaultRenderSurface) {1451 if (renderPass == m_defaultRenderPass) { 1457 1452 GLC(m_context, m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, 0)); 1458 setDraw ViewportRect(renderSurface->contentRect(), true);1453 setDrawFramebufferRect(renderPass->framebufferOutputRect(), true); 1459 1454 return true; 1460 1455 } 1461 1456 1462 if (!render Surface->prepareContentsTexture(this))1457 if (!renderPass->targetSurface()->prepareContentsTexture(this)) 1463 1458 return false; 1464 1459 1465 return bindFramebufferToTexture(render Surface->contentsTexture(), renderSurface->contentRect());1460 return bindFramebufferToTexture(renderPass->targetSurface()->contentsTexture(), renderPass->framebufferOutputRect()); 1466 1461 } 1467 1462 1468 1463 bool LayerRendererChromium::useManagedTexture(ManagedTexture* texture, const IntRect& viewportRect) 1469 1464 { 1470 m_currentRender Surface= 0;1465 m_currentRenderPass = 0; 1471 1466 m_currentManagedTexture = texture; 1472 1467 … … 1474 1469 } 1475 1470 1476 bool LayerRendererChromium::bindFramebufferToTexture(ManagedTexture* texture, const IntRect& viewportRect)1471 bool LayerRendererChromium::bindFramebufferToTexture(ManagedTexture* texture, const IntRect& framebufferRect) 1477 1472 { 1478 1473 GLC(m_context, m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_offscreenFramebufferId)); 1479 1474 1480 1475 RefPtr<CCGraphicsContext> ccContext = CCGraphicsContext::create3D(m_context); 1481 texture->framebufferTexture2D(ccContext.get(), m_ renderSurfaceTextureAllocator.get());1476 texture->framebufferTexture2D(ccContext.get(), m_implTextureAllocator.get()); 1482 1477 1483 1478 #if !defined ( NDEBUG ) … … 1488 1483 #endif 1489 1484 1490 setDraw ViewportRect(viewportRect, false);1485 setDrawFramebufferRect(framebufferRect, false); 1491 1486 1492 1487 return true; … … 1497 1492 void LayerRendererChromium::setScissorToRect(const IntRect& scissorRect) 1498 1493 { 1499 IntRect contentRect = (m_currentRenderSurface ? m_currentRenderSurface->contentRect() : m_defaultRenderSurface->contentRect());1494 IntRect framebufferOutputRect = (m_currentRenderPass ? m_currentRenderPass->framebufferOutputRect() : m_defaultRenderPass->framebufferOutputRect()); 1500 1495 1501 1496 GLC(m_context, m_context->enable(GraphicsContext3D::SCISSOR_TEST)); 1502 1497 1503 1498 // The scissor coordinates must be supplied in viewport space so we need to offset 1504 // by the relative position of the top left corner of the current render surface.1505 int scissorX = scissorRect.x() - contentRect.x();1499 // by the relative position of the top left corner of the current render pass. 1500 int scissorX = scissorRect.x() - framebufferOutputRect.x(); 1506 1501 // When rendering to the default render surface we're rendering upside down so the top 1507 1502 // of the GL scissor is the bottom of our layer. 1508 1503 // But, if rendering to offscreen texture, we reverse our sense of 'upside down'. 1509 1504 int scissorY; 1510 if (isCurrentRender Surface(m_defaultRenderSurface))1511 scissorY = m_currentRenderSurface->contentRect().height() - (scissorRect.maxY() - m_currentRenderSurface->contentRect().y());1505 if (isCurrentRenderPass(m_defaultRenderPass)) 1506 scissorY = framebufferOutputRect.height() - (scissorRect.maxY() - framebufferOutputRect.y()); 1512 1507 else 1513 scissorY = scissorRect.y() - contentRect.y();1508 scissorY = scissorRect.y() - framebufferOutputRect.y(); 1514 1509 GLC(m_context, m_context->scissor(scissorX, scissorY, scissorRect.width(), scissorRect.height())); 1515 1510 } … … 1523 1518 // The target render surface is assumed to have an origin at 0, 0 and the width and height of 1524 1519 // of the drawRect. 1525 void LayerRendererChromium::setDraw ViewportRect(const IntRect& drawRect, bool flipY)1520 void LayerRendererChromium::setDrawFramebufferRect(const IntRect& drawRect, bool flipY) 1526 1521 { 1527 1522 if (flipY) … … 1545 1540 // start while we do other work. Other programs are created lazily on first access. 1546 1541 m_sharedGeometry = adoptPtr(new GeometryBinding(m_context.get())); 1547 m_render SurfaceProgram = adoptPtr(new RenderSurfaceProgram(m_context.get()));1542 m_renderPassProgram = adoptPtr(new RenderPassProgram(m_context.get())); 1548 1543 m_tileProgram = adoptPtr(new TileProgram(m_context.get())); 1549 1544 m_tileProgramOpaque = adoptPtr(new TileProgramOpaque(m_context.get())); … … 1551 1546 GLC(m_context, m_context->flush()); 1552 1547 1553 m_ renderSurfaceTextureManager = TextureManager::create(TextureManager::highLimitBytes(viewportSize()),1554 1555 1548 m_implTextureManager = TextureManager::create(TextureManager::highLimitBytes(viewportSize()), 1549 TextureManager::reclaimLimitBytes(viewportSize()), 1550 m_capabilities.maxTextureSize); 1556 1551 m_textureCopier = AcceleratedTextureCopier::create(m_context.get()); 1557 1552 if (m_textureUploaderSetting == ThrottledUploader) … … 1560 1555 m_textureUploader = UnthrottledTextureUploader::create(); 1561 1556 m_contentsTextureAllocator = TrackingTextureAllocator::create(m_context.get()); 1562 m_ renderSurfaceTextureAllocator = TrackingTextureAllocator::create(m_context.get());1557 m_implTextureAllocator = TrackingTextureAllocator::create(m_context.get()); 1563 1558 if (m_capabilities.usingTextureUsageHint) 1564 m_ renderSurfaceTextureAllocator->setTextureUsageHint(TrackingTextureAllocator::FramebufferAttachment);1559 m_implTextureAllocator->setTextureUsageHint(TrackingTextureAllocator::FramebufferAttachment); 1565 1560 if (m_capabilities.usingTextureStorageExtension) { 1566 1561 m_contentsTextureAllocator->setUseTextureStorageExt(true); 1567 m_ renderSurfaceTextureAllocator->setUseTextureStorageExt(true);1562 m_implTextureAllocator->setUseTextureStorageExt(true); 1568 1563 } 1569 1564 … … 1604 1599 } 1605 1600 1606 const LayerRendererChromium::Render SurfaceProgram* LayerRendererChromium::renderSurfaceProgram()1607 { 1608 ASSERT(m_render SurfaceProgram);1609 if (!m_render SurfaceProgram->initialized()) {1610 TRACE_EVENT("LayerRendererChromium::render SurfaceProgram::initialize", this, 0);1611 m_render SurfaceProgram->initialize(m_context.get());1612 } 1613 return m_render SurfaceProgram.get();1614 } 1615 1616 const LayerRendererChromium::Render SurfaceProgramAA* LayerRendererChromium::renderSurfaceProgramAA()1617 { 1618 if (!m_render SurfaceProgramAA)1619 m_render SurfaceProgramAA = adoptPtr(new RenderSurfaceProgramAA(m_context.get()));1620 if (!m_render SurfaceProgramAA->initialized()) {1621 TRACE_EVENT("LayerRendererChromium::render SurfaceProgramAA::initialize", this, 0);1622 m_render SurfaceProgramAA->initialize(m_context.get());1623 } 1624 return m_render SurfaceProgramAA.get();1625 } 1626 1627 const LayerRendererChromium::Render SurfaceMaskProgram* LayerRendererChromium::renderSurfaceMaskProgram()1628 { 1629 if (!m_render SurfaceMaskProgram)1630 m_render SurfaceMaskProgram = adoptPtr(new RenderSurfaceMaskProgram(m_context.get()));1631 if (!m_render SurfaceMaskProgram->initialized()) {1632 TRACE_EVENT("LayerRendererChromium::render SurfaceMaskProgram::initialize", this, 0);1633 m_render SurfaceMaskProgram->initialize(m_context.get());1634 } 1635 return m_render SurfaceMaskProgram.get();1636 } 1637 1638 const LayerRendererChromium::Render SurfaceMaskProgramAA* LayerRendererChromium::renderSurfaceMaskProgramAA()1639 { 1640 if (!m_render SurfaceMaskProgramAA)1641 m_render SurfaceMaskProgramAA = adoptPtr(new RenderSurfaceMaskProgramAA(m_context.get()));1642 if (!m_render SurfaceMaskProgramAA->initialized()) {1643 TRACE_EVENT("LayerRendererChromium::render SurfaceMaskProgramAA::initialize", this, 0);1644 m_render SurfaceMaskProgramAA->initialize(m_context.get());1645 } 1646 return m_render SurfaceMaskProgramAA.get();1601 const LayerRendererChromium::RenderPassProgram* LayerRendererChromium::renderPassProgram() 1602 { 1603 ASSERT(m_renderPassProgram); 1604 if (!m_renderPassProgram->initialized()) { 1605 TRACE_EVENT("LayerRendererChromium::renderPassProgram::initialize", this, 0); 1606 m_renderPassProgram->initialize(m_context.get()); 1607 } 1608 return m_renderPassProgram.get(); 1609 } 1610 1611 const LayerRendererChromium::RenderPassProgramAA* LayerRendererChromium::renderPassProgramAA() 1612 { 1613 if (!m_renderPassProgramAA) 1614 m_renderPassProgramAA = adoptPtr(new RenderPassProgramAA(m_context.get())); 1615 if (!m_renderPassProgramAA->initialized()) { 1616 TRACE_EVENT("LayerRendererChromium::renderPassProgramAA::initialize", this, 0); 1617 m_renderPassProgramAA->initialize(m_context.get()); 1618 } 1619 return m_renderPassProgramAA.get(); 1620 } 1621 1622 const LayerRendererChromium::RenderPassMaskProgram* LayerRendererChromium::renderPassMaskProgram() 1623 { 1624 if (!m_renderPassMaskProgram) 1625 m_renderPassMaskProgram = adoptPtr(new RenderPassMaskProgram(m_context.get())); 1626 if (!m_renderPassMaskProgram->initialized()) { 1627 TRACE_EVENT("LayerRendererChromium::renderPassMaskProgram::initialize", this, 0); 1628 m_renderPassMaskProgram->initialize(m_context.get()); 1629 } 1630 return m_renderPassMaskProgram.get(); 1631 } 1632 1633 const LayerRendererChromium::RenderPassMaskProgramAA* LayerRendererChromium::renderPassMaskProgramAA() 1634 { 1635 if (!m_renderPassMaskProgramAA) 1636 m_renderPassMaskProgramAA = adoptPtr(new RenderPassMaskProgramAA(m_context.get())); 1637 if (!m_renderPassMaskProgramAA->initialized()) { 1638 TRACE_EVENT("LayerRendererChromium::renderPassMaskProgramAA::initialize", this, 0); 1639 m_renderPassMaskProgramAA->initialize(m_context.get()); 1640 } 1641 return m_renderPassMaskProgramAA.get(); 1647 1642 } 1648 1643 … … 1787 1782 m_tileCheckerboardProgram->cleanup(m_context.get()); 1788 1783 1789 if (m_render SurfaceMaskProgram)1790 m_render SurfaceMaskProgram->cleanup(m_context.get());1791 if (m_render SurfaceProgram)1792 m_render SurfaceProgram->cleanup(m_context.get());1793 if (m_render SurfaceMaskProgramAA)1794 m_render SurfaceMaskProgramAA->cleanup(m_context.get());1795 if (m_render SurfaceProgramAA)1796 m_render SurfaceProgramAA->cleanup(m_context.get());1784 if (m_renderPassMaskProgram) 1785 m_renderPassMaskProgram->cleanup(m_context.get()); 1786 if (m_renderPassProgram) 1787 m_renderPassProgram->cleanup(m_context.get()); 1788 if (m_renderPassMaskProgramAA) 1789 m_renderPassMaskProgramAA->cleanup(m_context.get()); 1790 if (m_renderPassProgramAA) 1791 m_renderPassProgramAA->cleanup(m_context.get()); 1797 1792 1798 1793 if (m_textureProgram) … … 1820 1815 m_textureUploader.clear(); 1821 1816 1822 releaseRender SurfaceTextures();1817 releaseRenderPassTextures(); 1823 1818 } 1824 1819 -
trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h
r119401 r119419 47 47 class CCDrawQuad; 48 48 class CCIOSurfaceDrawQuad; 49 class CCRender SurfaceDrawQuad;49 class CCRenderPassDrawQuad; 50 50 class CCSolidColorDrawQuad; 51 51 class CCTextureDrawQuad; … … 76 76 const FloatQuad& sharedGeometryQuad() const { return m_sharedGeometryQuad; } 77 77 78 virtual void beginDrawingFrame( CCRenderSurface* defaultRenderSurface) OVERRIDE;79 virtual void drawRenderPass(const CCRenderPass*, const FloatRect& rootScissorRectInCurrentSurface) OVERRIDE;78 virtual void beginDrawingFrame(const CCRenderPass* defaultRenderPass) OVERRIDE; 79 virtual void drawRenderPass(const CCRenderPass*, const FloatRect& framebufferDamageRect) OVERRIDE; 80 80 virtual void finishDrawingFrame() OVERRIDE; 81 81 … … 93 93 const GeometryBinding* sharedGeometry() const { return m_sharedGeometry.get(); } 94 94 95 96 95 virtual void getFramebufferPixels(void *pixels, const IntRect&) OVERRIDE; 97 96 bool getFramebufferTexture(ManagedTexture*, const IntRect& deviceRect); 98 97 99 virtual TextureManager* renderSurfaceTextureManager() const OVERRIDE { return m_renderSurfaceTextureManager.get(); }98 virtual TextureManager* implTextureManager() const OVERRIDE { return m_implTextureManager.get(); } 100 99 virtual TextureCopier* textureCopier() const OVERRIDE { return m_textureCopier.get(); } 101 100 virtual TextureUploader* textureUploader() const OVERRIDE { return m_textureUploader.get(); } 102 virtual TextureAllocator* renderSurfaceTextureAllocator() const OVERRIDE { return m_renderSurfaceTextureAllocator.get(); }101 virtual TextureAllocator* implTextureAllocator() const OVERRIDE { return m_implTextureAllocator.get(); } 103 102 virtual TextureAllocator* contentsTextureAllocator() const OVERRIDE { return m_contentsTextureAllocator.get(); } 104 103 … … 129 128 void drawCheckerboardQuad(const CCCheckerboardDrawQuad*); 130 129 void drawDebugBorderQuad(const CCDebugBorderDrawQuad*); 131 void drawBackgroundFilters(const CCRender SurfaceDrawQuad*, const WebKit::WebTransformationMatrix& deviceTransform);132 void drawRender SurfaceQuad(const CCRenderSurfaceDrawQuad*);130 void drawBackgroundFilters(const CCRenderPassDrawQuad*, const WebKit::WebTransformationMatrix& deviceTransform); 131 void drawRenderPassQuad(const CCRenderPassDrawQuad*); 133 132 void drawSolidColorQuad(const CCSolidColorDrawQuad*); 134 133 void drawTextureQuad(const CCTextureDrawQuad*); … … 145 144 void drawYUV(const CCVideoDrawQuad*); 146 145 147 void setDraw ViewportRect(const IntRect&, bool flipY);148 149 // The current drawing target is either a Render Surfaceor ManagedTexture. Use these functions to switch to a new drawing target.150 bool useRender Surface(CCRenderSurface*);146 void setDrawFramebufferRect(const IntRect&, bool flipY); 147 148 // The current drawing target is either a RenderPass or ManagedTexture. Use these functions to switch to a new drawing target. 149 bool useRenderPass(const CCRenderPass*); 151 150 bool useManagedTexture(ManagedTexture*, const IntRect& viewportRect); 152 bool isCurrentRender Surface(CCRenderSurface*);151 bool isCurrentRenderPass(const CCRenderPass*); 153 152 154 153 bool bindFramebufferToTexture(ManagedTexture*, const IntRect& viewportRect); 155 154 156 void clearRender Surface(CCRenderSurface*, CCRenderSurface* rootRenderSurface, const FloatRect& rootScissorRectInCurrentSurface);157 158 void releaseRender SurfaceTextures();155 void clearRenderPass(const CCRenderPass*, const CCRenderPass* rootRenderPass, const FloatRect& framebufferDamageRect); 156 157 void releaseRenderPassTextures(); 159 158 160 159 bool makeContextCurrent(); … … 168 167 LayerRendererCapabilities m_capabilities; 169 168 170 CCRenderSurface* m_currentRenderSurface;169 const CCRenderPass* m_currentRenderPass; 171 170 ManagedTexture* m_currentManagedTexture; 172 171 unsigned m_offscreenFramebufferId; … … 187 186 188 187 // Render surface shaders. 189 // CCRenderSurface::drawLayers() needs to see these programs currently. 190 // FIXME: Draw with a quad type for render surfaces and get rid of this friendlyness. 191 friend class CCRenderSurface; 192 typedef ProgramBinding<VertexShaderPosTex, FragmentShaderRGBATexAlpha> RenderSurfaceProgram; 193 typedef ProgramBinding<VertexShaderPosTex, FragmentShaderRGBATexAlphaMask> RenderSurfaceMaskProgram; 194 typedef ProgramBinding<VertexShaderQuad, FragmentShaderRGBATexAlphaAA> RenderSurfaceProgramAA; 195 typedef ProgramBinding<VertexShaderQuad, FragmentShaderRGBATexAlphaMaskAA> RenderSurfaceMaskProgramAA; 188 typedef ProgramBinding<VertexShaderPosTex, FragmentShaderRGBATexAlpha> RenderPassProgram; 189 typedef ProgramBinding<VertexShaderPosTex, FragmentShaderRGBATexAlphaMask> RenderPassMaskProgram; 190 typedef ProgramBinding<VertexShaderQuad, FragmentShaderRGBATexAlphaAA> RenderPassProgramAA; 191 typedef ProgramBinding<VertexShaderQuad, FragmentShaderRGBATexAlphaMaskAA> RenderPassMaskProgramAA; 196 192 197 193 // Texture shaders. … … 219 215 const TileCheckerboardProgram* tileCheckerboardProgram(); 220 216 221 const Render SurfaceProgram* renderSurfaceProgram();222 const Render SurfaceProgramAA* renderSurfaceProgramAA();223 const Render SurfaceMaskProgram* renderSurfaceMaskProgram();224 const Render SurfaceMaskProgramAA* renderSurfaceMaskProgramAA();217 const RenderPassProgram* renderPassProgram(); 218 const RenderPassProgramAA* renderPassProgramAA(); 219 const RenderPassMaskProgram* renderPassMaskProgram(); 220 const RenderPassMaskProgramAA* renderPassMaskProgramAA(); 225 221 226 222 const TextureProgram* textureProgram(); … … 243 239 OwnPtr<TileCheckerboardProgram> m_tileCheckerboardProgram; 244 240 245 OwnPtr<Render SurfaceProgram> m_renderSurfaceProgram;246 OwnPtr<Render SurfaceProgramAA> m_renderSurfaceProgramAA;247 OwnPtr<Render SurfaceMaskProgram> m_renderSurfaceMaskProgram;248 OwnPtr<Render SurfaceMaskProgramAA> m_renderSurfaceMaskProgramAA;241 OwnPtr<RenderPassProgram> m_renderPassProgram; 242 OwnPtr<RenderPassProgramAA> m_renderPassProgramAA; 243 OwnPtr<RenderPassMaskProgram> m_renderPassMaskProgram; 244 OwnPtr<RenderPassMaskProgramAA> m_renderPassMaskProgramAA; 249 245 250 246 OwnPtr<TextureProgram> m_textureProgram; … … 258 254 OwnPtr<HeadsUpDisplayProgram> m_headsUpDisplayProgram; 259 255 260 OwnPtr<TextureManager> m_ renderSurfaceTextureManager;256 OwnPtr<TextureManager> m_implTextureManager; 261 257 OwnPtr<AcceleratedTextureCopier> m_textureCopier; 262 258 OwnPtr<TextureUploader> m_textureUploader; 263 259 OwnPtr<TrackingTextureAllocator> m_contentsTextureAllocator; 264 OwnPtr<TrackingTextureAllocator> m_ renderSurfaceTextureAllocator;260 OwnPtr<TrackingTextureAllocator> m_implTextureAllocator; 265 261 266 262 RefPtr<GraphicsContext3D> m_context; 267 263 268 CCRenderSurface* m_defaultRenderSurface;264 const CCRenderPass* m_defaultRenderPass; 269 265 270 266 bool m_isViewportChanged; -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCDrawQuad.cpp
r115394 r119419 32 32 #include "cc/CCIOSurfaceDrawQuad.h" 33 33 #include "cc/CCLayerImpl.h" 34 #include "cc/CCRender SurfaceDrawQuad.h"34 #include "cc/CCRenderPassDrawQuad.h" 35 35 #include "cc/CCSolidColorDrawQuad.h" 36 36 #include "cc/CCTextureDrawQuad.h" … … 85 85 } 86 86 87 const CCRender SurfaceDrawQuad* CCDrawQuad::toRenderSurfaceDrawQuad() const87 const CCRenderPassDrawQuad* CCDrawQuad::toRenderPassDrawQuad() const 88 88 { 89 ASSERT(m_material == Render Surface);90 return static_cast<const CCRender SurfaceDrawQuad*>(this);89 ASSERT(m_material == RenderPass); 90 return static_cast<const CCRenderPassDrawQuad*>(this); 91 91 } 92 92 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCDrawQuad.h
r119401 r119419 34 34 class CCDebugBorderDrawQuad; 35 35 class CCIOSurfaceDrawQuad; 36 class CCRender SurfaceDrawQuad;36 class CCRenderPassDrawQuad; 37 37 class CCSolidColorDrawQuad; 38 38 class CCTextureDrawQuad; … … 68 68 DebugBorder, 69 69 IOSurfaceContent, 70 Render Surface,70 RenderPass, 71 71 TextureContent, 72 72 SolidColor, … … 81 81 const CCDebugBorderDrawQuad* toDebugBorderDrawQuad() const; 82 82 const CCIOSurfaceDrawQuad* toIOSurfaceDrawQuad() const; 83 const CCRender SurfaceDrawQuad* toRenderSurfaceDrawQuad() const;83 const CCRenderPassDrawQuad* toRenderPassDrawQuad() const; 84 84 const CCSolidColorDrawQuad* toSolidColorDrawQuad() const; 85 85 const CCTextureDrawQuad* toTextureDrawQuad() const; -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp
r119313 r119419 77 77 } 78 78 if (!m_hudTexture) 79 m_hudTexture = ManagedTexture::create(layerRenderer-> renderSurfaceTextureManager());79 m_hudTexture = ManagedTexture::create(layerRenderer->implTextureManager()); 80 80 81 81 const CCSettings& settings = layerTreeHostImpl->settings(); … … 106 106 PlatformCanvas::AutoLocker locker(&canvas); 107 107 108 m_hudTexture->bindTexture(layerTreeHostImpl->context(), layerRenderer-> renderSurfaceTextureAllocator());108 m_hudTexture->bindTexture(layerTreeHostImpl->context(), layerRenderer->implTextureAllocator()); 109 109 bool uploadedViaMap = false; 110 110 if (layerRenderer->capabilities().usingMapSub) { -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp
r119401 r119419 43 43 #include "cc/CCMathUtil.h" 44 44 #include "cc/CCPageScaleAnimation.h" 45 #include "cc/CCRenderSurfaceDrawQuad.h"46 45 #include "cc/CCSingleThreadProxy.h" 47 46 #include "cc/CCThreadTask.h" … … 304 303 occlusionTracker.enterLayer(it); 305 304 306 if (it.representsContributingRenderSurface() && !it->renderSurface()->scissorRect().isEmpty()) 307 pass->appendQuadsForRenderSurfaceLayer(*it, &occlusionTracker); 308 else if (it.representsItself() && !it->visibleLayerRect().isEmpty() && !it->scissorRect().isEmpty()) { 305 if (it.representsContributingRenderSurface() && !it->renderSurface()->scissorRect().isEmpty()) { 306 CCRenderPass* contributingRenderPass = surfacePassMap.get(it->renderSurface()); 307 pass->appendQuadsForRenderSurfaceLayer(*it, contributingRenderPass, &occlusionTracker); 308 } else if (it.representsItself() && !it->visibleLayerRect().isEmpty() && !it->scissorRect().isEmpty()) { 309 309 it->willDraw(m_layerRenderer.get(), context()); 310 310 pass->appendQuadsForLayer(*it, &occlusionTracker, hadMissingTiles); … … 400 400 TRACE_EVENT("CCLayerTreeHostImpl::drawLayers", this, 0); 401 401 ASSERT(canDraw()); 402 ASSERT(!frame.renderPasses.isEmpty()); 402 403 403 404 // FIXME: use the frame begin time from the overall compositor scheduler. … … 405 406 // RenderWidget. 406 407 408 // The root RenderPass is the last one to be drawn. 409 CCRenderPass* rootRenderPass = frame.renderPasses.last().get(); 410 407 411 m_fpsCounter->markBeginningOfFrame(currentTime()); 408 m_layerRenderer->beginDrawingFrame( m_rootLayerImpl->renderSurface());412 m_layerRenderer->beginDrawingFrame(rootRenderPass); 409 413 410 414 for (size_t i = 0; i < frame.renderPasses.size(); ++i) { -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.cpp
r119178 r119419 35 35 #include "cc/CCOverdrawMetrics.h" 36 36 #include "cc/CCRenderPass.h" 37 #include "cc/CCRenderSurfaceDrawQuad.h"38 37 #include <public/WebTransformationMatrix.h> 39 38 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp
r119401 r119419 45 45 CCRenderPass::CCRenderPass(CCRenderSurface* targetSurface) 46 46 : m_targetSurface(targetSurface) 47 , m_framebufferOutputRect(targetSurface->contentRect()) 47 48 { 48 49 ASSERT(m_targetSurface); … … 59 60 } 60 61 61 void CCRenderPass::appendQuadsForRenderSurfaceLayer(CCLayerImpl* layer, CCOcclusionTrackerImpl* occlusionTracker)62 void CCRenderPass::appendQuadsForRenderSurfaceLayer(CCLayerImpl* layer, const CCRenderPass* contributingRenderPass, CCOcclusionTrackerImpl* occlusionTracker) 62 63 { 63 64 // FIXME: render surface layers should be a CCLayerImpl-derived class and … … 69 70 OwnPtr<CCSharedQuadState> sharedQuadState = surface->createSharedQuadState(); 70 71 bool isReplica = false; 71 surface->appendQuads(quadCuller, sharedQuadState.get(), isReplica );72 surface->appendQuads(quadCuller, sharedQuadState.get(), isReplica, contributingRenderPass); 72 73 m_sharedQuadStateList.append(sharedQuadState.release()); 73 74 … … 78 79 OwnPtr<CCSharedQuadState> replicaSharedQuadState = surface->createReplicaSharedQuadState(); 79 80 isReplica = true; 80 surface->appendQuads(quadCuller, replicaSharedQuadState.get(), isReplica );81 surface->appendQuads(quadCuller, replicaSharedQuadState.get(), isReplica, contributingRenderPass); 81 82 m_sharedQuadStateList.append(replicaSharedQuadState.release()); 82 83 } -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.h
r119401 r119419 57 57 58 58 void appendQuadsForLayer(CCLayerImpl*, CCOcclusionTrackerImpl*, bool& hadMissingTiles); 59 void appendQuadsForRenderSurfaceLayer(CCLayerImpl*, CCOcclusionTrackerImpl*);59 void appendQuadsForRenderSurfaceLayer(CCLayerImpl*, const CCRenderPass* contributingRenderPass, CCOcclusionTrackerImpl*); 60 60 void appendQuadsToFillScreen(CCLayerImpl* rootLayer, const Color& screenBackgroundColor, const CCOcclusionTrackerImpl&); 61 61 62 62 const CCQuadList& quadList() const { return m_quadList; } 63 63 CCRenderSurface* targetSurface() const { return m_targetSurface; } 64 // This denotes the bounds in physical pixels of the output generated by this RenderPass. 65 const IntRect& framebufferOutputRect() const { return m_framebufferOutputRect; } 64 66 65 67 private: … … 68 70 CCRenderSurface* m_targetSurface; 69 71 CCQuadList m_quadList; 72 IntRect m_framebufferOutputRect; 70 73 Vector<OwnPtr<CCSharedQuadState> > m_sharedQuadStateList; 71 74 }; -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPassDrawQuad.cpp
r119417 r119419 26 26 #include "config.h" 27 27 28 #include "cc/CCRender SurfaceDrawQuad.h"28 #include "cc/CCRenderPassDrawQuad.h" 29 29 30 30 namespace WebCore { 31 31 32 PassOwnPtr<CCRender SurfaceDrawQuad> CCRenderSurfaceDrawQuad::create(const CCSharedQuadState* sharedQuadState, const IntRect& quadRect, CCLayerImpl* layer, bool isReplica, const WebKit::WebFilterOperations& filters, const WebKit::WebFilterOperations& backgroundFilters, unsigned maskTextureId)32 PassOwnPtr<CCRenderPassDrawQuad> CCRenderPassDrawQuad::create(const CCSharedQuadState* sharedQuadState, const IntRect& quadRect, const CCRenderPass* renderPass, bool isReplica, const WebKit::WebFilterOperations& filters, const WebKit::WebFilterOperations& backgroundFilters, unsigned maskTextureId) 33 33 { 34 return adoptPtr(new CCRender SurfaceDrawQuad(sharedQuadState, quadRect, layer, isReplica, filters, backgroundFilters, maskTextureId));34 return adoptPtr(new CCRenderPassDrawQuad(sharedQuadState, quadRect, renderPass, isReplica, filters, backgroundFilters, maskTextureId)); 35 35 } 36 36 37 CCRender SurfaceDrawQuad::CCRenderSurfaceDrawQuad(const CCSharedQuadState* sharedQuadState, const IntRect& quadRect, CCLayerImpl* layer, bool isReplica, const WebKit::WebFilterOperations& filters, const WebKit::WebFilterOperations& backgroundFilters, unsigned maskTextureId)38 : CCDrawQuad(sharedQuadState, CCDrawQuad::Render Surface, quadRect)39 , m_ layer(layer)37 CCRenderPassDrawQuad::CCRenderPassDrawQuad(const CCSharedQuadState* sharedQuadState, const IntRect& quadRect, const CCRenderPass* renderPass, bool isReplica, const WebKit::WebFilterOperations& filters, const WebKit::WebFilterOperations& backgroundFilters, unsigned maskTextureId) 38 : CCDrawQuad(sharedQuadState, CCDrawQuad::RenderPass, quadRect) 39 , m_renderPass(renderPass) 40 40 , m_isReplica(isReplica) 41 41 , m_filters(filters) … … 43 43 , m_maskTextureId(maskTextureId) 44 44 { 45 ASSERT(m_ layer);45 ASSERT(m_renderPass); 46 46 } 47 47 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPassDrawQuad.h
r119417 r119419 24 24 */ 25 25 26 #ifndef CCRender SurfaceDrawQuad_h27 #define CCRender SurfaceDrawQuad_h26 #ifndef CCRenderPassDrawQuad_h 27 #define CCRenderPassDrawQuad_h 28 28 29 29 #include "cc/CCDrawQuad.h" … … 33 33 namespace WebCore { 34 34 35 class CC LayerImpl;35 class CCRenderPass; 36 36 37 class CCRender SurfaceDrawQuad : public CCDrawQuad {38 WTF_MAKE_NONCOPYABLE(CCRender SurfaceDrawQuad);37 class CCRenderPassDrawQuad : public CCDrawQuad { 38 WTF_MAKE_NONCOPYABLE(CCRenderPassDrawQuad); 39 39 public: 40 static PassOwnPtr<CCRender SurfaceDrawQuad> create(const CCSharedQuadState*, const IntRect&, CCLayerImpl*, bool isReplica, const WebKit::WebFilterOperations& filters, const WebKit::WebFilterOperations& backgroundFilters, unsigned maskTextureId);40 static PassOwnPtr<CCRenderPassDrawQuad> create(const CCSharedQuadState*, const IntRect&, const CCRenderPass*, bool isReplica, const WebKit::WebFilterOperations& filters, const WebKit::WebFilterOperations& backgroundFilters, unsigned maskTextureId); 41 41 42 CCLayerImpl* layer() const { return m_layer; }42 const CCRenderPass* renderPass() const { return m_renderPass; } 43 43 bool isReplica() const { return m_isReplica; } 44 44 unsigned maskTextureId() const { return m_maskTextureId; } … … 48 48 49 49 private: 50 CCRender SurfaceDrawQuad(const CCSharedQuadState*, const IntRect&, CCLayerImpl*, bool isReplica, const WebKit::WebFilterOperations& filters, const WebKit::WebFilterOperations& backgroundFilters, unsigned maskTextureId);50 CCRenderPassDrawQuad(const CCSharedQuadState*, const IntRect&, const CCRenderPass*, bool isReplica, const WebKit::WebFilterOperations& filters, const WebKit::WebFilterOperations& backgroundFilters, unsigned maskTextureId); 51 51 52 CCLayerImpl* m_layer;52 const CCRenderPass* m_renderPass; 53 53 bool m_isReplica; 54 54 WebKit::WebFilterOperations m_filters; -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp
r119401 r119419 40 40 #include "cc/CCMathUtil.h" 41 41 #include "cc/CCQuadCuller.h" 42 #include "cc/CCRender SurfaceDrawQuad.h"42 #include "cc/CCRenderPassDrawQuad.h" 43 43 #include "cc/CCSharedQuadState.h" 44 44 #include <public/WebTransformationMatrix.h> … … 89 89 bool CCRenderSurface::prepareContentsTexture(LayerRendererChromium* layerRenderer) 90 90 { 91 TextureManager* textureManager = layerRenderer-> renderSurfaceTextureManager();91 TextureManager* textureManager = layerRenderer->implTextureManager(); 92 92 93 93 if (!m_contentsTexture) … … 117 117 bool CCRenderSurface::prepareBackgroundTexture(LayerRendererChromium* layerRenderer) 118 118 { 119 TextureManager* textureManager = layerRenderer-> renderSurfaceTextureManager();119 TextureManager* textureManager = layerRenderer->implTextureManager(); 120 120 121 121 if (!m_backgroundTexture) … … 257 257 } 258 258 259 void CCRenderSurface::appendQuads(CCQuadCuller& quadList, CCSharedQuadState* sharedQuadState, bool forReplica )259 void CCRenderSurface::appendQuads(CCQuadCuller& quadList, CCSharedQuadState* sharedQuadState, bool forReplica, const CCRenderPass* renderPass) 260 260 { 261 261 ASSERT(!forReplica || hasReplica()); … … 287 287 int maskTextureId = maskLayer ? maskLayer->contentsTextureId() : 0; 288 288 289 quadList.appendSurface(CCRender SurfaceDrawQuad::create(sharedQuadState, contentRect(), m_owningLayer, forReplica, filters(), backgroundFilters(), maskTextureId));289 quadList.appendSurface(CCRenderPassDrawQuad::create(sharedQuadState, contentRect(), renderPass, forReplica, filters(), backgroundFilters(), maskTextureId)); 290 290 } 291 291 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.h
r119401 r119419 42 42 class CCDamageTracker; 43 43 class CCQuadCuller; 44 class CCRenderPass; 44 45 class CCSharedQuadState; 45 46 class CCLayerImpl; … … 140 141 PassOwnPtr<CCSharedQuadState> createReplicaSharedQuadState() const; 141 142 142 void appendQuads(CCQuadCuller&, CCSharedQuadState*, bool forReplica); 143 void appendQuads(CCQuadCuller&, CCSharedQuadState*, bool forReplica, const CCRenderPass*); 144 143 145 FloatRect computeRootScissorRectInCurrentSurface(const FloatRect& rootScissorRect) const; 144 146 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderer.h
r119401 r119419 69 69 const WebKit::WebTransformationMatrix& windowMatrix() const { return m_windowMatrix; } 70 70 71 virtual void beginDrawingFrame( CCRenderSurface* defaultRenderSurface) = 0;72 virtual void drawRenderPass(const CCRenderPass*, const FloatRect& rootScissorRectInCurrent Surface) = 0;71 virtual void beginDrawingFrame(const CCRenderPass* defaultRenderPass) = 0; 72 virtual void drawRenderPass(const CCRenderPass*, const FloatRect& rootScissorRectInCurrentPass) = 0; 73 73 virtual void finishDrawingFrame() = 0; 74 74 … … 84 84 virtual void getFramebufferPixels(void *pixels, const IntRect&) = 0; 85 85 86 virtual TextureManager* renderSurfaceTextureManager() const = 0;86 virtual TextureManager* implTextureManager() const = 0; 87 87 virtual TextureCopier* textureCopier() const = 0; 88 88 virtual TextureUploader* textureUploader() const = 0; 89 virtual TextureAllocator* renderSurfaceTextureAllocator() const = 0;89 virtual TextureAllocator* implTextureAllocator() const = 0; 90 90 virtual TextureAllocator* contentsTextureAllocator() const = 0; 91 91 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp
r119313 r119419 59 59 60 60 if (!m_texture) 61 m_texture = ManagedTexture::create(layerRenderer-> renderSurfaceTextureManager());61 m_texture = ManagedTexture::create(layerRenderer->implTextureManager()); 62 62 63 63 // The context could have been lost since the last frame and the old texture 64 64 // manager may no longer be valid. 65 m_texture->setTextureManager(layerRenderer-> renderSurfaceTextureManager());65 m_texture->setTextureManager(layerRenderer->implTextureManager()); 66 66 67 67 IntSize textureSize = contentBounds(); … … 78 78 { 79 79 PlatformCanvas::AutoLocker locker(&canvas); 80 m_texture->bindTexture(context, layerRenderer-> renderSurfaceTextureAllocator());80 m_texture->bindTexture(context, layerRenderer->implTextureAllocator()); 81 81 82 82 // FIXME: Skia uses BGRA actually, we correct that with the swizzle pixel shader. -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp
r119313 r119419 257 257 return false; 258 258 if (!m_textures[plane].m_texture) { 259 m_textures[plane].m_texture = ManagedTexture::create(layerRenderer-> renderSurfaceTextureManager());259 m_textures[plane].m_texture = ManagedTexture::create(layerRenderer->implTextureManager()); 260 260 if (!m_textures[plane].m_texture) 261 261 return false; 262 262 m_textures[plane].m_visibleSize = IntSize(); 263 263 } else { 264 // The renderSurfaceTextureManager may have been destroyed and recreated since the last frame, so pass the new one.264 // The implTextureManager may have been destroyed and recreated since the last frame, so pass the new one. 265 265 // This is a no-op if the TextureManager is still around. 266 m_textures[plane].m_texture->setTextureManager(layerRenderer-> renderSurfaceTextureManager());266 m_textures[plane].m_texture->setTextureManager(layerRenderer->implTextureManager()); 267 267 } 268 268 if (m_textures[plane].m_texture->size() != requiredTextureSize) -
trunk/Source/WebKit/chromium/ChangeLog
r119411 r119419 1 2012-06-04 Dana Jansens <danakj@chromium.org> 2 3 [chromium] Make LayerRendererChromium use RenderPasses instead of RenderSurfaces 4 https://bugs.webkit.org/show_bug.cgi?id=88132 5 6 Reviewed by Adrienne Walker. 7 8 * tests/CCLayerTreeHostImplTest.cpp: 9 * tests/LayerRendererChromiumTest.cpp: 10 (FakeCCRendererClient::FakeCCRendererClient): 11 (FakeCCRendererClient::rootRenderPass): 12 (FakeCCRendererClient): 13 (TEST_F): 14 1 15 2012-06-04 David Dorwin <ddorwin@chromium.org> 2 16 -
trunk/Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp
r119401 r119419 1389 1389 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size()); 1390 1390 EXPECT_EQ(CCDrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]->material()); 1391 EXPECT_EQ(CCDrawQuad::Render Surface, frame.renderPasses[1]->quadList()[0]->material());1391 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->material()); 1392 1392 } 1393 1393 } … … 1410 1410 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size()); 1411 1411 EXPECT_EQ(CCDrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]->material()); 1412 EXPECT_EQ(CCDrawQuad::Render Surface, frame.renderPasses[1]->quadList()[0]->material());1412 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->material()); 1413 1413 } 1414 1414 } -
trunk/Source/WebKit/chromium/tests/LayerRendererChromiumTest.cpp
r119313 r119419 69 69 { 70 70 m_rootLayer->createRenderSurface(); 71 m_rootRenderPass = CCRenderPass::create(m_rootLayer->renderSurface()); 71 72 } 72 73 … … 82 83 int setFullRootLayerDamageCount() const { return m_setFullRootLayerDamageCount; } 83 84 84 CC LayerImpl* rootLayer() { return m_rootLayer.get(); }85 CCRenderPass* rootRenderPass() { return m_rootRenderPass.get(); } 85 86 86 87 private: … … 88 89 DebugScopedSetImplThread m_implThread; 89 90 OwnPtr<CCLayerImpl> m_rootLayer; 91 OwnPtr<CCRenderPass> m_rootRenderPass; 90 92 }; 91 93 … … 195 197 EXPECT_EQ(1, m_mockClient.setFullRootLayerDamageCount()); 196 198 197 m_layerRendererChromium.beginDrawingFrame(m_mockClient.root Layer()->renderSurface());199 m_layerRendererChromium.beginDrawingFrame(m_mockClient.rootRenderPass()); 198 200 EXPECT_FALSE(m_layerRendererChromium.isFramebufferDiscarded()); 199 201
Note: See TracChangeset
for help on using the changeset viewer.