|
|
Created:
8 years, 1 month ago by slavi Modified:
8 years, 1 month ago CC:
chromium-reviews, cc-bugs_chromium.org Base URL:
svn://svn.chromium.org/chrome/trunk/src Visibility:
Public. |
DescriptionFixed mask positioning and texture UVs bugs in
the software compositor.
Layout tests that pass with this patch:
platform/chromium/virtual/softwarecompositing/masks/layer-mask-placement.html
platform/chromium/virtual/softwarecompositing/masks/mask-of-clipped-layer.html
BUG=124671
Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=164950
Patch Set 1 #Patch Set 2 : Cosmetics. #Patch Set 3 : Rebase. #Patch Set 4 : Rebase. #Patch Set 5 : Rebase #
Messages
Total messages: 13 (0 generated)
Does this fix a layout test?
On 2012/10/26 23:55:27, aelias wrote: > Does this fix a layout test? That's right. The change in SoftwareRenderer::drawRenderPassQuad fixes platform/chromium/virtual/softwarecompositing/masks/layer-mask-placement.html The change in SoftwareRenderer::drawTextureQuad came from my "YUV video" CL and fixes video rendering through texture draw quads + doesn't break any of the Layout Tests.
On 2012/10/27 00:04:03, slavi wrote: > On 2012/10/26 23:55:27, aelias wrote: > > Does this fix a layout test? > > That's right. > > The change in SoftwareRenderer::drawRenderPassQuad fixes > > platform/chromium/virtual/softwarecompositing/masks/layer-mask-placement.html > > The change in SoftwareRenderer::drawTextureQuad came from my "YUV video" CL and > fixes video rendering through texture draw quads + doesn't break any of the > Layout Tests. Actually, the change in SoftwareRenderer::drawTextureQuad fixes at least on more Layout test, though I don't remember which ones. Give a sec and I'll find out.
On 2012/10/27 00:06:03, slavi wrote: > On 2012/10/27 00:04:03, slavi wrote: > > On 2012/10/26 23:55:27, aelias wrote: > > > Does this fix a layout test? > > > > That's right. > > > > The change in SoftwareRenderer::drawRenderPassQuad fixes > > > > platform/chromium/virtual/softwarecompositing/masks/layer-mask-placement.html > > > > The change in SoftwareRenderer::drawTextureQuad came from my "YUV video" CL > and > > fixes video rendering through texture draw quads + doesn't break any of the > > Layout Tests. > > Actually, the change in SoftwareRenderer::drawTextureQuad fixes at least on more > Layout test, though I don't remember which ones. Give a sec and I'll find out. I'm wrong. Changes in SoftwareRenderer::drawTextureQuad fix only streched YUV video which is implemented in http://codereview.chromium.org/11274017/.
lgtm
lgtm
CQ is trying da patch. Follow status at https://chromium-status.appspot.com/cq/[email protected]/11313017/7002
Failed to apply patch for cc/software_renderer.cc: While running patch -p1 --forward --force --no-backup-if-mismatch; patching file cc/software_renderer.cc Hunk #2 FAILED at 254. Hunk #3 succeeded at 318 (offset -1 lines). 1 out of 3 hunks FAILED -- saving rejects to file cc/software_renderer.cc.rej Patch: cc/software_renderer.cc Index: cc/software_renderer.cc diff --git a/cc/software_renderer.cc b/cc/software_renderer.cc index 7781b552fcc7ba495afd90d02c6040b9ba6e8fe3..0ca20172a7d9769f7ae89a87b5ebe4e6ae169b1d 100644 --- a/cc/software_renderer.cc +++ b/cc/software_renderer.cc @@ -17,12 +17,12 @@ #include "third_party/skia/include/core/SkShader.h" #include "third_party/skia/include/effects/SkLayerRasterizer.h" #include "ui/gfx/rect_conversions.h" +#include <public/WebCompositorSoftwareOutputDevice.h> #include <public/WebImage.h> #include <public/WebSize.h> #include <public/WebTransformationMatrix.h> using WebKit::WebCompositorSoftwareOutputDevice; -using WebKit::WebImage; using WebKit::WebSize; using WebKit::WebTransformationMatrix; @@ -254,58 +254,65 @@ void SoftwareRenderer::drawTextureQuad(const DrawingFrame& frame, const TextureD } // FIXME: Add support for non-premultiplied alpha. - ResourceProvider::ScopedReadLockSoftware quadResourceLock(m_resourceProvider, quad->resourceId()); + ResourceProvider::ScopedReadLockSoftware lock(m_resourceProvider, quad->resourceId()); + const SkBitmap* bitmap = lock.skBitmap(); gfx::RectF uvRect = quad->uvRect(); - uvRect.Scale(quad->quadRect().width(), quad->quadRect().height()); + uvRect.Scale(bitmap->width(), bitmap->height()); SkIRect skUvRect = toSkIRect(gfx::ToEnclosingRect(uvRect)); if (quad->flipped()) m_skCurrentCanvas->scale(1, -1); - m_skCurrentCanvas->drawBitmapRect(*quadResourceLock.skBitmap(), &skUvRect, toSkRect(quadVertexRect()), &m_skCurrentPaint); + m_skCurrentCanvas->drawBitmapRect(*bitmap, &skUvRect, toSkRect(quadVertexRect()), &m_skCurrentPaint); } void SoftwareRenderer::drawTileQuad(const DrawingFrame& frame, const TileDrawQuad* quad) { DCHECK(isSoftwareResource(quad->resourceId())); - ResourceProvider::ScopedReadLockSoftware quadResourceLock(m_resourceProvider, quad->resourceId()); + ResourceProvider::ScopedReadLockSoftware lock(m_resourceProvider, quad->resourceId()); SkIRect uvRect = toSkIRect(gfx::Rect(quad->textureOffset(), quad->quadRect().size())); - m_skCurrentCanvas->drawBitmapRect(*quadResourceLock.skBitmap(), &uvRect, toSkRect(quadVertexRect()), &m_skCurrentPaint); + m_skCurrentCanvas->drawBitmapRect(*lock.skBitmap(), &uvRect, toSkRect(quadVertexRect()), &m_skCurrentPaint); } void SoftwareRenderer::drawRenderPassQuad(const DrawingFrame& frame, const RenderPassDrawQuad* quad) { - CachedTexture* contentsTexture = m_renderPassTextures.get(quad->renderPassId()); - if (!contentsTexture || !contentsTexture->id()) + CachedTexture* contentTexture = m_renderPassTextures.get(quad->renderPassId()); + if (!contentTexture || !contentTexture->id()) return; - DCHECK(isSoftwareResource(contentsTexture->id())); - ResourceProvider::ScopedReadLockSoftware contentsTextureLock(m_resourceProvider, contentsTexture->id()); + DCHECK(isSoftwareResource(contentTexture->id())); + ResourceProvider::ScopedReadLockSoftware lock(m_resourceProvider, contentTexture->id()); - const SkBitmap* bitmap = contentsTextureLock.skBitmap(); + SkRect destRect = toSkRect(quadVertexRect()); - SkRect sourceRect; - bitmap->getBounds(&sourceRect); + const SkBitmap* content = lock.skBitmap(); - SkRect destRect = toSkRect(quadVertexRect()); + SkRect contentRect; + content->getBounds(&contentRect); - SkMatrix matrix; - matrix.setRectToRect(sourceRect, destRect, SkMatrix::kFill_ScaleToFit); + SkMatrix contentMat; + contentMat.setRectToRect(contentRect, destRect, SkMatrix::kFill_ScaleToFit); - SkAutoTUnref<SkShader> shader(SkShader::CreateBitmapShader(*bitmap, + SkAutoTUnref<SkShader> shader(SkShader::CreateBitmapShader(*content, SkShader::kClamp_TileMode, SkShader::kClamp_TileMode)); - shader->setLocalMatrix(matrix); + shader->setLocalMatrix(contentMat); m_skCurrentPaint.setShader(shader); if (quad->maskResourceId()) { - ResourceProvider::ScopedReadLockSoftware maskResourceLock(m_resourceProvider, quad->maskResourceId()); - const SkBitmap* maskBitmap = maskResourceLock.skBitmap(); + ResourceProvider::ScopedReadLockSoftware maskLock(m_resourceProvider, quad->maskResourceId()); + + const SkBitmap* mask = maskLock.skBitmap(); + + SkRect maskRect = SkRect::MakeXYWH( + quad->maskTexCoordOffsetX() * mask->width(), + quad->maskTexCoordOffsetY() * mask->height(), + quad->maskTexCoordScaleX() * mask->width(), + quad->maskTexCoordScaleY() * mask->height()); SkMatrix maskMat; - maskMat.setRectToRect(toSkRect(quad->quadRect()), destRect, SkMatrix::kFill_ScaleToFit); - maskMat.postTranslate(quad->maskTexCoordOffsetX(), quad->maskTexCoordOffsetY()); + maskMat.setRectToRect(maskRect, destRect, SkMatrix::kFill_ScaleToFit); - SkAutoTUnref<SkShader> maskShader(SkShader::CreateBitmapShader(*maskBitmap, + SkAutoTUnref<SkShader> maskShader(SkShader::CreateBitmapShader(*mask, SkShader::kClamp_TileMode, SkShader::kClamp_TileMode)); maskShader->setLocalMatrix(maskMat); @@ -319,7 +326,7 @@ void SoftwareRenderer::drawRenderPassQuad(const DrawingFrame& frame, const Rende m_skCurrentPaint.setRasterizer(maskRasterizer); m_skCurrentCanvas->drawRect(destRect, m_skCurrentPaint); } else { - // FIXME: Apply background filters and blend with contents + // FIXME: Apply background filters and blend with content m_skCurrentCanvas->drawRect(destRect, m_skCurrentPaint); } }
CQ is trying da patch. Follow status at https://chromium-status.appspot.com/cq/[email protected]/11313017/19001
Failed to apply patch for cc/software_renderer.cc: While running patch -p1 --forward --force --no-backup-if-mismatch; patching file cc/software_renderer.cc Hunk #2 FAILED at 254. Hunk #3 succeeded at 318 (offset -1 lines). 1 out of 3 hunks FAILED -- saving rejects to file cc/software_renderer.cc.rej Patch: cc/software_renderer.cc Index: cc/software_renderer.cc diff --git a/cc/software_renderer.cc b/cc/software_renderer.cc index 7781b552fcc7ba495afd90d02c6040b9ba6e8fe3..0ca20172a7d9769f7ae89a87b5ebe4e6ae169b1d 100644 --- a/cc/software_renderer.cc +++ b/cc/software_renderer.cc @@ -17,12 +17,12 @@ #include "third_party/skia/include/core/SkShader.h" #include "third_party/skia/include/effects/SkLayerRasterizer.h" #include "ui/gfx/rect_conversions.h" +#include <public/WebCompositorSoftwareOutputDevice.h> #include <public/WebImage.h> #include <public/WebSize.h> #include <public/WebTransformationMatrix.h> using WebKit::WebCompositorSoftwareOutputDevice; -using WebKit::WebImage; using WebKit::WebSize; using WebKit::WebTransformationMatrix; @@ -254,58 +254,65 @@ void SoftwareRenderer::drawTextureQuad(const DrawingFrame& frame, const TextureD } // FIXME: Add support for non-premultiplied alpha. - ResourceProvider::ScopedReadLockSoftware quadResourceLock(m_resourceProvider, quad->resourceId()); + ResourceProvider::ScopedReadLockSoftware lock(m_resourceProvider, quad->resourceId()); + const SkBitmap* bitmap = lock.skBitmap(); gfx::RectF uvRect = quad->uvRect(); - uvRect.Scale(quad->quadRect().width(), quad->quadRect().height()); + uvRect.Scale(bitmap->width(), bitmap->height()); SkIRect skUvRect = toSkIRect(gfx::ToEnclosingRect(uvRect)); if (quad->flipped()) m_skCurrentCanvas->scale(1, -1); - m_skCurrentCanvas->drawBitmapRect(*quadResourceLock.skBitmap(), &skUvRect, toSkRect(quadVertexRect()), &m_skCurrentPaint); + m_skCurrentCanvas->drawBitmapRect(*bitmap, &skUvRect, toSkRect(quadVertexRect()), &m_skCurrentPaint); } void SoftwareRenderer::drawTileQuad(const DrawingFrame& frame, const TileDrawQuad* quad) { DCHECK(isSoftwareResource(quad->resourceId())); - ResourceProvider::ScopedReadLockSoftware quadResourceLock(m_resourceProvider, quad->resourceId()); + ResourceProvider::ScopedReadLockSoftware lock(m_resourceProvider, quad->resourceId()); SkIRect uvRect = toSkIRect(gfx::Rect(quad->textureOffset(), quad->quadRect().size())); - m_skCurrentCanvas->drawBitmapRect(*quadResourceLock.skBitmap(), &uvRect, toSkRect(quadVertexRect()), &m_skCurrentPaint); + m_skCurrentCanvas->drawBitmapRect(*lock.skBitmap(), &uvRect, toSkRect(quadVertexRect()), &m_skCurrentPaint); } void SoftwareRenderer::drawRenderPassQuad(const DrawingFrame& frame, const RenderPassDrawQuad* quad) { - CachedTexture* contentsTexture = m_renderPassTextures.get(quad->renderPassId()); - if (!contentsTexture || !contentsTexture->id()) + CachedTexture* contentTexture = m_renderPassTextures.get(quad->renderPassId()); + if (!contentTexture || !contentTexture->id()) return; - DCHECK(isSoftwareResource(contentsTexture->id())); - ResourceProvider::ScopedReadLockSoftware contentsTextureLock(m_resourceProvider, contentsTexture->id()); + DCHECK(isSoftwareResource(contentTexture->id())); + ResourceProvider::ScopedReadLockSoftware lock(m_resourceProvider, contentTexture->id()); - const SkBitmap* bitmap = contentsTextureLock.skBitmap(); + SkRect destRect = toSkRect(quadVertexRect()); - SkRect sourceRect; - bitmap->getBounds(&sourceRect); + const SkBitmap* content = lock.skBitmap(); - SkRect destRect = toSkRect(quadVertexRect()); + SkRect contentRect; + content->getBounds(&contentRect); - SkMatrix matrix; - matrix.setRectToRect(sourceRect, destRect, SkMatrix::kFill_ScaleToFit); + SkMatrix contentMat; + contentMat.setRectToRect(contentRect, destRect, SkMatrix::kFill_ScaleToFit); - SkAutoTUnref<SkShader> shader(SkShader::CreateBitmapShader(*bitmap, + SkAutoTUnref<SkShader> shader(SkShader::CreateBitmapShader(*content, SkShader::kClamp_TileMode, SkShader::kClamp_TileMode)); - shader->setLocalMatrix(matrix); + shader->setLocalMatrix(contentMat); m_skCurrentPaint.setShader(shader); if (quad->maskResourceId()) { - ResourceProvider::ScopedReadLockSoftware maskResourceLock(m_resourceProvider, quad->maskResourceId()); - const SkBitmap* maskBitmap = maskResourceLock.skBitmap(); + ResourceProvider::ScopedReadLockSoftware maskLock(m_resourceProvider, quad->maskResourceId()); + + const SkBitmap* mask = maskLock.skBitmap(); + + SkRect maskRect = SkRect::MakeXYWH( + quad->maskTexCoordOffsetX() * mask->width(), + quad->maskTexCoordOffsetY() * mask->height(), + quad->maskTexCoordScaleX() * mask->width(), + quad->maskTexCoordScaleY() * mask->height()); SkMatrix maskMat; - maskMat.setRectToRect(toSkRect(quad->quadRect()), destRect, SkMatrix::kFill_ScaleToFit); - maskMat.postTranslate(quad->maskTexCoordOffsetX(), quad->maskTexCoordOffsetY()); + maskMat.setRectToRect(maskRect, destRect, SkMatrix::kFill_ScaleToFit); - SkAutoTUnref<SkShader> maskShader(SkShader::CreateBitmapShader(*maskBitmap, + SkAutoTUnref<SkShader> maskShader(SkShader::CreateBitmapShader(*mask, SkShader::kClamp_TileMode, SkShader::kClamp_TileMode)); maskShader->setLocalMatrix(maskMat); @@ -319,7 +326,7 @@ void SoftwareRenderer::drawRenderPassQuad(const DrawingFrame& frame, const Rende m_skCurrentPaint.setRasterizer(maskRasterizer); m_skCurrentCanvas->drawRect(destRect, m_skCurrentPaint); } else { - // FIXME: Apply background filters and blend with contents + // FIXME: Apply background filters and blend with content m_skCurrentCanvas->drawRect(destRect, m_skCurrentPaint); } }
CQ is trying da patch. Follow status at https://chromium-status.appspot.com/cq/[email protected]/11313017/26008
Change committed as 164950 |