Diff
Modified: trunk/Source/WebCore/ChangeLog (120262 => 120263)
--- trunk/Source/WebCore/ChangeLog 2012-06-14 00:13:48 UTC (rev 120262)
+++ trunk/Source/WebCore/ChangeLog 2012-06-14 00:38:00 UTC (rev 120263)
@@ -1,3 +1,52 @@
+2012-06-13 Dana Jansens <[email protected]>
+
+ [chromium] Create a CCStreamVideoDrawQuad used for StreamTexture video output
+ https://bugs.webkit.org/show_bug.cgi?id=88826
+
+ Reviewed by Adrienne Walker.
+
+ Remove the matrix from the CCVideoDrawQuad, and create a new quad
+ specifically for StreamTexture video decoder output. This quad
+ contains only the fields needed for display - textureId and the
+ matrix to be applied to texture coords.
+
+ Removes the (0, 0, 1, 1) "transform" from the shader used for these
+ quads, as it was a no-op.
+
+ No new tests, no change in behaviour.
+
+ * WebCore.gypi:
+ * platform/graphics/chromium/LayerRendererChromium.cpp:
+ (WebCore::LayerRendererChromium::drawQuad):
+ (WebCore::LayerRendererChromium::drawStreamVideoQuad):
+ (WebCore::LayerRendererChromium::drawVideoQuad):
+ * platform/graphics/chromium/LayerRendererChromium.h:
+ (WebCore):
+ (LayerRendererChromium):
+ * platform/graphics/chromium/ShaderChromium.cpp:
+ (WebCore::VertexShaderVideoTransform::VertexShaderVideoTransform):
+ (WebCore::VertexShaderVideoTransform::init):
+ (WebCore::VertexShaderVideoTransform::getShaderString):
+ * platform/graphics/chromium/ShaderChromium.h:
+ (VertexShaderVideoTransform):
+ * platform/graphics/chromium/cc/CCDrawQuad.cpp:
+ (WebCore::CCDrawQuad::toStreamVideoDrawQuad):
+ (WebCore):
+ * platform/graphics/chromium/cc/CCDrawQuad.h:
+ (WebCore):
+ (CCDrawQuad):
+ * platform/graphics/chromium/cc/CCStreamVideoDrawQuad.cpp: Added.
+ (WebCore):
+ (WebCore::CCStreamVideoDrawQuad::create):
+ (WebCore::CCStreamVideoDrawQuad::CCStreamVideoDrawQuad):
+ * platform/graphics/chromium/cc/CCStreamVideoDrawQuad.h: Added.
+ (WebCore):
+ (CCStreamVideoDrawQuad):
+ (WebCore::CCStreamVideoDrawQuad::textureId):
+ (WebCore::CCStreamVideoDrawQuad::matrix):
+ * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
+ (WebCore::CCVideoLayerImpl::appendQuads):
+
2012-06-13 Martin Robinson <[email protected]>
[GTK] Add an accelerated compositing implementation for WebKit2
Modified: trunk/Source/WebCore/WebCore.gypi (120262 => 120263)
--- trunk/Source/WebCore/WebCore.gypi 2012-06-14 00:13:48 UTC (rev 120262)
+++ trunk/Source/WebCore/WebCore.gypi 2012-06-14 00:38:00 UTC (rev 120263)
@@ -3761,6 +3761,8 @@
'platform/graphics/chromium/cc/CCSolidColorDrawQuad.h',
'platform/graphics/chromium/cc/CCSolidColorLayerImpl.cpp',
'platform/graphics/chromium/cc/CCSolidColorLayerImpl.h',
+ 'platform/graphics/chromium/cc/CCStreamVideoDrawQuad.cpp',
+ 'platform/graphics/chromium/cc/CCStreamVideoDrawQuad.h',
'platform/graphics/chromium/cc/CCTextureDrawQuad.cpp',
'platform/graphics/chromium/cc/CCTextureDrawQuad.h',
'platform/graphics/chromium/cc/CCTextureLayerImpl.cpp',
Modified: trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp (120262 => 120263)
--- trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp 2012-06-14 00:13:48 UTC (rev 120262)
+++ trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp 2012-06-14 00:38:00 UTC (rev 120263)
@@ -66,6 +66,7 @@
#include "cc/CCRenderSurfaceFilters.h"
#include "cc/CCSingleThreadProxy.h"
#include "cc/CCSolidColorDrawQuad.h"
+#include "cc/CCStreamVideoDrawQuad.h"
#include "cc/CCTextureDrawQuad.h"
#include "cc/CCTileDrawQuad.h"
#include "cc/CCVideoDrawQuad.h"
@@ -515,6 +516,9 @@
case CCDrawQuad::SolidColor:
drawSolidColorQuad(quad->toSolidColorDrawQuad());
break;
+ case CCDrawQuad::StreamVideoContent:
+ drawStreamVideoQuad(quad->toStreamVideoDrawQuad());
+ break;
case CCDrawQuad::TextureContent:
drawTextureQuad(quad->toTextureDrawQuad());
break;
@@ -1038,7 +1042,7 @@
GLC(context(), context()->activeTexture(GraphicsContext3D::TEXTURE0));
}
-void LayerRendererChromium::drawStreamTexture(const CCVideoDrawQuad* quad)
+void LayerRendererChromium::drawStreamVideoQuad(const CCStreamVideoDrawQuad* quad)
{
static float glMatrix[16];
@@ -1051,9 +1055,8 @@
GLC(context(), context()->uniformMatrix4fv(program->vertexShader().texMatrixLocation(), 1, false, glMatrix));
GLC(context(), context()->activeTexture(GraphicsContext3D::TEXTURE0));
- GLC(context(), context()->bindTexture(Extensions3DChromium::GL_TEXTURE_EXTERNAL_OES, quad->frameProviderTextureId()));
+ GLC(context(), context()->bindTexture(Extensions3DChromium::GL_TEXTURE_EXTERNAL_OES, quad->textureId()));
- GLC(context(), context()->uniform4f(program->vertexShader().texTransformLocation(), 0, 0, 1, 1));
GLC(context(), context()->uniform1i(program->fragmentShader().samplerLocation(), 0));
const IntSize& bounds = quad->quadRect().size();
@@ -1071,9 +1074,6 @@
case GraphicsContext3D::LUMINANCE:
drawYUV(quad);
break;
- case Extensions3DChromium::GL_TEXTURE_EXTERNAL_OES:
- drawStreamTexture(quad);
- break;
default:
CRASH(); // Someone updated convertVFCFormatToGC3DFormat above but update this!
}
Modified: trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h (120262 => 120263)
--- trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h 2012-06-14 00:13:48 UTC (rev 120262)
+++ trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h 2012-06-14 00:38:00 UTC (rev 120263)
@@ -48,6 +48,7 @@
class CCIOSurfaceDrawQuad;
class CCRenderPassDrawQuad;
class CCSolidColorDrawQuad;
+class CCStreamVideoDrawQuad;
class CCTextureDrawQuad;
class CCTileDrawQuad;
class CCVideoDrawQuad;
@@ -130,6 +131,7 @@
void drawBackgroundFilters(const CCRenderPassDrawQuad*, const WebKit::WebTransformationMatrix& deviceTransform);
void drawRenderPassQuad(const CCRenderPassDrawQuad*);
void drawSolidColorQuad(const CCSolidColorDrawQuad*);
+ void drawStreamVideoQuad(const CCStreamVideoDrawQuad*);
void drawTextureQuad(const CCTextureDrawQuad*);
void drawIOSurfaceQuad(const CCIOSurfaceDrawQuad*);
void drawTileQuad(const CCTileDrawQuad*);
Modified: trunk/Source/WebCore/platform/graphics/chromium/ShaderChromium.cpp (120262 => 120263)
--- trunk/Source/WebCore/platform/graphics/chromium/ShaderChromium.cpp 2012-06-14 00:13:48 UTC (rev 120262)
+++ trunk/Source/WebCore/platform/graphics/chromium/ShaderChromium.cpp 2012-06-14 00:38:00 UTC (rev 120263)
@@ -238,7 +238,6 @@
VertexShaderVideoTransform::VertexShaderVideoTransform()
: m_matrixLocation(-1)
- , m_texTransformLocation(-1)
, m_texMatrixLocation(-1)
{
}
@@ -246,9 +245,8 @@
bool VertexShaderVideoTransform::init(GraphicsContext3D* context, unsigned program)
{
m_matrixLocation = context->getUniformLocation(program, "matrix");
- m_texTransformLocation = context->getUniformLocation(program, "texTransform");
m_texMatrixLocation = context->getUniformLocation(program, "texMatrix");
- return m_matrixLocation != -1 && m_texTransformLocation != -1 && m_texMatrixLocation != -1;
+ return m_matrixLocation != -1 && m_texMatrixLocation != -1;
}
String VertexShaderVideoTransform::getShaderString() const
@@ -257,14 +255,12 @@
attribute vec4 a_position;
attribute vec2 a_texCoord;
uniform mat4 matrix;
- uniform vec4 texTransform;
uniform mat4 texMatrix;
varying vec2 v_texCoord;
void main()
{
gl_Position = matrix * a_position;
- vec2 texCoord = vec2(texMatrix * vec4(a_texCoord.x, 1.0 - a_texCoord.y, 0.0, 1.0));
- v_texCoord = texCoord * texTransform.zw + texTransform.xy;
+ v_texCoord = vec2(texMatrix * vec4(a_texCoord.x, 1.0 - a_texCoord.y, 0.0, 1.0));
}
);
}
Modified: trunk/Source/WebCore/platform/graphics/chromium/ShaderChromium.h (120262 => 120263)
--- trunk/Source/WebCore/platform/graphics/chromium/ShaderChromium.h 2012-06-14 00:13:48 UTC (rev 120262)
+++ trunk/Source/WebCore/platform/graphics/chromium/ShaderChromium.h 2012-06-14 00:38:00 UTC (rev 120263)
@@ -139,12 +139,10 @@
String getShaderString() const;
int matrixLocation() const { return m_matrixLocation; }
- int texTransformLocation() const { return m_texTransformLocation; }
int texMatrixLocation() const { return m_texMatrixLocation; }
private:
int m_matrixLocation;
- int m_texTransformLocation;
int m_texMatrixLocation;
};
Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCDrawQuad.cpp (120262 => 120263)
--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCDrawQuad.cpp 2012-06-14 00:13:48 UTC (rev 120262)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCDrawQuad.cpp 2012-06-14 00:38:00 UTC (rev 120263)
@@ -33,6 +33,7 @@
#include "cc/CCLayerImpl.h"
#include "cc/CCRenderPassDrawQuad.h"
#include "cc/CCSolidColorDrawQuad.h"
+#include "cc/CCStreamVideoDrawQuad.h"
#include "cc/CCTextureDrawQuad.h"
#include "cc/CCTileDrawQuad.h"
#include "cc/CCVideoDrawQuad.h"
@@ -96,6 +97,12 @@
return static_cast<const CCSolidColorDrawQuad*>(this);
}
+const CCStreamVideoDrawQuad* CCDrawQuad::toStreamVideoDrawQuad() const
+{
+ ASSERT(m_material == StreamVideoContent);
+ return static_cast<const CCStreamVideoDrawQuad*>(this);
+}
+
const CCTextureDrawQuad* CCDrawQuad::toTextureDrawQuad() const
{
ASSERT(m_material == TextureContent);
Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCDrawQuad.h (120262 => 120263)
--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCDrawQuad.h 2012-06-14 00:13:48 UTC (rev 120262)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCDrawQuad.h 2012-06-14 00:38:00 UTC (rev 120263)
@@ -35,6 +35,7 @@
class CCIOSurfaceDrawQuad;
class CCRenderPassDrawQuad;
class CCSolidColorDrawQuad;
+class CCStreamVideoDrawQuad;
class CCTextureDrawQuad;
class CCTileDrawQuad;
class CCVideoDrawQuad;
@@ -72,6 +73,7 @@
SolidColor,
TiledContent,
VideoContent,
+ StreamVideoContent,
};
Material material() const { return m_material; }
@@ -82,6 +84,7 @@
const CCIOSurfaceDrawQuad* toIOSurfaceDrawQuad() const;
const CCRenderPassDrawQuad* toRenderPassDrawQuad() const;
const CCSolidColorDrawQuad* toSolidColorDrawQuad() const;
+ const CCStreamVideoDrawQuad* toStreamVideoDrawQuad() const;
const CCTextureDrawQuad* toTextureDrawQuad() const;
const CCTileDrawQuad* toTileDrawQuad() const;
const CCVideoDrawQuad* toVideoDrawQuad() const;
Added: trunk/Source/WebCore/platform/graphics/chromium/cc/CCStreamVideoDrawQuad.cpp (0 => 120263)
--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCStreamVideoDrawQuad.cpp (rev 0)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCStreamVideoDrawQuad.cpp 2012-06-14 00:38:00 UTC (rev 120263)
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2012 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#include "cc/CCStreamVideoDrawQuad.h"
+
+namespace WebCore {
+
+PassOwnPtr<CCStreamVideoDrawQuad> CCStreamVideoDrawQuad::create(const CCSharedQuadState* sharedQuadState, const IntRect& quadRect, unsigned textureId, const WebKit::WebTransformationMatrix& matrix)
+{
+ return adoptPtr(new CCStreamVideoDrawQuad(sharedQuadState, quadRect, textureId, matrix));
+}
+
+CCStreamVideoDrawQuad::CCStreamVideoDrawQuad(const CCSharedQuadState* sharedQuadState, const IntRect& quadRect, unsigned textureId, const WebKit::WebTransformationMatrix& matrix)
+ : CCDrawQuad(sharedQuadState, CCDrawQuad::StreamVideoContent, quadRect)
+ , m_textureId(textureId)
+ , m_matrix(matrix)
+{
+}
+
+}
Added: trunk/Source/WebCore/platform/graphics/chromium/cc/CCStreamVideoDrawQuad.h (0 => 120263)
--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCStreamVideoDrawQuad.h (rev 0)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCStreamVideoDrawQuad.h 2012-06-14 00:38:00 UTC (rev 120263)
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2012 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef CCStreamVideoDrawQuad_h
+#define CCStreamVideoDrawQuad_h
+
+#include "cc/CCDrawQuad.h"
+#include <public/WebTransformationMatrix.h>
+#include <wtf/PassOwnPtr.h>
+
+namespace WebCore {
+
+class CCStreamVideoDrawQuad : public CCDrawQuad {
+ WTF_MAKE_NONCOPYABLE(CCStreamVideoDrawQuad);
+public:
+ static PassOwnPtr<CCStreamVideoDrawQuad> create(const CCSharedQuadState*, const IntRect&, unsigned textureId, const WebKit::WebTransformationMatrix&);
+
+ unsigned textureId() const { return m_textureId; }
+ const WebKit::WebTransformationMatrix& matrix() const { return m_matrix; }
+
+private:
+ CCStreamVideoDrawQuad(const CCSharedQuadState*, const IntRect&, unsigned textureId, const WebKit::WebTransformationMatrix&);
+
+ unsigned m_textureId;
+ WebKit::WebTransformationMatrix m_matrix;
+};
+
+}
+
+#endif
Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp (120262 => 120263)
--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp 2012-06-14 00:13:48 UTC (rev 120262)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp 2012-06-14 00:38:00 UTC (rev 120263)
@@ -39,6 +39,7 @@
#include "cc/CCLayerTreeHostImpl.h"
#include "cc/CCProxy.h"
#include "cc/CCQuadCuller.h"
+#include "cc/CCStreamVideoDrawQuad.h"
#include "cc/CCTextureDrawQuad.h"
#include "cc/CCVideoDrawQuad.h"
#include <public/WebVideoFrame.h>
@@ -182,12 +183,11 @@
// otherwise synchonize use of all textures in the quad.
IntRect quadRect(IntPoint(), bounds());
- WebKit::WebTransformationMatrix matrix;
switch (m_format) {
case GraphicsContext3D::LUMINANCE: {
// YUV software decoder.
- OwnPtr<CCVideoDrawQuad> videoQuad = CCVideoDrawQuad::create(sharedQuadState, quadRect, m_framePlanes, 0, m_format, matrix);
+ OwnPtr<CCVideoDrawQuad> videoQuad = CCVideoDrawQuad::create(sharedQuadState, quadRect, m_framePlanes, 0, m_format, WebKit::WebTransformationMatrix());
quadList.append(videoQuad.release());
break;
}
@@ -214,9 +214,8 @@
}
case Extensions3DChromium::GL_TEXTURE_EXTERNAL_OES: {
// StreamTexture hardware decoder.
- matrix = m_streamTextureMatrix;
- OwnPtr<CCVideoDrawQuad> videoQuad = CCVideoDrawQuad::create(sharedQuadState, quadRect, m_framePlanes, m_frame->textureId(), m_format, matrix);
- quadList.append(videoQuad.release());
+ OwnPtr<CCStreamVideoDrawQuad> streamVideoQuad = CCStreamVideoDrawQuad::create(sharedQuadState, quadRect, m_frame->textureId(), m_streamTextureMatrix);
+ quadList.append(streamVideoQuad.release());
break;
}
default: