Title: [123009] trunk/Source
Revision
123009
Author
[email protected]
Date
2012-07-18 13:25:11 -0700 (Wed, 18 Jul 2012)

Log Message

Chromium Mac: Add TEXTURE_RECTANGLE_ARB support to CCVideoLayerImpl
https://bugs.webkit.org/show_bug.cgi?id=91169

Patch by Sailesh Agrawal <[email protected]> on 2012-07-18
Reviewed by Adrienne Walker.

Source/Platform:

Added a "orientation" field to WebCompositorIOSurfaceQuad. This is used at draw time to flip the texture if necessary.

* chromium/public/WebCompositorIOSurfaceQuad.h: Added orientation field to the constructor.
(WebKit::WebCompositorIOSurfaceQuad::orientation):
(WebCompositorIOSurfaceQuad): The new orientation field should be set to Flipped if the texture should be flipped when drawing.

Source/WebCore:

This extends CCVideoLayerImpl to support TEXTURE_RECTANGLE_ARB. This texture target is used by the Mac hardware accelerated video decoder.

No new tests (HW video decode on Mac is being tested manually.).

* platform/chromium/support/WebCompositorIOSurfaceQuad.cpp:
(WebKit::WebCompositorIOSurfaceQuad::create): Added an orientation argument.
(WebKit::WebCompositorIOSurfaceQuad::WebCompositorIOSurfaceQuad): Added an orientation argument.
* platform/graphics/chromium/LayerRendererChromium.cpp:
(WebCore::LayerRendererChromium::drawIOSurfaceQuad): Added support for non-flipped IOSurface textures.
* platform/graphics/chromium/LayerRendererChromium.h:
(LayerRendererChromium): Changed TextureIOSurfaceProgram to be non-flipped. To draw flipped textures drawIOSurfaceQuad sets a different value for texTransformLocation.
* platform/graphics/chromium/cc/CCIOSurfaceLayerImpl.cpp:
(WebCore::CCIOSurfaceLayerImpl::appendQuads): Updated call to CCIOSurfaceDrawQuad constructor.
* platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
(WebCore::CCVideoLayerImpl::appendQuads): Added support for drawing TEXTURE_RECTANGLE_ARB textures.

Modified Paths

Diff

Modified: trunk/Source/Platform/ChangeLog (123008 => 123009)


--- trunk/Source/Platform/ChangeLog	2012-07-18 20:22:43 UTC (rev 123008)
+++ trunk/Source/Platform/ChangeLog	2012-07-18 20:25:11 UTC (rev 123009)
@@ -1,3 +1,16 @@
+2012-07-18  Sailesh Agrawal  <[email protected]>
+
+        Chromium Mac: Add TEXTURE_RECTANGLE_ARB support to CCVideoLayerImpl
+        https://bugs.webkit.org/show_bug.cgi?id=91169
+
+        Reviewed by Adrienne Walker.
+
+        Added a "orientation" field to WebCompositorIOSurfaceQuad. This is used at draw time to flip the texture if necessary.
+
+        * chromium/public/WebCompositorIOSurfaceQuad.h: Added orientation field to the constructor.
+        (WebKit::WebCompositorIOSurfaceQuad::orientation):
+        (WebCompositorIOSurfaceQuad): The new orientation field should be set to Flipped if the texture should be flipped when drawing.
+
 2012-07-13  Tony Payne  <[email protected]>
 
         Remove Widget from screenColorProfile

Modified: trunk/Source/Platform/chromium/public/WebCompositorIOSurfaceQuad.h (123008 => 123009)


--- trunk/Source/Platform/chromium/public/WebCompositorIOSurfaceQuad.h	2012-07-18 20:22:43 UTC (rev 123008)
+++ trunk/Source/Platform/chromium/public/WebCompositorIOSurfaceQuad.h	2012-07-18 20:25:11 UTC (rev 123009)
@@ -37,20 +37,27 @@
 class WebCompositorIOSurfaceQuad : public WebCompositorQuad {
 public:
 #if WEBKIT_IMPLEMENTATION
-    static PassOwnPtr<WebCompositorIOSurfaceQuad> create(const WebCompositorSharedQuadState*, const WebCore::IntRect&, const WebCore::IntSize& ioSurfaceSize, unsigned ioSurfaceTextureId);
+    enum Orientation {
+      Flipped,
+      Unflipped
+    };
 
+    static PassOwnPtr<WebCompositorIOSurfaceQuad> create(const WebCompositorSharedQuadState*, const WebCore::IntRect&, const WebCore::IntSize& ioSurfaceSize, unsigned ioSurfaceTextureId, Orientation);
+
     WebCore::IntSize ioSurfaceSize() const { return m_ioSurfaceSize; }
     unsigned ioSurfaceTextureId() const { return m_ioSurfaceTextureId; }
+    Orientation orientation() const { return m_orientation; }
 #endif
 
     static const WebCompositorIOSurfaceQuad* materialCast(const WebCompositorQuad*);
 private:
 #if WEBKIT_IMPLEMENTATION
-    WebCompositorIOSurfaceQuad(const WebCompositorSharedQuadState*, const WebCore::IntRect&, const WebCore::IntSize& ioSurfaceSize, unsigned ioSurfaceTextureId);
+    WebCompositorIOSurfaceQuad(const WebCompositorSharedQuadState*, const WebCore::IntRect&, const WebCore::IntSize& ioSurfaceSize, unsigned ioSurfaceTextureId, Orientation);
 #endif
 
     WebSize m_ioSurfaceSize;
     unsigned m_ioSurfaceTextureId;
+    Orientation m_orientation;
 };
 
 #pragma pack(pop)

