WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch
bug-51725-20110105180021.patch (text/plain), 27.04 KB, created by
Zhenyao Mo
on 2011-01-05 18:00:22 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Zhenyao Mo
Created:
2011-01-05 18:00:22 PST
Size:
27.04 KB
patch
obsolete
>Index: WebCore/ChangeLog >=================================================================== >--- WebCore/ChangeLog (revision 74762) >+++ WebCore/ChangeLog (working copy) >@@ -1,3 +1,13 @@ >+2010-12-29 Zhenyao Mo <zmo@google.com> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ vertexAttribPointer should raise INVALID_OPERATION if stride/offset is not multiple of the type size >+ https://bugs.webkit.org/show_bug.cgi?id=51725 >+ >+ * html/canvas/WebGLRenderingContext.cpp: >+ (WebCore::WebGLRenderingContext::vertexAttribPointer): >+ > 2010-12-29 Pavel Feldman <pfeldman@chromium.org> > > Not reviewed: revert r74755 and 74757. >Index: WebCore/html/canvas/WebGLRenderingContext.cpp >=================================================================== >--- WebCore/html/canvas/WebGLRenderingContext.cpp (revision 74744) >+++ WebCore/html/canvas/WebGLRenderingContext.cpp (working copy) >@@ -3284,6 +3284,17 @@ void WebGLRenderingContext::vertexAttrib > UNUSED_PARAM(ec); > if (isContextLost()) > return; >+ switch (type) { >+ case GraphicsContext3D::BYTE: >+ case GraphicsContext3D::UNSIGNED_BYTE: >+ case GraphicsContext3D::SHORT: >+ case GraphicsContext3D::UNSIGNED_SHORT: >+ case GraphicsContext3D::FLOAT: >+ break; >+ default: >+ m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM); >+ return; >+ } > if (index >= m_maxVertexAttribs) { > m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE); > return; >@@ -3297,23 +3308,22 @@ void WebGLRenderingContext::vertexAttrib > return; > } > // Determine the number of elements the bound buffer can hold, given the offset, size, type and stride >- long bytesPerElement = size * sizeInBytes(type); >- if (bytesPerElement <= 0) { >+ long typeSize = sizeInBytes(type); >+ if (typeSize <= 0) { > m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM); > return; > } >+ if ((stride % typeSize) || (offset % typeSize)) { >+ m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION); >+ return; >+ } >+ long bytesPerElement = size * typeSize; > > if (index >= m_vertexAttribState.size()) > m_vertexAttribState.resize(index + 1); > >- long validatedStride = bytesPerElement; >- if (stride) { >- if ((long) stride < bytesPerElement) { >- m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE); >- return; >- } >- validatedStride = stride; >- } >+ long validatedStride = stride ? stride : bytesPerElement; >+ > m_vertexAttribState[index].bufferBinding = m_boundArrayBuffer; > m_vertexAttribState[index].bytesPerElement = bytesPerElement; > m_vertexAttribState[index].size = size; >Index: LayoutTests/ChangeLog >=================================================================== >--- LayoutTests/ChangeLog (revision 74762) >+++ LayoutTests/ChangeLog (working copy) >@@ -1,3 +1,13 @@ >+2010-12-29 Zhenyao Mo <zmo@google.com> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ vertexAttribPointer should raise INVALID_OPERATION if stride/offset is not multiple of the type size >+ https://bugs.webkit.org/show_bug.cgi?id=51725 >+ >+ * fast/canvas/webgl/gl-vertexattribpointer-expected.txt: >+ * fast/canvas/webgl/gl-vertexattribpointer.html: Sync with khronos. >+ > 2010-12-29 Mihai Parparita <mihaip@chromium.org> > > Unreviewed Chromium expectations update. >Index: LayoutTests/fast/canvas/webgl/gl-vertexattribpointer-expected.txt >=================================================================== >--- LayoutTests/fast/canvas/webgl/gl-vertexattribpointer-expected.txt (revision 74744) >+++ LayoutTests/fast/canvas/webgl/gl-vertexattribpointer-expected.txt (working copy) >@@ -8,8 +8,188 @@ PASS context exists > > Checking gl.vertexAttribPointer. > PASS getError was expected value: INVALID_OPERATION : vertexAttribPointer should fail if no buffer is bound >-PASS getError was expected value: INVALID_VALUE : WebGL API supports vertex attribute data strides up to 255 bytes >-PASS getError was expected value: NO_ERROR : vertexAttribPointer with stride <= 255 should succeed >+PASS getError was expected value: INVALID_ENUM : vertexAttribPointer should not support INT >+PASS getError was expected value: INVALID_ENUM : vertexAttribPointer should not support UNSIGNED_INT >+PASS getError was expected value: INVALID_ENUM : vertexAttribPointer should not support FIXED >+ >+ >+checking: BYTE with size 1 >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 1, gl.BYTE, false, 0, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 1, gl.BYTE, false, 1, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 1, gl.BYTE, false, 255, 0) should succeed at stride limit >+PASS getError was expected value: INVALID_VALUE : gl.vertexAttribPointer(0, 1, gl.BYTE, false, 256, 0) should fail over stride limit >+ >+checking: BYTE with size 2 >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 2, gl.BYTE, false, 0, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 2, gl.BYTE, false, 1, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 2, gl.BYTE, false, 2, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 2, gl.BYTE, false, 255, 0) should succeed at stride limit >+PASS getError was expected value: INVALID_VALUE : gl.vertexAttribPointer(0, 2, gl.BYTE, false, 256, 0) should fail over stride limit >+ >+checking: BYTE with size 3 >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 3, gl.BYTE, false, 0, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 3, gl.BYTE, false, 2, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 3, gl.BYTE, false, 3, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 3, gl.BYTE, false, 255, 0) should succeed at stride limit >+PASS getError was expected value: INVALID_VALUE : gl.vertexAttribPointer(0, 3, gl.BYTE, false, 256, 0) should fail over stride limit >+ >+checking: BYTE with size 4 >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 4, gl.BYTE, false, 0, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 4, gl.BYTE, false, 3, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 4, gl.BYTE, false, 4, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 4, gl.BYTE, false, 255, 0) should succeed at stride limit >+PASS getError was expected value: INVALID_VALUE : gl.vertexAttribPointer(0, 4, gl.BYTE, false, 256, 0) should fail over stride limit >+ >+ >+checking: UNSIGNED_BYTE with size 1 >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 1, gl.UNSIGNED_BYTE, false, 0, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 1, gl.UNSIGNED_BYTE, false, 1, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 1, gl.UNSIGNED_BYTE, false, 255, 0) should succeed at stride limit >+PASS getError was expected value: INVALID_VALUE : gl.vertexAttribPointer(0, 1, gl.UNSIGNED_BYTE, false, 256, 0) should fail over stride limit >+ >+checking: UNSIGNED_BYTE with size 2 >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 2, gl.UNSIGNED_BYTE, false, 0, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 2, gl.UNSIGNED_BYTE, false, 1, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 2, gl.UNSIGNED_BYTE, false, 2, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 2, gl.UNSIGNED_BYTE, false, 255, 0) should succeed at stride limit >+PASS getError was expected value: INVALID_VALUE : gl.vertexAttribPointer(0, 2, gl.UNSIGNED_BYTE, false, 256, 0) should fail over stride limit >+ >+checking: UNSIGNED_BYTE with size 3 >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 3, gl.UNSIGNED_BYTE, false, 0, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 3, gl.UNSIGNED_BYTE, false, 2, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 3, gl.UNSIGNED_BYTE, false, 3, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 3, gl.UNSIGNED_BYTE, false, 255, 0) should succeed at stride limit >+PASS getError was expected value: INVALID_VALUE : gl.vertexAttribPointer(0, 3, gl.UNSIGNED_BYTE, false, 256, 0) should fail over stride limit >+ >+checking: UNSIGNED_BYTE with size 4 >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 4, gl.UNSIGNED_BYTE, false, 0, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 4, gl.UNSIGNED_BYTE, false, 3, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 4, gl.UNSIGNED_BYTE, false, 4, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 4, gl.UNSIGNED_BYTE, false, 255, 0) should succeed at stride limit >+PASS getError was expected value: INVALID_VALUE : gl.vertexAttribPointer(0, 4, gl.UNSIGNED_BYTE, false, 256, 0) should fail over stride limit >+ >+ >+checking: SHORT with size 1 >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 1, gl.SHORT, false, 0, 0) should succeed >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 1, gl.SHORT, false, 1, 0) should fail because stride is bad >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 1, gl.SHORT, false, 2, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 1, gl.SHORT, false, 254, 0) should succeed at stride limit >+PASS getError was expected value: INVALID_VALUE : gl.vertexAttribPointer(0, 1, gl.SHORT, false, 256, 0) should fail over stride limit >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 1, gl.SHORT, false, 0, 1) should fail because offset is bad >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 1, gl.SHORT, false, 1, 1) should fail because stride is bad >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 1, gl.SHORT, false, 2, 1) should fail because offset is bad >+ >+checking: SHORT with size 2 >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 2, gl.SHORT, false, 0, 0) should succeed >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 2, gl.SHORT, false, 3, 0) should fail because stride is bad >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 2, gl.SHORT, false, 4, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 2, gl.SHORT, false, 254, 0) should succeed at stride limit >+PASS getError was expected value: INVALID_VALUE : gl.vertexAttribPointer(0, 2, gl.SHORT, false, 256, 0) should fail over stride limit >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 2, gl.SHORT, false, 0, 1) should fail because offset is bad >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 2, gl.SHORT, false, 3, 1) should fail because stride is bad >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 2, gl.SHORT, false, 4, 1) should fail because offset is bad >+ >+checking: SHORT with size 3 >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 3, gl.SHORT, false, 0, 0) should succeed >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 3, gl.SHORT, false, 5, 0) should fail because stride is bad >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 3, gl.SHORT, false, 6, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 3, gl.SHORT, false, 254, 0) should succeed at stride limit >+PASS getError was expected value: INVALID_VALUE : gl.vertexAttribPointer(0, 3, gl.SHORT, false, 256, 0) should fail over stride limit >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 3, gl.SHORT, false, 0, 1) should fail because offset is bad >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 3, gl.SHORT, false, 5, 1) should fail because stride is bad >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 3, gl.SHORT, false, 6, 1) should fail because offset is bad >+ >+checking: SHORT with size 4 >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 4, gl.SHORT, false, 0, 0) should succeed >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 4, gl.SHORT, false, 7, 0) should fail because stride is bad >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 4, gl.SHORT, false, 8, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 4, gl.SHORT, false, 254, 0) should succeed at stride limit >+PASS getError was expected value: INVALID_VALUE : gl.vertexAttribPointer(0, 4, gl.SHORT, false, 256, 0) should fail over stride limit >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 4, gl.SHORT, false, 0, 1) should fail because offset is bad >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 4, gl.SHORT, false, 7, 1) should fail because stride is bad >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 4, gl.SHORT, false, 8, 1) should fail because offset is bad >+ >+ >+checking: UNSIGNED_SHORT with size 1 >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 1, gl.UNSIGNED_SHORT, false, 0, 0) should succeed >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 1, gl.UNSIGNED_SHORT, false, 1, 0) should fail because stride is bad >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 1, gl.UNSIGNED_SHORT, false, 2, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 1, gl.UNSIGNED_SHORT, false, 254, 0) should succeed at stride limit >+PASS getError was expected value: INVALID_VALUE : gl.vertexAttribPointer(0, 1, gl.UNSIGNED_SHORT, false, 256, 0) should fail over stride limit >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 1, gl.UNSIGNED_SHORT, false, 0, 1) should fail because offset is bad >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 1, gl.UNSIGNED_SHORT, false, 1, 1) should fail because stride is bad >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 1, gl.UNSIGNED_SHORT, false, 2, 1) should fail because offset is bad >+ >+checking: UNSIGNED_SHORT with size 2 >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 2, gl.UNSIGNED_SHORT, false, 0, 0) should succeed >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 2, gl.UNSIGNED_SHORT, false, 3, 0) should fail because stride is bad >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 2, gl.UNSIGNED_SHORT, false, 4, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 2, gl.UNSIGNED_SHORT, false, 254, 0) should succeed at stride limit >+PASS getError was expected value: INVALID_VALUE : gl.vertexAttribPointer(0, 2, gl.UNSIGNED_SHORT, false, 256, 0) should fail over stride limit >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 2, gl.UNSIGNED_SHORT, false, 0, 1) should fail because offset is bad >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 2, gl.UNSIGNED_SHORT, false, 3, 1) should fail because stride is bad >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 2, gl.UNSIGNED_SHORT, false, 4, 1) should fail because offset is bad >+ >+checking: UNSIGNED_SHORT with size 3 >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 3, gl.UNSIGNED_SHORT, false, 0, 0) should succeed >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 3, gl.UNSIGNED_SHORT, false, 5, 0) should fail because stride is bad >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 3, gl.UNSIGNED_SHORT, false, 6, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 3, gl.UNSIGNED_SHORT, false, 254, 0) should succeed at stride limit >+PASS getError was expected value: INVALID_VALUE : gl.vertexAttribPointer(0, 3, gl.UNSIGNED_SHORT, false, 256, 0) should fail over stride limit >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 3, gl.UNSIGNED_SHORT, false, 0, 1) should fail because offset is bad >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 3, gl.UNSIGNED_SHORT, false, 5, 1) should fail because stride is bad >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 3, gl.UNSIGNED_SHORT, false, 6, 1) should fail because offset is bad >+ >+checking: UNSIGNED_SHORT with size 4 >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 4, gl.UNSIGNED_SHORT, false, 0, 0) should succeed >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 4, gl.UNSIGNED_SHORT, false, 7, 0) should fail because stride is bad >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 4, gl.UNSIGNED_SHORT, false, 8, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 4, gl.UNSIGNED_SHORT, false, 254, 0) should succeed at stride limit >+PASS getError was expected value: INVALID_VALUE : gl.vertexAttribPointer(0, 4, gl.UNSIGNED_SHORT, false, 256, 0) should fail over stride limit >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 4, gl.UNSIGNED_SHORT, false, 0, 1) should fail because offset is bad >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 4, gl.UNSIGNED_SHORT, false, 7, 1) should fail because stride is bad >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 4, gl.UNSIGNED_SHORT, false, 8, 1) should fail because offset is bad >+ >+ >+checking: FLOAT with size 1 >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 1, gl.FLOAT, false, 0, 0) should succeed >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 1, gl.FLOAT, false, 3, 0) should fail because stride is bad >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 1, gl.FLOAT, false, 4, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 1, gl.FLOAT, false, 252, 0) should succeed at stride limit >+PASS getError was expected value: INVALID_VALUE : gl.vertexAttribPointer(0, 1, gl.FLOAT, false, 256, 0) should fail over stride limit >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 1, gl.FLOAT, false, 0, 3) should fail because offset is bad >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 1, gl.FLOAT, false, 3, 3) should fail because stride is bad >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 1, gl.FLOAT, false, 4, 3) should fail because offset is bad >+ >+checking: FLOAT with size 2 >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0) should succeed >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 7, 0) should fail because stride is bad >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 8, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 252, 0) should succeed at stride limit >+PASS getError was expected value: INVALID_VALUE : gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 256, 0) should fail over stride limit >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 3) should fail because offset is bad >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 7, 3) should fail because stride is bad >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 8, 3) should fail because offset is bad >+ >+checking: FLOAT with size 3 >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 0, 0) should succeed >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 11, 0) should fail because stride is bad >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 12, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 252, 0) should succeed at stride limit >+PASS getError was expected value: INVALID_VALUE : gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 256, 0) should fail over stride limit >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 0, 3) should fail because offset is bad >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 11, 3) should fail because stride is bad >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 12, 3) should fail because offset is bad >+ >+checking: FLOAT with size 4 >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 4, gl.FLOAT, false, 0, 0) should succeed >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 4, gl.FLOAT, false, 15, 0) should fail because stride is bad >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 4, gl.FLOAT, false, 16, 0) should succeed >+PASS getError was expected value: NO_ERROR : gl.vertexAttribPointer(0, 4, gl.FLOAT, false, 252, 0) should succeed at stride limit >+PASS getError was expected value: INVALID_VALUE : gl.vertexAttribPointer(0, 4, gl.FLOAT, false, 256, 0) should fail over stride limit >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 4, gl.FLOAT, false, 0, 3) should fail because offset is bad >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 4, gl.FLOAT, false, 15, 3) should fail because stride is bad >+PASS getError was expected value: INVALID_OPERATION : gl.vertexAttribPointer(0, 4, gl.FLOAT, false, 16, 3) should fail because offset is bad > > PASS successfullyParsed is true > >Index: LayoutTests/fast/canvas/webgl/gl-vertexattribpointer.html >=================================================================== >--- LayoutTests/fast/canvas/webgl/gl-vertexattribpointer.html (revision 74744) >+++ LayoutTests/fast/canvas/webgl/gl-vertexattribpointer.html (working copy) >@@ -8,6 +8,7 @@ > <script src="resources/desktop-gl-constants.js" type="text/javascript"></script> > <script src="../../js/resources/js-test-pre.js"></script> > <script src="resources/webgl-test.js"></script> >+<script src="resources/webgl-test-utils.js"></script> > </head> > <body> > <div id="description"></div> >@@ -19,6 +20,7 @@ description("This test checks vertexAttr > debug(""); > debug("Canvas.getContext"); > >+var wtu = WebGLTestUtils; > var gl = create3DContext(document.getElementById("canvas")); > if (!gl) { > testFailed("context does not exist"); >@@ -28,19 +30,96 @@ if (!gl) { > debug(""); > debug("Checking gl.vertexAttribPointer."); > >+ if (!gl.FIXED) { >+ gl.FIXED = 0x140C; >+ } >+ > gl.vertexAttribPointer(0, 3, gl.FLOAT, 0, 0, 12); > glErrorShouldBe(gl, gl.INVALID_OPERATION, > "vertexAttribPointer should fail if no buffer is bound"); > > var vertexObject = gl.createBuffer(); > gl.bindBuffer(gl.ARRAY_BUFFER, vertexObject); >- gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(512), gl.STATIC_DRAW); >- gl.vertexAttribPointer(0, 1, gl.FLOAT, 0, 256, 0); >- glErrorShouldBe(gl, gl.INVALID_VALUE, >- "WebGL API supports vertex attribute data strides up to 255 bytes"); >- gl.vertexAttribPointer(0, 1, gl.FLOAT, 0, 255, 0); >- glErrorShouldBe(gl, gl.NO_ERROR, >- "vertexAttribPointer with stride <= 255 should succeed"); >+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(0), gl.STATIC_DRAW); >+ >+ gl.vertexAttribPointer(0, 1, gl.INT, 0, 0, 0); >+ glErrorShouldBe(gl, gl.INVALID_ENUM, >+ "vertexAttribPointer should not support INT"); >+ gl.vertexAttribPointer(0, 1, gl.UNSIGNED_INT, 0, 0, 0); >+ glErrorShouldBe(gl, gl.INVALID_ENUM, >+ "vertexAttribPointer should not support UNSIGNED_INT"); >+ gl.vertexAttribPointer(0, 1, gl.FIXED, 0, 0, 0); >+ glErrorShouldBe(gl, gl.INVALID_ENUM, >+ "vertexAttribPointer should not support FIXED"); >+ >+ function checkVertexAttribPointer( >+ gl, err, reason, size, type, normalize, stride, offset) { >+ gl.vertexAttribPointer(0, size, type, normalize, stride, offset); >+ glErrorShouldBe(gl, err, >+ "gl.vertexAttribPointer(0, " + size + >+ ", gl." + wtu.glEnumToString(gl, type) + >+ ", " + normalize + >+ ", " + stride + >+ ", " + offset + >+ ") should " + (err == gl.NO_ERROR ? "succeed " : "fail ") + reason); >+ } >+ >+ var types = [ >+ { type:gl.BYTE, bytesPerComponent: 1 }, >+ { type:gl.UNSIGNED_BYTE, bytesPerComponent: 1 }, >+ { type:gl.SHORT, bytesPerComponent: 2 }, >+ { type:gl.UNSIGNED_SHORT, bytesPerComponent: 2 }, >+ { type:gl.FLOAT, bytesPerComponent: 4 }, >+ ]; >+ >+ for (var ii = 0; ii < types.length; ++ii) { >+ var info = types[ii]; >+ debug(""); >+ for (var size = 1; size <= 4; ++size) { >+ debug(""); >+ debug("checking: " + wtu.glEnumToString(gl, info.type) + " with size " + size); >+ var bytesPerElement = size * info.bytesPerComponent; >+ var offsetSet; >+ if (info.bytesPerComponent > 1) >+ offsetSet = [0, info.bytesPerComponent - 1]; >+ else >+ offsetSet = [0]; >+ for (var jj = 0; jj < offsetSet.length; ++jj) { >+ var offset = offsetSet[jj]; >+ var strideSet; >+ if (bytesPerElement > 1) >+ strideSet = [0, bytesPerElement - 1, bytesPerElement]; >+ else >+ strideSet = [0, bytesPerElement]; >+ for (var kk = 0; kk < strideSet.length; ++kk) { >+ var stride = strideSet[kk]; >+ var err = gl.NO_ERROR; >+ var reason = "" >+ if (offset != 0) { >+ reason = "because offset is bad"; >+ err = gl.INVALID_OPERATION; >+ } >+ if (stride % info.bytesPerComponent != 0) { >+ reason = "because stride is bad"; >+ err = gl.INVALID_OPERATION; >+ } >+ checkVertexAttribPointer( >+ gl, err, reason, size, info.type, false, stride, offset); >+ } >+ var stride = Math.floor(255 / info.bytesPerComponent) * info.bytesPerComponent; >+ >+ if (offset == 0) { >+ checkVertexAttribPointer( >+ gl, gl.NO_ERROR, "at stride limit", >+ size, info.type, false, stride, offset); >+ checkVertexAttribPointer( >+ gl, gl.INVALID_VALUE, "over stride limit", >+ size, info.type, false, >+ stride + info.bytesPerComponent, offset); >+ } >+ } >+ } >+ } > } > > debug("");
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
kbr
:
review+
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 51725
:
77646
| 78082