[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

zmo at google.com zmo at google.com
Wed Dec 22 11:08:34 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 2a21bb3ac0ebadb73c96bc42f95c5f54d4ed4477
Author: zmo at google.com <zmo at google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Jul 13 17:53:32 2010 +0000

    2010-07-10  Zhenyao Mo  <zmo at google.com>
    
            Reviewed by Darin Fisher.
    
            Implement bufferData and bufferSubData with ArrayBuffer as input
            https://bugs.webkit.org/show_bug.cgi?id=41884
    
            * src/GraphicsContext3D.cpp: Implement bufferData and bufferSubData with ArrayBuffer as input.
            (WebCore::GraphicsContext3DInternal::bufferData):
            (WebCore::GraphicsContext3DInternal::bufferSubData):
    2010-07-10  Zhenyao Mo  <zmo at google.com>
    
            Reviewed by Darin Fisher.
    
            Implement bufferData and bufferSubData with ArrayBuffer as input
            https://bugs.webkit.org/show_bug.cgi?id=41884
    
            Test: fast/canvas/webgl/buffer-data-array-buffer.html
    
            * html/canvas/WebGLBuffer.cpp: Implement associateBufferData & associateBufferSubData with ArrayBuffer as input.
            (WebCore::WebGLBuffer::associateBufferData):
            (WebCore::WebGLBuffer::associateBufferSubData):
            * html/canvas/WebGLBuffer.h: Ditto.
            * html/canvas/WebGLRenderingContext.cpp: Implement bufferData and bufferSubData with ArrayBuffer as input.
            (WebCore::WebGLRenderingContext::bufferData):
            (WebCore::WebGLRenderingContext::bufferSubData):
            * html/canvas/WebGLRenderingContext.h: Ditto.
            * html/canvas/WebGLRenderingContext.idl: Ditto.
            * platform/graphics/GraphicsContext3D.h: Ditto.
            * platform/graphics/mac/GraphicsContext3DMac.mm: Ditto.
            (WebCore::GraphicsContext3D::bufferData):
            (WebCore::GraphicsContext3D::bufferSubData):
    2010-07-10  Zhenyao Mo  <zmo at google.com>
    
            Reviewed by Darin Fisher.
    
            Implement bufferData and bufferSubData with ArrayBuffer as input
            https://bugs.webkit.org/show_bug.cgi?id=41884
    
            * fast/canvas/webgl/buffer-data-array-buffer-expected.txt: Added.
            * fast/canvas/webgl/buffer-data-array-buffer.html: Added.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@63224 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 82a40de..ca8ed9e 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,13 @@
+2010-07-10  Zhenyao Mo  <zmo at google.com>
+
+        Reviewed by Darin Fisher.
+
+        Implement bufferData and bufferSubData with ArrayBuffer as input
+        https://bugs.webkit.org/show_bug.cgi?id=41884
+
+        * fast/canvas/webgl/buffer-data-array-buffer-expected.txt: Added.
+        * fast/canvas/webgl/buffer-data-array-buffer.html: Added.
+
 2010-07-13  Martin Robinson  <mrobinson at igalia.com>
 
         Unreviewed.
diff --git a/LayoutTests/fast/canvas/webgl/buffer-data-array-buffer-expected.txt b/LayoutTests/fast/canvas/webgl/buffer-data-array-buffer-expected.txt
new file mode 100644
index 0000000..aef09f8
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/buffer-data-array-buffer-expected.txt
@@ -0,0 +1,15 @@
+Test bufferData/bufferSubData with ArrayBuffer input
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Regression test for https://bugs.webkit.org/show_bug.cgi?id=41884 : Implement bufferData and bufferSubData with ArrayBuffer as input
+PASS gl is non-null.
+PASS array is non-null.
+PASS [object WebGLBuffer] is non-null.
+PASS gl.getError() is gl.NO_ERROR
+PASS gl.getError() is gl.NO_ERROR
+PASS gl.getError() is gl.NO_ERROR
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/canvas/webgl/buffer-data-array-buffer.html b/LayoutTests/fast/canvas/webgl/buffer-data-array-buffer.html
new file mode 100644
index 0000000..4c2c25b
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/buffer-data-array-buffer.html
@@ -0,0 +1,41 @@
+<html>
+<head>
+<link rel="stylesheet" href="../../js/resources/js-test-style.css"/>
+<script src="../../js/resources/js-test-pre.js"></script>
+<script src="resources/webgl-test.js"></script>
+</head>
+<body>
+<div id="description"></div>
+<div id="console"></div>
+
+<script>
+description("Test bufferData/bufferSubData with ArrayBuffer input");
+
+debug('Regression test for <a href="https://bugs.webkit.org/show_bug.cgi?id=41884">https://bugs.webkit.org/show_bug.cgi?id=41884</a> : <code>Implement bufferData and bufferSubData with ArrayBuffer as input</code>');
+
+var gl = create3DContext();
+shouldBeNonNull("gl");
+
+var array = new ArrayBuffer(128);
+shouldBeNonNull("array");
+
+var buf = gl.createBuffer();
+shouldBeNonNull(buf);
+
+gl.bindBuffer(gl.ARRAY_BUFFER, buf);
+shouldBe("gl.getError()", "gl.NO_ERROR");
+
+gl.bufferData(gl.ARRAY_BUFFER, array, gl.STATIC_DRAW);
+shouldBe("gl.getError()", "gl.NO_ERROR");
+
+array = new ArrayBuffer(64);
+
+gl.bufferSubData(gl.ARRAY_BUFFER, 10, array);
+shouldBe("gl.getError()", "gl.NO_ERROR");
+
+successfullyParsed = true;
+</script>
+
+<script src="../../js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 533ecc1..b1cdee2 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,26 @@
+2010-07-10  Zhenyao Mo  <zmo at google.com>
+
+        Reviewed by Darin Fisher.
+
+        Implement bufferData and bufferSubData with ArrayBuffer as input
+        https://bugs.webkit.org/show_bug.cgi?id=41884
+
+        Test: fast/canvas/webgl/buffer-data-array-buffer.html
+
+        * html/canvas/WebGLBuffer.cpp: Implement associateBufferData & associateBufferSubData with ArrayBuffer as input.
+        (WebCore::WebGLBuffer::associateBufferData):
+        (WebCore::WebGLBuffer::associateBufferSubData):
+        * html/canvas/WebGLBuffer.h: Ditto.
+        * html/canvas/WebGLRenderingContext.cpp: Implement bufferData and bufferSubData with ArrayBuffer as input.
+        (WebCore::WebGLRenderingContext::bufferData):
+        (WebCore::WebGLRenderingContext::bufferSubData):
+        * html/canvas/WebGLRenderingContext.h: Ditto.
+        * html/canvas/WebGLRenderingContext.idl: Ditto.
+        * platform/graphics/GraphicsContext3D.h: Ditto.
+        * platform/graphics/mac/GraphicsContext3DMac.mm: Ditto.
+        (WebCore::GraphicsContext3D::bufferData):
+        (WebCore::GraphicsContext3D::bufferSubData):
+
 2010-07-13  Tony Gentilcore  <tonyg at chromium.org>
 
         Reviewed by Darin Fisher.
diff --git a/WebCore/html/canvas/WebGLBuffer.cpp b/WebCore/html/canvas/WebGLBuffer.cpp
index e71a12b..e449052 100644
--- a/WebCore/html/canvas/WebGLBuffer.cpp
+++ b/WebCore/html/canvas/WebGLBuffer.cpp
@@ -74,6 +74,35 @@ bool WebGLBuffer::associateBufferData(int size)
     return false;
 }
 