Modified: trunk/Source/WebCore/ChangeLog (123008 => 123009)


--- trunk/Source/WebCore/ChangeLog	2012-07-18 20:22:43 UTC (rev 123008)
+++ trunk/Source/WebCore/ChangeLog	2012-07-18 20:25:11 UTC (rev 123009)
@@ -1,3 +1,26 @@
+2012-07-18  Sailesh Agrawal  <[email protected]>
+
+        Chromium Mac: Add TEXTURE_RECTANGLE_ARB support to CCVideoLayerImpl
+        https://bugs.webkit.org/show_bug.cgi?id=91169
+
+        Reviewed by Adrienne Walker.
+
+        This extends CCVideoLayerImpl to support TEXTURE_RECTANGLE_ARB. This texture target is used by the Mac hardware accelerated video decoder.
+
+        No new tests (HW video decode on Mac is being tested manually.).
+
+        * platform/chromium/support/WebCompositorIOSurfaceQuad.cpp:
+        (WebKit::WebCompositorIOSurfaceQuad::create): Added an orientation argument.
+        (WebKit::WebCompositorIOSurfaceQuad::WebCompositorIOSurfaceQuad): Added an orientation argument.
+        * platform/graphics/chromium/LayerRendererChromium.cpp:
+        (WebCore::LayerRendererChromium::drawIOSurfaceQuad): Added support for non-flipped IOSurface textures.
+        * platform/graphics/chromium/LayerRendererChromium.h:
+        (LayerRendererChromium): Changed TextureIOSurfaceProgram to be non-flipped. To draw flipped textures drawIOSurfaceQuad sets a different value for texTransformLocation.
+        * platform/graphics/chromium/cc/CCIOSurfaceLayerImpl.cpp:
+        (WebCore::CCIOSurfaceLayerImpl::appendQuads): Updated call to CCIOSurfaceDrawQuad constructor.
+        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
+        (WebCore::CCVideoLayerImpl::appendQuads): Added support for drawing TEXTURE_RECTANGLE_ARB textures.
+
 2012-07-18  Michael Saboff  <[email protected]>
 
         Make TextCodecLatin1 handle 8 bit data without converting to UChar's

Modified: trunk/Source/WebCore/platform/chromium/support/WebCompositorIOSurfaceQuad.cpp (123008 => 123009)


