[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