+bool WebGLBuffer::associateBufferData(ArrayBuffer* array)
+{
+    if (!m_target)
+        return false;
+    if (!array)
+        return false;
+
+    if (m_target == GraphicsContext3D::ELEMENT_ARRAY_BUFFER) {
+        clearCachedMaxIndices();
+        m_byteLength = array->byteLength();
+        // We must always clone the incoming data because client-side
+        // modifications without calling bufferData or bufferSubData
+        // must never be able to change the validation results.
+        m_elementArrayBuffer = ArrayBuffer::create(array);
+        if (!m_elementArrayBuffer) {
+            m_byteLength = 0;
+            return false;
+        }
+        return true;
+    }
+
+    if (m_target == GraphicsContext3D::ARRAY_BUFFER) {
+        m_byteLength = array->byteLength();
+        return true;
+    }
+
+    return false;
+}
+
 bool WebGLBuffer::associateBufferData(ArrayBufferView* array)
 {
     if (!m_target)
@@ -103,6 +132,39 @@ bool WebGLBuffer::associateBufferData(ArrayBufferView* array)
     return false;
 }
 
+bool WebGLBuffer::associateBufferSubData(long offset, ArrayBuffer* array)
+{
+    if (!m_target)
+        return false;
+    if (!array)
+        return false;
+
+    if (m_target == GraphicsContext3D::ELEMENT_ARRAY_BUFFER) {
+        clearCachedMaxIndices();
+
+        // We need to protect against integer overflow with these tests
+        if (offset < 0)
+            return false;
+
+        unsigned long uoffset = static_cast<unsigned long>(offset);
+        if (uoffset > m_byteLength || array->byteLength() > m_byteLength - uoffset)
+            return false;
+
+        if (!m_elementArrayBuffer)
+            return false;
+
+        memcpy(static_cast<unsigned char*>(m_elementArrayBuffer->data()) + offset,
+               static_cast<unsigned char*>(array->data()),
+               array->byteLength());
+        return true;
+    }
+
+    if (m_target == GraphicsContext3D::ARRAY_BUFFER)
+        return array->byteLength() + offset <= m_byteLength;
+
+    return false;
+}
+
 bool WebGLBuffer::associateBufferSubData(long offset, ArrayBufferView* array)
 {
     if (!m_target)
diff --git a/WebCore/html/canvas/WebGLBuffer.h b/WebCore/html/canvas/WebGLBuffer.h
index e1fec47..1280cf9 100644
--- a/WebCore/html/canvas/WebGLBuffer.h
+++ b/WebCore/html/canvas/WebGLBuffer.h
@@ -41,7 +41,9 @@ namespace WebCore {
         static PassRefPtr<WebGLBuffer> create(WebGLRenderingContext*);
 
         bool associateBufferData(int size);
+        bool associateBufferData(ArrayBuffer* array);
         bool associateBufferData(ArrayBufferView* array);
+        bool associateBufferSubData(long offset, ArrayBuffer* array);
         bool associateBufferSubData(long offset, ArrayBufferView* array);
         
         unsigned byteLength() const;
diff --git a/WebCore/html/canvas/WebGLRenderingContext.cpp b/WebCore/html/canvas/WebGLRenderingContext.cpp
index a82a4ac..b166c3b 100644
--- a/WebCore/html/canvas/WebGLRenderingContext.cpp
+++ b/WebCore/html/canvas/WebGLRenderingContext.cpp
@@ -372,6 +372,32 @@ void WebGLRenderingContext::bufferData(unsigned long target, int size, unsigned
     cleanupAfterGraphicsCall(false);
 }
 
+void WebGLRenderingContext::bufferData(unsigned long target, ArrayBuffer* data, unsigned long usage, ExceptionCode& ec)
+{
+    UNUSED_PARAM(ec);
+    if (!isGLES2Compliant()) {
+        if (!validateBufferDataUsage(usage))
+            return;
+    }
+    if (target == GraphicsContext3D::ELEMENT_ARRAY_BUFFER && m_boundElementArrayBuffer) {
+        if (!m_boundElementArrayBuffer->associateBufferData(data)) {
+            m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
+            return;
+        }
+    } else if (target == GraphicsContext3D::ARRAY_BUFFER && m_boundArrayBuffer) {
+        if (!m_boundArrayBuffer->associateBufferData(data)) {
+            m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
+            return;
+        }
+    } else {
+        m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
+        return;
+    }
+
+    m_context->bufferData(target, data, usage);
+    cleanupAfterGraphicsCall(false);
+}
+
 void WebGLRenderingContext::bufferData(unsigned long target, ArrayBufferView* data, unsigned long usage, ExceptionCode& ec)
 {
     UNUSED_PARAM(ec);
@@ -398,6 +424,28 @@ void WebGLRenderingContext::bufferData(unsigned long target, ArrayBufferView* da
     cleanupAfterGraphicsCall(false);
 }
 
+void WebGLRenderingContext::bufferSubData(unsigned long target, long offset, ArrayBuffer* data, ExceptionCode& ec)
+{
+    UNUSED_PARAM(ec);
+    if (target == GraphicsContext3D::ELEMENT_ARRAY_BUFFER && m_boundElementArrayBuffer) {
+        if (!m_boundElementArrayBuffer->associateBufferSubData(offset, data)) {
+            m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
+            return;
+        }
+    } else if (target == GraphicsContext3D::ARRAY_BUFFER && m_boundArrayBuffer) {
+        if (!m_boundArrayBuffer->associateBufferSubData(offset, data)) {
+            m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
+            return;
+        }
+    } else {
+        m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
+        return;
+    }
+
+    m_context->bufferSubData(target, offset, data);
+    cleanupAfterGraphicsCall(false);
+}
+
 void WebGLRenderingContext::bufferSubData(unsigned long target, long offset, ArrayBufferView* data, ExceptionCode& ec)
 {
     UNUSED_PARAM(ec);
diff --git a/WebCore/html/canvas/WebGLRenderingContext.h b/WebCore/html/canvas/WebGLRenderingContext.h
index d03d972..dc000b6 100644
--- a/WebCore/html/canvas/WebGLRenderingContext.h
+++ b/WebCore/html/canvas/WebGLRenderingContext.h
@@ -77,7 +77,9 @@ class WebKitCSSMatrix;
         void blendFuncSeparate(unsigned long srcRGB, unsigned long dstRGB, unsigned long srcAlpha, unsigned long dstAlpha);
 
         void bufferData(unsigned long target, int size, unsigned long usage, ExceptionCode&);
+        void bufferData(unsigned long target, ArrayBuffer* data, unsigned long usage, ExceptionCode&);
         void bufferData(unsigned long target, ArrayBufferView* data, unsigned long usage, ExceptionCode&);
+        void bufferSubData(unsigned long target, long offset, ArrayBuffer* data, ExceptionCode&);
         void bufferSubData(unsigned long target, long offset, ArrayBufferView* data, ExceptionCode&);
 
         unsigned long checkFramebufferStatus(unsigned long target);
diff --git a/WebCore/html/canvas/WebGLRenderingContext.idl b/WebCore/html/canvas/WebGLRenderingContext.idl
index 1ea4c6d..4197da9 100644
--- a/WebCore/html/canvas/WebGLRenderingContext.idl
+++ b/WebCore/html/canvas/WebGLRenderingContext.idl
@@ -477,9 +477,10 @@ module html {
         void         blendEquationSeparate(in unsigned long modeRGB, in unsigned long modeAlpha);
         void         blendFunc(in unsigned long sfactor, in unsigned long dfactor);
         void         blendFuncSeparate(in unsigned long srcRGB, in unsigned long dstRGB, in unsigned long srcAlpha, in unsigned long dstAlpha);
-
+        void         bufferData(in unsigned long target, in ArrayBuffer data, in unsigned long usage) raises (DOMException);
         void         bufferData(in unsigned long target, in ArrayBufferView data, in unsigned long usage) raises (DOMException);
         void         bufferData(in unsigned long target, in long size, in unsigned long usage) raises (DOMException);
+        void         bufferSubData(in unsigned long target, in long offset, in ArrayBuffer data) raises (DOMException);
         void         bufferSubData(in unsigned long target, in long offset, in ArrayBufferView data) raises (DOMException);
 
         unsigned long checkFramebufferStatus(in unsigned long target);
diff --git a/WebCore/platform/graphics/GraphicsContext3D.h b/WebCore/platform/graphics/GraphicsContext3D.h
index 882362f..2887e62 100644
--- a/WebCore/platform/graphics/GraphicsContext3D.h
+++ b/WebCore/platform/graphics/GraphicsContext3D.h
@@ -70,6 +70,7 @@ const Platform3DObject NullPlatform3DObject = 0;
 
 namespace WebCore {
     class WebGLActiveInfo;
+    class ArrayBuffer;
     class ArrayBufferView;
     class WebGLBuffer;
     class Uint8Array;
@@ -551,7 +552,9 @@ namespace WebCore {
         void blendFuncSeparate(unsigned long srcRGB, unsigned long dstRGB, unsigned long srcAlpha, unsigned long dstAlpha);
 
         void bufferData(unsigned long target, int size, unsigned long usage);
+        void bufferData(unsigned long target, ArrayBuffer* data, unsigned long usage);
         void bufferData(unsigned long target, ArrayBufferView* data, unsigned long usage);
+        void bufferSubData(unsigned long target, long offset, ArrayBuffer* data);
         void bufferSubData(unsigned long target, long offset, ArrayBufferView* data);
 
         unsigned long checkFramebufferStatus(unsigned long target);
diff --git a/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm b/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm
index 1c12ba1..ae9ace2 100644
--- a/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm
+++ b/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm
@@ -34,6 +34,7 @@
 #include "ImageBuffer.h"
 #include "NotImplemented.h"
 #include "WebGLActiveInfo.h"
+#include "ArrayBuffer.h"
 #include "ArrayBufferView.h"
 #include "WebGLBuffer.h"
 #include "Float32Array.h"
@@ -494,6 +495,16 @@ void GraphicsContext3D::bufferData(unsigned long target, int size, unsigned long
     ensureContext(m_contextObj);
     ::glBufferData(target, size, 0, usage);
 }
+
+void GraphicsContext3D::bufferData(unsigned long target, ArrayBuffer* array, unsigned long usage)
+{
+    if (!array || !array->byteLength())
+        return;
+    
+    ensureContext(m_contextObj);
+    ::glBufferData(target, array->byteLength(), array->data(), usage);
+}
+
 void GraphicsContext3D::bufferData(unsigned long target, ArrayBufferView* array, unsigned long usage)
 {
     if (!array || !array->length())
@@ -503,6 +514,15 @@ void GraphicsContext3D::bufferData(unsigned long target, ArrayBufferView* array,
     ::glBufferData(target, array->byteLength(), array->baseAddress(), usage);
 }
 
+void GraphicsContext3D::bufferSubData(unsigned long target, long offset, ArrayBuffer* array)
+{
+    if (!array || !array->byteLength())
+        return;
+    
+    ensureContext(m_contextObj);
+    ::glBufferSubData(target, offset, array->byteLength(), array->data());
+}
+
 void GraphicsContext3D::bufferSubData(unsigned long target, long offset, ArrayBufferView* array)
 {
     if (!array || !array->length())
diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
index 7389ce8..f619707 100644
--- a/WebKit/chromium/ChangeLog
+++ b/WebKit/chromium/ChangeLog
@@ -2,6 +2,17 @@
 
         Reviewed by Darin Fisher.
 
+        Implement bufferData and bufferSubData with ArrayBuffer as input
+        https://bugs.webkit.org/show_bug.cgi?id=41884
+
+        * src/GraphicsContext3D.cpp: Implement bufferData and bufferSubData with ArrayBuffer as input.
+        (WebCore::GraphicsContext3DInternal::bufferData):
+        (WebCore::GraphicsContext3DInternal::bufferSubData):
+
+2010-07-10  Zhenyao Mo  <zmo at google.com>
+
+        Reviewed by Darin Fisher.
+
         Need to emulate MAX_VARYING_VECTORS/MAX_FRAGMENT_UNIFORM_VECTORs/MAX_VERTEX_UNIFORM_VECTORS for glGet
         https://bugs.webkit.org/show_bug.cgi?id=42032
 
diff --git a/WebKit/chromium/src/GraphicsContext3D.cpp b/WebKit/chromium/src/GraphicsContext3D.cpp
index 7ba0bce..aad9645 100644
--- a/WebKit/chromium/src/GraphicsContext3D.cpp
+++ b/WebKit/chromium/src/GraphicsContext3D.cpp
@@ -139,7 +139,9 @@ public:
     void blendFuncSeparate(unsigned long srcRGB, unsigned long dstRGB, unsigned long srcAlpha, unsigned long dstAlpha);
 
     void bufferData(unsigned long target, int size, unsigned long usage);
+    void bufferData(unsigned long target, ArrayBuffer* data, unsigned long usage);
     void bufferData(unsigned long target, ArrayBufferView* data, unsigned long usage);
+    void bufferSubData(unsigned long target, long offset, ArrayBuffer* data);
     void bufferSubData(unsigned long target, long offset, ArrayBufferView* data);
 
     unsigned long checkFramebufferStatus(unsigned long target);
@@ -718,11 +720,21 @@ void GraphicsContext3DInternal::bufferData(unsigned long target, int size, unsig
     m_impl->bufferData(target, size, 0, usage);
 }
 
+void GraphicsContext3DInternal::bufferData(unsigned long target, ArrayBuffer* array, unsigned long usage)
+{
+    m_impl->bufferData(target, array->byteLength(), array->data(), usage);
+}
+
 void GraphicsContext3DInternal::bufferData(unsigned long target, ArrayBufferView* array, unsigned long usage)
 {
     m_impl->bufferData(target, array->byteLength(), array->baseAddress(), usage);
 }
 
+void GraphicsContext3DInternal::bufferSubData(unsigned long target, long offset, ArrayBuffer* array)
+{
+    m_impl->bufferSubData(target, offset, array->byteLength(), array->data());
+}
+
 void GraphicsContext3DInternal::bufferSubData(unsigned long target, long offset, ArrayBufferView* array)
 {
     m_impl->bufferSubData(target, offset, array->byteLength(), array->baseAddress());
@@ -1165,7 +1177,9 @@ DELEGATE_TO_INTERNAL_2(blendFunc, unsigned long, unsigned long)
 DELEGATE_TO_INTERNAL_4(blendFuncSeparate, unsigned long, unsigned long, unsigned long, unsigned long)
 
 DELEGATE_TO_INTERNAL_3(bufferData, unsigned long, int, unsigned long)
+DELEGATE_TO_INTERNAL_3(bufferData, unsigned long, ArrayBuffer*, unsigned long)
 DELEGATE_TO_INTERNAL_3(bufferData, unsigned long, ArrayBufferView*, unsigned long)
+DELEGATE_TO_INTERNAL_3(bufferSubData, unsigned long, long, ArrayBuffer*)
 DELEGATE_TO_INTERNAL_3(bufferSubData, unsigned long, long, ArrayBufferView*)
 
 DELEGATE_TO_INTERNAL_1R(checkFramebufferStatus, unsigned long, unsigned long)

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list