--- trunk/Source/WebCore/platform/chromium/support/WebCompositorIOSurfaceQuad.cpp	2012-07-18 20:22:43 UTC (rev 123008)
+++ trunk/Source/WebCore/platform/chromium/support/WebCompositorIOSurfaceQuad.cpp	2012-07-18 20:25:11 UTC (rev 123009)
@@ -31,15 +31,16 @@
 
 namespace WebKit {
 
-PassOwnPtr<WebCompositorIOSurfaceQuad> WebCompositorIOSurfaceQuad::create(const WebCompositorSharedQuadState* sharedQuadState, const IntRect& quadRect, const IntSize& ioSurfaceSize, unsigned ioSurfaceTextureId)
+PassOwnPtr<WebCompositorIOSurfaceQuad> WebCompositorIOSurfaceQuad::create(const WebCompositorSharedQuadState* sharedQuadState, const IntRect& quadRect, const IntSize& ioSurfaceSize, unsigned ioSurfaceTextureId, Orientation orientation)
 {
-    return adoptPtr(new WebCompositorIOSurfaceQuad(sharedQuadState, quadRect, ioSurfaceSize, ioSurfaceTextureId));
+    return adoptPtr(new WebCompositorIOSurfaceQuad(sharedQuadState, quadRect, ioSurfaceSize, ioSurfaceTextureId, orientation));
 }
 
-WebCompositorIOSurfaceQuad::WebCompositorIOSurfaceQuad(const WebCompositorSharedQuadState* sharedQuadState, const IntRect& quadRect, const IntSize& ioSurfaceSize, unsigned ioSurfaceTextureId)
+WebCompositorIOSurfaceQuad::WebCompositorIOSurfaceQuad(const WebCompositorSharedQuadState* sharedQuadState, const IntRect& quadRect, const IntSize& ioSurfaceSize, unsigned ioSurfaceTextureId, Orientation orientation)
     : WebCompositorQuad(sharedQuadState, WebCompositorQuad::IOSurfaceContent, quadRect)
     , m_ioSurfaceSize(ioSurfaceSize)
     , m_ioSurfaceTextureId(ioSurfaceTextureId)
+    , m_orientation(orientation)
 {
 }
 

Modified: trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp (123008 => 123009)


--- trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp	2012-07-18 20:22:43 UTC (rev 123008)
+++ trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp	2012-07-18 20:25:11 UTC (rev 123009)
@@ -1072,7 +1072,10 @@
 
     GLC(context(), context()->useProgram(binding.programId));
     GLC(context(), context()->uniform1i(binding.samplerLocation, 0));
-    GLC(context(), context()->uniform4f(binding.texTransformLocation, 0, 0, quad->ioSurfaceSize().width(), quad->ioSurfaceSize().height()));
+    if (quad->orientation() == CCIOSurfaceDrawQuad::Flipped)
+        GLC(context(), context()->uniform4f(binding.texTransformLocation, 0, quad->ioSurfaceSize().height(), quad->ioSurfaceSize().width(), quad->ioSurfaceSize().height() * -1.0));
+    else
+        GLC(context(), context()->uniform4f(binding.texTransformLocation, 0, 0, quad->ioSurfaceSize().width(), quad->ioSurfaceSize().height()));
 
     GLC(context(), context()->activeTexture(GraphicsContext3D::TEXTURE0));
     GLC(context(), context()->bindTexture(Extensions3D::TEXTURE_RECTANGLE_ARB, quad->ioSurfaceTextureId()));

Modified: trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h (123008 => 123009)


--- trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h	2012-07-18 20:22:43 UTC (rev 123008)
+++ trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h	2012-07-18 20:25:11 UTC (rev 123009)
@@ -200,7 +200,7 @@
     // Texture shaders.
     typedef ProgramBinding<VertexShaderPosTexTransform, FragmentShaderRGBATexAlpha> TextureProgram;
     typedef ProgramBinding<VertexShaderPosTexTransform, FragmentShaderRGBATexFlipAlpha> TextureProgramFlip;
-    typedef ProgramBinding<VertexShaderPosTexTransform, FragmentShaderRGBATexRectFlipAlpha> TextureIOSurfaceProgram;
+    typedef ProgramBinding<VertexShaderPosTexTransform, FragmentShaderRGBATexRectAlpha> TextureIOSurfaceProgram;
 
     // Video shaders.
     typedef ProgramBinding<VertexShaderVideoTransform, FragmentShaderOESImageExternal> VideoStreamTextureProgram;

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCIOSurfaceLayerImpl.cpp (123008 => 123009)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCIOSurfaceLayerImpl.cpp	2012-07-18 20:22:43 UTC (rev 123008)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCIOSurfaceLayerImpl.cpp	2012-07-18 20:25:11 UTC (rev 123009)
@@ -99,7 +99,7 @@
 void CCIOSurfaceLayerImpl::appendQuads(CCQuadCuller& quadList, const CCSharedQuadState* sharedQuadState, bool&)
 {
     IntRect quadRect(IntPoint(), contentBounds());
-    quadList.append(CCIOSurfaceDrawQuad::create(sharedQuadState, quadRect, m_ioSurfaceSize, m_ioSurfaceTextureId));
+    quadList.append(CCIOSurfaceDrawQuad::create(sharedQuadState, quadRect, m_ioSurfaceSize, m_ioSurfaceTextureId, CCIOSurfaceDrawQuad::Flipped));
 }
 
 void CCIOSurfaceLayerImpl::dumpLayerProperties(TextStream& ts, int indent) const

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp (123008 => 123009)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp	2012-07-18 20:22:43 UTC (rev 123008)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp	2012-07-18 20:25:11 UTC (rev 123009)
@@ -37,6 +37,7 @@
 #include "TextStream.h"
 #include "TextureAllocator.h"
 #include "cc/CCGraphicsContext.h"
+#include "cc/CCIOSurfaceDrawQuad.h"
 #include "cc/CCLayerTreeHostImpl.h"
 #include "cc/CCProxy.h"
 #include "cc/CCQuadCuller.h"
@@ -222,6 +223,12 @@
         quadList.append(textureQuad.release());
         break;
     }
+    case Extensions3D::TEXTURE_RECTANGLE_ARB: {
+        IntSize textureSize(m_frame->width(), m_frame->height()); 
+        OwnPtr<CCIOSurfaceDrawQuad> ioSurfaceQuad = CCIOSurfaceDrawQuad::create(sharedQuadState, quadRect, textureSize, m_frame->textureId(), CCIOSurfaceDrawQuad::Unflipped);
+        quadList.append(ioSurfaceQuad.release());
+        break;
+    }
     case Extensions3DChromium::GL_TEXTURE_EXTERNAL_OES: {
         // StreamTexture hardware decoder.
         OwnPtr<CCStreamVideoDrawQuad> streamVideoQuad = CCStreamVideoDrawQuad::create(sharedQuadState, quadRect, m_frame->textureId(), m_streamTextureMatrix);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to