<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[213040] releases/WebKitGTK/webkit-2.16</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/213040">213040</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2017-02-27 01:06:10 -0800 (Mon, 27 Feb 2017)</dd>
</dl>

<h3>Log Message</h3>
<pre>Merge <a href="http://trac.webkit.org/projects/webkit/changeset/212784">r212784</a> - REGRESSION (<a href="http://trac.webkit.org/projects/webkit/changeset/207720">r207720</a>): /more/conformance/conformance/quickCheckAPI-S_V.html test fails
https://bugs.webkit.org/show_bug.cgi?id=168632
&lt;rdar://problem/30620129&gt;

Reviewed by Darin Adler.

Source/WebCore:

After <a href="http://trac.webkit.org/projects/webkit/changeset/207720">r207720</a>, the following WebGL conformance tests started failing:
- /more/conformance/conformance/quickCheckAPI-S_V.html
- /context/context-lost.html

We started throwing security errors in case where we did not before.
Chrome and Firefox are both passing these tests so our new behavior was not interoperable.

This patch reverts part of <a href="http://trac.webkit.org/projects/webkit/changeset/207720">r207720</a> to restore our previous behavior.

* html/canvas/WebGLRenderingContextBase.cpp:
(WebCore::WebGLRenderingContextBase::texSubImage2D):
(WebCore::WebGLRenderingContextBase::texImage2D):
(WebCore::WebGLRenderingContextBase::validateHTMLImageElement):
(WebCore::WebGLRenderingContextBase::validateHTMLCanvasElement):
(WebCore::WebGLRenderingContextBase::validateHTMLVideoElement):
* html/canvas/WebGLRenderingContextBase.h:

LayoutTests:

Import layout test coverage.

* http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/context/context-lost-expected.txt: Added.
* http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/context/context-lost.html: Added.
* http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/more/conformance/argGenerators-S_V.js: Added.
* http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/more/conformance/quickCheckAPI-S_V-expected.txt: Added.
* http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/more/conformance/quickCheckAPI-S_V.html: Added.
* http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/more/conformance/quickCheckAPI.js: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#releasesWebKitGTKwebkit216LayoutTestsChangeLog">releases/WebKitGTK/webkit-2.16/LayoutTests/ChangeLog</a></li>
<li><a href="#releasesWebKitGTKwebkit216SourceWebCoreChangeLog">releases/WebKitGTK/webkit-2.16/Source/WebCore/ChangeLog</a></li>
<li><a href="#releasesWebKitGTKwebkit216SourceWebCorehtmlcanvasWebGLRenderingContextBasecpp">releases/WebKitGTK/webkit-2.16/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp</a></li>
<li><a href="#releasesWebKitGTKwebkit216SourceWebCorehtmlcanvasWebGLRenderingContextBaseh">releases/WebKitGTK/webkit-2.16/Source/WebCore/html/canvas/WebGLRenderingContextBase.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li>releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/context/</li>
<li><a href="#releasesWebKitGTKwebkit216LayoutTestshttptestswebgl102resourceswebgl_test_filesconformancecontextcontextlostexpectedtxt">releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/context/context-lost-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit216LayoutTestshttptestswebgl102resourceswebgl_test_filesconformancecontextcontextlosthtml">releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/context/context-lost.html</a></li>
<li>releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/more/conformance/</li>
<li><a href="#releasesWebKitGTKwebkit216LayoutTestshttptestswebgl102resourceswebgl_test_filesconformancemoreconformanceargGeneratorsS_Vjs">releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/more/conformance/argGenerators-S_V.js</a></li>
<li><a href="#releasesWebKitGTKwebkit216LayoutTestshttptestswebgl102resourceswebgl_test_filesconformancemoreconformancequickCheckAPIS_Vexpectedtxt">releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/more/conformance/quickCheckAPI-S_V-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit216LayoutTestshttptestswebgl102resourceswebgl_test_filesconformancemoreconformancequickCheckAPIS_Vhtml">releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/more/conformance/quickCheckAPI-S_V.html</a></li>
<li><a href="#releasesWebKitGTKwebkit216LayoutTestshttptestswebgl102resourceswebgl_test_filesconformancemoreconformancequickCheckAPIjs">releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/more/conformance/quickCheckAPI.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="releasesWebKitGTKwebkit216LayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.16/LayoutTests/ChangeLog (213039 => 213040)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.16/LayoutTests/ChangeLog        2017-02-27 09:03:30 UTC (rev 213039)
+++ releases/WebKitGTK/webkit-2.16/LayoutTests/ChangeLog        2017-02-27 09:06:10 UTC (rev 213040)
</span><span class="lines">@@ -1,3 +1,20 @@
</span><ins>+2017-02-21  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        REGRESSION (r207720): /more/conformance/conformance/quickCheckAPI-S_V.html test fails
+        https://bugs.webkit.org/show_bug.cgi?id=168632
+        &lt;rdar://problem/30620129&gt;
+
+        Reviewed by Darin Adler.
+
+        Import layout test coverage.
+
+        * http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/context/context-lost-expected.txt: Added.
+        * http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/context/context-lost.html: Added.
+        * http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/more/conformance/argGenerators-S_V.js: Added.
+        * http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/more/conformance/quickCheckAPI-S_V-expected.txt: Added.
+        * http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/more/conformance/quickCheckAPI-S_V.html: Added.
+        * http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/more/conformance/quickCheckAPI.js: Added.
+
</ins><span class="cx"> 2017-02-20  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         ASSERTION FAILED: m_normalWorld-&gt;hasOneRef() under WorkerThread::stop
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit216LayoutTestshttptestswebgl102resourceswebgl_test_filesconformancecontextcontextlostexpectedtxt"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/context/context-lost-expected.txt (0 => 213040)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/context/context-lost-expected.txt                                (rev 0)
+++ releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/context/context-lost-expected.txt        2017-02-27 09:06:10 UTC (rev 213040)
</span><span class="lines">@@ -0,0 +1,185 @@
</span><ins>+Tests behavior under a lost context
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+Test valid context
+PASS gl.isContextLost() is false
+PASS gl.getError() is gl.NO_ERROR
+PASS gl.enable(gl.BLEND) was expected value: NO_ERROR.
+PASS gl.isBuffer(buffer) is true
+PASS gl.isEnabled(gl.BLEND) is true
+PASS gl.isFramebuffer(framebuffer) is true
+PASS gl.isProgram(program) is true
+PASS gl.isRenderbuffer(renderbuffer) is true
+PASS gl.isShader(shader) is true
+PASS gl.isTexture(texture) is true
+
+Lose context
+
+Test lost context
+PASS gl.isContextLost() is true
+PASS gl.getError() is gl.CONTEXT_LOST_WEBGL
+PASS gl.getError() is gl.NO_ERROR
+PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is gl.FRAMEBUFFER_UNSUPPORTED
+PASS gl.getAttribLocation(program, 'u_modelViewProjMatrix') is -1
+PASS gl.getVertexAttribOffset(0, gl.VERTEX_ATTRIB_ARRAY_POINTER) is 0
+PASS extension.loseContext() was expected value: INVALID_OPERATION.
+PASS gl.activeTexture(gl.TEXTURE0) was expected value: NO_ERROR.
+PASS gl.attachShader(program, shader) was expected value: NO_ERROR.
+PASS gl.bindBuffer(gl.ARRAY_BUFFER, buffer) was expected value: NO_ERROR.
+PASS gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer) was expected value: NO_ERROR.
+PASS gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer) was expected value: NO_ERROR.
+PASS gl.bindTexture(gl.TEXTURE_2D, texture) was expected value: NO_ERROR.
+PASS gl.blendColor(1.0, 1.0, 1.0, 1.0) was expected value: NO_ERROR.
+PASS gl.blendEquation(gl.FUNC_ADD) was expected value: NO_ERROR.
+PASS gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD) was expected value: NO_ERROR.
+PASS gl.blendFunc(gl.ONE, gl.ONE) was expected value: NO_ERROR.
+PASS gl.blendFuncSeparate(gl.ONE, gl.ONE, gl.ONE, gl.ONE) was expected value: NO_ERROR.
+PASS gl.bufferData(gl.ARRAY_BUFFER, 0, gl.STATIC_DRAW) was expected value: NO_ERROR.
+PASS gl.bufferData(gl.ARRAY_BUFFER, arrayBufferView, gl.STATIC_DRAW) was expected value: NO_ERROR.
+PASS gl.bufferData(gl.ARRAY_BUFFER, arrayBuffer, gl.STATIC_DRAW) was expected value: NO_ERROR.
+PASS gl.bufferSubData(gl.ARRAY_BUFFRE, 0, arrayBufferView) was expected value: NO_ERROR.
+PASS gl.bufferSubData(gl.ARRAY_BUFFRE, 0, arrayBuffer) was expected value: NO_ERROR.
+PASS gl.clear(gl.COLOR_BUFFER_BIT) was expected value: NO_ERROR.
+PASS gl.clearColor(1, 1, 1, 1) was expected value: NO_ERROR.
+PASS gl.clearDepth(1) was expected value: NO_ERROR.
+PASS gl.clearStencil(0) was expected value: NO_ERROR.
+PASS gl.colorMask(1, 1, 1, 1) was expected value: NO_ERROR.
+PASS gl.compileShader(shader) was expected value: NO_ERROR.
+PASS gl.copyTexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 0, 0, 0, 0, 0) was expected value: NO_ERROR.
+PASS gl.copyTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 0, 0, 0, 0) was expected value: NO_ERROR.
+PASS gl.cullFace(gl.FRONT) was expected value: NO_ERROR.
+PASS gl.deleteBuffer(buffer) was expected value: NO_ERROR.
+PASS gl.deleteFramebuffer(framebuffer) was expected value: NO_ERROR.
+PASS gl.deleteProgram(program) was expected value: NO_ERROR.
+PASS gl.deleteRenderbuffer(renderbuffer) was expected value: NO_ERROR.
+PASS gl.deleteShader(shader) was expected value: NO_ERROR.
+PASS gl.deleteTexture(texture) was expected value: NO_ERROR.
+PASS gl.depthFunc(gl.NEVER) was expected value: NO_ERROR.
+PASS gl.depthMask(0) was expected value: NO_ERROR.
+PASS gl.depthRange(0, 1) was expected value: NO_ERROR.
+PASS gl.detachShader(program, shader) was expected value: NO_ERROR.
+PASS gl.disable(gl.BLEND) was expected value: NO_ERROR.
+PASS gl.disableVertexAttribArray(0) was expected value: NO_ERROR.
+PASS gl.drawArrays(gl.POINTS, 0, 0) was expected value: NO_ERROR.
+PASS gl.drawElements(gl.POINTS, 0, gl.UNSIGNED_SHORT, 0) was expected value: NO_ERROR.
+PASS gl.enable(gl.BLEND) was expected value: NO_ERROR.
+PASS gl.enableVertexAttribArray(0) was expected value: NO_ERROR.
+PASS gl.finish() was expected value: NO_ERROR.
+PASS gl.flush() was expected value: NO_ERROR.
+PASS gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, renderbuffer) was expected value: NO_ERROR.
+PASS gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0) was expected value: NO_ERROR.
+PASS gl.frontFace(gl.CW) was expected value: NO_ERROR.
+PASS gl.generateMipmap(gl.TEXTURE_2D) was expected value: NO_ERROR.
+PASS gl.hint(gl.GENERATE_MIPMAP_HINT, gl.FASTEST) was expected value: NO_ERROR.
+PASS gl.lineWidth(0) was expected value: NO_ERROR.
+PASS gl.linkProgram(program) was expected value: NO_ERROR.
+PASS gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 0) was expected value: NO_ERROR.
+PASS gl.polygonOffset(0, 0) was expected value: NO_ERROR.
+PASS gl.readPixels(0, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, arrayBufferView) was expected value: NO_ERROR.
+PASS gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, 0, 0) was expected value: NO_ERROR.
+PASS gl.sampleCoverage(0, 0) was expected value: NO_ERROR.
+PASS gl.scissor(0, 0, 0, 0) was expected value: NO_ERROR.
+PASS gl.shaderSource(shader, '') was expected value: NO_ERROR.
+PASS gl.stencilFunc(gl.NEVER, 0, 0) was expected value: NO_ERROR.
+PASS gl.stencilFuncSeparate(gl.FRONT, gl.NEVER, 0, 0) was expected value: NO_ERROR.
+PASS gl.stencilMask(0) was expected value: NO_ERROR.
+PASS gl.stencilMaskSeparate(gl.FRONT, 0) was expected value: NO_ERROR.
+PASS gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP) was expected value: NO_ERROR.
+PASS gl.stencilOpSeparate(gl.FRONT, gl.KEEP, gl.KEEP, gl.KEEP) was expected value: NO_ERROR.
+PASS gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, arrayBufferView) was expected value: NO_ERROR.
+PASS gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, imageData) was expected value: NO_ERROR.
+PASS gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image) was expected value: NO_ERROR.
+PASS gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, canvas) was expected value: NO_ERROR.
+PASS gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, video) was expected value: NO_ERROR.
+PASS gl.texParameterf(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST) was expected value: NO_ERROR.
+PASS gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST) was expected value: NO_ERROR.
+PASS gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, arrayBufferView) was expected value: NO_ERROR.
+PASS gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, imageData) was expected value: NO_ERROR.
+PASS gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, image) was expected value: NO_ERROR.
+PASS gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, canvas) was expected value: NO_ERROR.
+PASS gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, video) was expected value: NO_ERROR.
+PASS gl.uniform1f(uniformLocation, 0) was expected value: NO_ERROR.
+PASS gl.uniform1fv(uniformLocation, float32array) was expected value: NO_ERROR.
+PASS gl.uniform1fv(uniformLocation, [0]) was expected value: NO_ERROR.
+PASS gl.uniform1i(uniformLocation, 0) was expected value: NO_ERROR.
+PASS gl.uniform1iv(uniformLocation, int32array) was expected value: NO_ERROR.
+PASS gl.uniform1iv(uniformLocation, [0]) was expected value: NO_ERROR.
+PASS gl.uniform2f(uniformLocation, 0, 0) was expected value: NO_ERROR.
+PASS gl.uniform2fv(uniformLocation, float32array) was expected value: NO_ERROR.
+PASS gl.uniform2fv(uniformLocation, [0, 0]) was expected value: NO_ERROR.
+PASS gl.uniform2i(uniformLocation, 0, 0) was expected value: NO_ERROR.
+PASS gl.uniform2iv(uniformLocation, int32array) was expected value: NO_ERROR.
+PASS gl.uniform2iv(uniformLocation, [0, 0]) was expected value: NO_ERROR.
+PASS gl.uniform3f(uniformLocation, 0, 0, 0) was expected value: NO_ERROR.
+PASS gl.uniform3fv(uniformLocation, float32array) was expected value: NO_ERROR.
+PASS gl.uniform3fv(uniformLocation, [0, 0, 0]) was expected value: NO_ERROR.
+PASS gl.uniform3i(uniformLocation, 0, 0, 0) was expected value: NO_ERROR.
+PASS gl.uniform3iv(uniformLocation, int32array) was expected value: NO_ERROR.
+PASS gl.uniform3iv(uniformLocation, [0, 0, 0]) was expected value: NO_ERROR.
+PASS gl.uniform4f(uniformLocation, 0, 0, 0, 0) was expected value: NO_ERROR.
+PASS gl.uniform4fv(uniformLocation, float32array) was expected value: NO_ERROR.
+PASS gl.uniform4fv(uniformLocation, [0, 0, 0, 0]) was expected value: NO_ERROR.
+PASS gl.uniform4i(uniformLocation, 0, 0, 0, 0) was expected value: NO_ERROR.
+PASS gl.uniform4iv(uniformLocation, int32array) was expected value: NO_ERROR.
+PASS gl.uniform4iv(uniformLocation, [0, 0, 0, 0]) was expected value: NO_ERROR.
+PASS gl.uniformMatrix2fv(uniformLocation, false, float32array) was expected value: NO_ERROR.
+PASS gl.uniformMatrix2fv(uniformLocation, false, [0, 0, 0, 0]) was expected value: NO_ERROR.
+PASS gl.uniformMatrix3fv(uniformLocation, false, float32array) was expected value: NO_ERROR.
+PASS gl.uniformMatrix3fv(uniformLocation, false, [0, 0, 0, 0, 0, 0, 0, 0, 0]) was expected value: NO_ERROR.
+PASS gl.uniformMatrix4fv(uniformLocation, false, float32array) was expected value: NO_ERROR.
+PASS gl.uniformMatrix4fv(uniformLocation, false, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) was expected value: NO_ERROR.
+PASS gl.useProgram(program) was expected value: NO_ERROR.
+PASS gl.validateProgram(program) was expected value: NO_ERROR.
+PASS gl.vertexAttrib1f(0, 0) was expected value: NO_ERROR.
+PASS gl.vertexAttrib1fv(0, float32array) was expected value: NO_ERROR.
+PASS gl.vertexAttrib1fv(0, [0]) was expected value: NO_ERROR.
+PASS gl.vertexAttrib2f(0, 0, 0) was expected value: NO_ERROR.
+PASS gl.vertexAttrib2fv(0, float32array) was expected value: NO_ERROR.
+PASS gl.vertexAttrib2fv(0, [0, 0]) was expected value: NO_ERROR.
+PASS gl.vertexAttrib3f(0, 0, 0, 0) was expected value: NO_ERROR.
+PASS gl.vertexAttrib3fv(0, float32array) was expected value: NO_ERROR.
+PASS gl.vertexAttrib3fv(0, [0, 0, 0]) was expected value: NO_ERROR.
+PASS gl.vertexAttrib4f(0, 0, 0, 0, 0) was expected value: NO_ERROR.
+PASS gl.vertexAttrib4fv(0, float32array) was expected value: NO_ERROR.
+PASS gl.vertexAttrib4fv(0, [0, 0, 0, 0]) was expected value: NO_ERROR.
+PASS gl.vertexAttribPointer(0, 0, gl.FLOAT, false, 0, 0) was expected value: NO_ERROR.
+PASS gl.viewport(0, 0, 0, 0) was expected value: NO_ERROR.
+PASS gl.createBuffer() is null
+PASS gl.createFramebuffer() is null
+PASS gl.createProgram() is null
+PASS gl.createRenderbuffer() is null
+PASS gl.createShader(gl.GL_VERTEX_SHADER) is null
+PASS gl.createTexture() is null
+PASS gl.getActiveAttrib(program, 0) is null
+PASS gl.getActiveUniform(program, 0) is null
+PASS gl.getAttachedShaders(program) is null
+PASS gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_SIZE) is null
+PASS gl.getContextAttributes() is null
+PASS gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME) is null
+PASS gl.getParameter(gl.CURRENT_PROGRAM) is null
+PASS gl.getProgramInfoLog(program) is null
+PASS gl.getProgramParameter(program, gl.LINK_STATUS) is null
+PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_WIDTH) is null
+PASS gl.getShaderInfoLog(shader) is null
+PASS gl.getShaderParameter(shader, gl.SHADER_TYPE) is null
+PASS gl.getShaderSource(shader) is null
+PASS gl.getTexParameter(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S) is null
+PASS gl.getUniform(program, uniformLocation) is null
+PASS gl.getUniformLocation(program, 'vPosition') is null
+PASS gl.getVertexAttrib(0, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) is null
+PASS gl.getSupportedExtensions() is null
+PASS gl.getExtension('WEBGL_lose_context') is null
+PASS gl.isBuffer(buffer) is false
+PASS gl.isEnabled(gl.BLEND) is false
+PASS gl.isFramebuffer(framebuffer) is false
+PASS gl.isProgram(program) is false
+PASS gl.isRenderbuffer(renderbuffer) is false
+PASS gl.isShader(shader) is false
+PASS gl.isTexture(texture) is false
+PASS gl.getError() is gl.NO_ERROR
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit216LayoutTestshttptestswebgl102resourceswebgl_test_filesconformancecontextcontextlosthtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/context/context-lost.html (0 => 213040)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/context/context-lost.html                                (rev 0)
+++ releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/context/context-lost.html        2017-02-27 09:06:10 UTC (rev 213040)
</span><span class="lines">@@ -0,0 +1,354 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;meta charset=&quot;utf-8&quot;&gt;
+&lt;!--
+
+/*
+** Copyright (c) 2012 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** &quot;Materials&quot;), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+--&gt;
+&lt;link rel=&quot;stylesheet&quot; href=&quot;../../resources/js-test-style.css&quot;/&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/webgl-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/webgl-test-utils.js&quot;&gt;&lt;/script&gt;
+&lt;script&gt;
+&quot;use strict&quot;;
+var wtu;
+var canvas;
+var gl;
+var shouldGenerateGLError;
+var extensionNames = [
+    &quot;WEBGL_lose_context&quot;,
+    &quot;WEBKIT_WEBGL_lose_context&quot;,
+    &quot;MOZ_WEBGL_lose_context&quot;,
+];
+var extensionName;
+var extension;
+
+var buffer;
+var framebuffer;
+var program;
+var renderbuffer;
+var shader;
+var texture;
+var uniformLocation;
+var arrayBuffer;
+var arrayBufferView
+var image;
+var video;
+var canvas2d;
+var ctx2d;
+var imageData;
+var float32array;
+var int32array;
+
+function init()
+{
+    wtu = WebGLTestUtils;
+    canvas = document.getElementById(&quot;canvas&quot;);
+    gl = wtu.create3DContext(canvas);
+    shouldGenerateGLError = wtu.shouldGenerateGLError;
+
+    description(&quot;Tests behavior under a lost context&quot;);
+
+    initTestingHarnessWaitUntilDone();
+
+    // call testValidContext() before checking for the extension, because this is where we check
+    // for the isContextLost() method, which we want to do regardless of the extension's presence.
+    testValidContext();
+
+    for (var ii = 0; ii &lt; extensionNames.length; ++ii) {
+        extension = gl.getExtension(extensionNames[ii]);
+        if (extension) {
+            extensionName = extensionNames[ii];
+            break;
+        }
+    }
+    if (!extension) {
+        debug(&quot;Could not find lose_context extension under the following names: &quot; + extensionNames.join(&quot; &quot;));
+        finishTest();
+        return false;
+    }
+
+    canvas.addEventListener(&quot;webglcontextlost&quot;, testLostContext, false);
+
+    // We need to initialize |uniformLocation| before losing context.
+    // Otherwise gl.getUniform() when context is lost will throw.
+    uniformLocation = gl.getUniformLocation(program, &quot;tex&quot;);
+    loseContext();
+}
+
+function loseContext()
+{
+    debug(&quot;&quot;);
+    debug(&quot;Lose context&quot;);
+
+    // Note: this will cause the context to be lost, but the
+    // webglcontextlost event listener to be queued.
+    extension.loseContext();
+    debug(&quot;&quot;);
+}
+
+function testValidContext()
+{
+    debug(&quot;Test valid context&quot;);
+
+    shouldBeFalse(&quot;gl.isContextLost()&quot;);
+
+    arrayBuffer = new ArrayBuffer(4);
+    arrayBufferView = new Int8Array(arrayBuffer);
+
+    // Generate resources for testing.
+    buffer = gl.createBuffer();
+    gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
+    framebuffer = gl.createFramebuffer();
+    gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
+    program = wtu.setupSimpleTextureProgram(gl);
+    renderbuffer = gl.createRenderbuffer();
+    gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer);
+    shader = gl.createShader(gl.VERTEX_SHADER);
+    texture = gl.createTexture();
+    gl.bindTexture(gl.TEXTURE_2D, texture);
+    shouldBe(&quot;gl.getError()&quot;, &quot;gl.NO_ERROR&quot;);
+
+    // Test is queries that will later be false
+    shouldGenerateGLError(gl, gl.NO_ERROR, &quot;gl.enable(gl.BLEND)&quot;);
+    shouldBeTrue(&quot;gl.isBuffer(buffer)&quot;);
+    shouldBeTrue(&quot;gl.isEnabled(gl.BLEND)&quot;);
+    shouldBeTrue(&quot;gl.isFramebuffer(framebuffer)&quot;);
+    shouldBeTrue(&quot;gl.isProgram(program)&quot;);
+    shouldBeTrue(&quot;gl.isRenderbuffer(renderbuffer)&quot;);
+    shouldBeTrue(&quot;gl.isShader(shader)&quot;);
+    shouldBeTrue(&quot;gl.isTexture(texture)&quot;);
+}
+
+function testLostContext()
+{
+    debug(&quot;Test lost context&quot;);
+
+    // Functions with special return values.
+    shouldBeTrue(&quot;gl.isContextLost()&quot;);
+    shouldBe(&quot;gl.getError()&quot;, &quot;gl.CONTEXT_LOST_WEBGL&quot;);
+    shouldBe(&quot;gl.getError()&quot;, &quot;gl.NO_ERROR&quot;);
+    shouldBe(&quot;gl.checkFramebufferStatus(gl.FRAMEBUFFER)&quot;, &quot;gl.FRAMEBUFFER_UNSUPPORTED&quot;);
+    shouldBe(&quot;gl.getAttribLocation(program, 'u_modelViewProjMatrix')&quot;, &quot;-1&quot;);
+    shouldBe(&quot;gl.getVertexAttribOffset(0, gl.VERTEX_ATTRIB_ARRAY_POINTER)&quot;, &quot;0&quot;);
+
+    // Test the extension itself.
+    shouldGenerateGLError(gl, gl.INVALID_OPERATION, &quot;extension.loseContext()&quot;);
+
+    image = document.createElement(&quot;img&quot;);
+    video = document.createElement(&quot;video&quot;);
+    canvas2d = document.createElement(&quot;canvas&quot;);
+    ctx2d = canvas2d.getContext(&quot;2d&quot;);
+    imageData = ctx2d.createImageData(1, 1);
+    float32array = new Float32Array(1);
+    int32array = new Int32Array(1);
+
+    // Functions returning void should return immediately.
+    // This is untestable, but we can at least be sure they cause no errors
+    // and the codepaths are exercised.
+    var voidTests = [
+        &quot;gl.activeTexture(gl.TEXTURE0)&quot;,
+        &quot;gl.attachShader(program, shader)&quot;,
+        &quot;gl.bindBuffer(gl.ARRAY_BUFFER, buffer)&quot;,
+        &quot;gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer)&quot;,
+        &quot;gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer)&quot;,
+        &quot;gl.bindTexture(gl.TEXTURE_2D, texture)&quot;,
+        &quot;gl.blendColor(1.0, 1.0, 1.0, 1.0)&quot;,
+        &quot;gl.blendEquation(gl.FUNC_ADD)&quot;,
+        &quot;gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD)&quot;,
+        &quot;gl.blendFunc(gl.ONE, gl.ONE)&quot;,
+        &quot;gl.blendFuncSeparate(gl.ONE, gl.ONE, gl.ONE, gl.ONE)&quot;,
+        &quot;gl.bufferData(gl.ARRAY_BUFFER, 0, gl.STATIC_DRAW)&quot;,
+        &quot;gl.bufferData(gl.ARRAY_BUFFER, arrayBufferView, gl.STATIC_DRAW)&quot;,
+        &quot;gl.bufferData(gl.ARRAY_BUFFER, arrayBuffer, gl.STATIC_DRAW)&quot;,
+        &quot;gl.bufferSubData(gl.ARRAY_BUFFRE, 0, arrayBufferView)&quot;,
+        &quot;gl.bufferSubData(gl.ARRAY_BUFFRE, 0, arrayBuffer)&quot;,
+        &quot;gl.clear(gl.COLOR_BUFFER_BIT)&quot;,
+        &quot;gl.clearColor(1, 1, 1, 1)&quot;,
+        &quot;gl.clearDepth(1)&quot;,
+        &quot;gl.clearStencil(0)&quot;,
+        &quot;gl.colorMask(1, 1, 1, 1)&quot;,
+        &quot;gl.compileShader(shader)&quot;,
+        &quot;gl.copyTexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 0, 0, 0, 0, 0)&quot;,
+        &quot;gl.copyTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 0, 0, 0, 0)&quot;,
+        &quot;gl.cullFace(gl.FRONT)&quot;,
+        &quot;gl.deleteBuffer(buffer)&quot;,
+        &quot;gl.deleteFramebuffer(framebuffer)&quot;,
+        &quot;gl.deleteProgram(program)&quot;,
+        &quot;gl.deleteRenderbuffer(renderbuffer)&quot;,
+        &quot;gl.deleteShader(shader)&quot;,
+        &quot;gl.deleteTexture(texture)&quot;,
+        &quot;gl.depthFunc(gl.NEVER)&quot;,
+        &quot;gl.depthMask(0)&quot;,
+        &quot;gl.depthRange(0, 1)&quot;,
+        &quot;gl.detachShader(program, shader)&quot;,
+        &quot;gl.disable(gl.BLEND)&quot;,
+        &quot;gl.disableVertexAttribArray(0)&quot;,
+        &quot;gl.drawArrays(gl.POINTS, 0, 0)&quot;,
+        &quot;gl.drawElements(gl.POINTS, 0, gl.UNSIGNED_SHORT, 0)&quot;,
+        &quot;gl.enable(gl.BLEND)&quot;,
+        &quot;gl.enableVertexAttribArray(0)&quot;,
+        &quot;gl.finish()&quot;,
+        &quot;gl.flush()&quot;,
+        &quot;gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, renderbuffer)&quot;,
+        &quot;gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0)&quot;,
+        &quot;gl.frontFace(gl.CW)&quot;,
+        &quot;gl.generateMipmap(gl.TEXTURE_2D)&quot;,
+        &quot;gl.hint(gl.GENERATE_MIPMAP_HINT, gl.FASTEST)&quot;,
+        &quot;gl.lineWidth(0)&quot;,
+        &quot;gl.linkProgram(program)&quot;,
+        &quot;gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 0)&quot;,
+        &quot;gl.polygonOffset(0, 0)&quot;,
+        &quot;gl.readPixels(0, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, arrayBufferView)&quot;,
+        &quot;gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, 0, 0)&quot;,
+        &quot;gl.sampleCoverage(0, 0)&quot;,
+        &quot;gl.scissor(0, 0, 0, 0)&quot;,
+        &quot;gl.shaderSource(shader, '')&quot;,
+        &quot;gl.stencilFunc(gl.NEVER, 0, 0)&quot;,
+        &quot;gl.stencilFuncSeparate(gl.FRONT, gl.NEVER, 0, 0)&quot;,
+        &quot;gl.stencilMask(0)&quot;,
+        &quot;gl.stencilMaskSeparate(gl.FRONT, 0)&quot;,
+        &quot;gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP)&quot;,
+        &quot;gl.stencilOpSeparate(gl.FRONT, gl.KEEP, gl.KEEP, gl.KEEP)&quot;,
+        &quot;gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, arrayBufferView)&quot;,
+        &quot;gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, imageData)&quot;,
+        &quot;gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image)&quot;,
+        &quot;gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, canvas)&quot;,
+        &quot;gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, video)&quot;,
+        &quot;gl.texParameterf(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)&quot;,
+        &quot;gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)&quot;,
+        &quot;gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, arrayBufferView)&quot;,
+        &quot;gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, imageData)&quot;,
+        &quot;gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, image)&quot;,
+        &quot;gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, canvas)&quot;,
+        &quot;gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, video)&quot;,
+        &quot;gl.uniform1f(uniformLocation, 0)&quot;,
+        &quot;gl.uniform1fv(uniformLocation, float32array)&quot;,
+        &quot;gl.uniform1fv(uniformLocation, [0])&quot;,
+        &quot;gl.uniform1i(uniformLocation, 0)&quot;,
+        &quot;gl.uniform1iv(uniformLocation, int32array)&quot;,
+        &quot;gl.uniform1iv(uniformLocation, [0])&quot;,
+        &quot;gl.uniform2f(uniformLocation, 0, 0)&quot;,
+        &quot;gl.uniform2fv(uniformLocation, float32array)&quot;,
+        &quot;gl.uniform2fv(uniformLocation, [0, 0])&quot;,
+        &quot;gl.uniform2i(uniformLocation, 0, 0)&quot;,
+        &quot;gl.uniform2iv(uniformLocation, int32array)&quot;,
+        &quot;gl.uniform2iv(uniformLocation, [0, 0])&quot;,
+        &quot;gl.uniform3f(uniformLocation, 0, 0, 0)&quot;,
+        &quot;gl.uniform3fv(uniformLocation, float32array)&quot;,
+        &quot;gl.uniform3fv(uniformLocation, [0, 0, 0])&quot;,
+        &quot;gl.uniform3i(uniformLocation, 0, 0, 0)&quot;,
+        &quot;gl.uniform3iv(uniformLocation, int32array)&quot;,
+        &quot;gl.uniform3iv(uniformLocation, [0, 0, 0])&quot;,
+        &quot;gl.uniform4f(uniformLocation, 0, 0, 0, 0)&quot;,
+        &quot;gl.uniform4fv(uniformLocation, float32array)&quot;,
+        &quot;gl.uniform4fv(uniformLocation, [0, 0, 0, 0])&quot;,
+        &quot;gl.uniform4i(uniformLocation, 0, 0, 0, 0)&quot;,
+        &quot;gl.uniform4iv(uniformLocation, int32array)&quot;,
+        &quot;gl.uniform4iv(uniformLocation, [0, 0, 0, 0])&quot;,
+        &quot;gl.uniformMatrix2fv(uniformLocation, false, float32array)&quot;,
+        &quot;gl.uniformMatrix2fv(uniformLocation, false, [0, 0, 0, 0])&quot;,
+        &quot;gl.uniformMatrix3fv(uniformLocation, false, float32array)&quot;,
+        &quot;gl.uniformMatrix3fv(uniformLocation, false, [0, 0, 0, 0, 0, 0, 0, 0, 0])&quot;,
+        &quot;gl.uniformMatrix4fv(uniformLocation, false, float32array)&quot;,
+        &quot;gl.uniformMatrix4fv(uniformLocation, false, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])&quot;,
+        &quot;gl.useProgram(program)&quot;,
+        &quot;gl.validateProgram(program)&quot;,
+        &quot;gl.vertexAttrib1f(0, 0)&quot;,
+        &quot;gl.vertexAttrib1fv(0, float32array)&quot;,
+        &quot;gl.vertexAttrib1fv(0, [0])&quot;,
+        &quot;gl.vertexAttrib2f(0, 0, 0)&quot;,
+        &quot;gl.vertexAttrib2fv(0, float32array)&quot;,
+        &quot;gl.vertexAttrib2fv(0, [0, 0])&quot;,
+        &quot;gl.vertexAttrib3f(0, 0, 0, 0)&quot;,
+        &quot;gl.vertexAttrib3fv(0, float32array)&quot;,
+        &quot;gl.vertexAttrib3fv(0, [0, 0, 0])&quot;,
+        &quot;gl.vertexAttrib4f(0, 0, 0, 0, 0)&quot;,
+        &quot;gl.vertexAttrib4fv(0, float32array)&quot;,
+        &quot;gl.vertexAttrib4fv(0, [0, 0, 0, 0])&quot;,
+        &quot;gl.vertexAttribPointer(0, 0, gl.FLOAT, false, 0, 0)&quot;,
+        &quot;gl.viewport(0, 0, 0, 0)&quot;,
+    ];
+    for (var i = 0; i &lt; voidTests.length; ++i) {
+        shouldGenerateGLError(gl, gl.NO_ERROR, voidTests[i]);
+    }
+
+    // Functions return nullable values should all return null.
+    var nullTests = [
+        &quot;gl.createBuffer()&quot;,
+        &quot;gl.createFramebuffer()&quot;,
+        &quot;gl.createProgram()&quot;,
+        &quot;gl.createRenderbuffer()&quot;,
+        &quot;gl.createShader(gl.GL_VERTEX_SHADER)&quot;,
+        &quot;gl.createTexture()&quot;,
+        &quot;gl.getActiveAttrib(program, 0)&quot;,
+        &quot;gl.getActiveUniform(program, 0)&quot;,
+        &quot;gl.getAttachedShaders(program)&quot;,
+        &quot;gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_SIZE)&quot;,
+        &quot;gl.getContextAttributes()&quot;,
+        &quot;gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME)&quot;,
+        &quot;gl.getParameter(gl.CURRENT_PROGRAM)&quot;,
+        &quot;gl.getProgramInfoLog(program)&quot;,
+        &quot;gl.getProgramParameter(program, gl.LINK_STATUS)&quot;,
+        &quot;gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_WIDTH)&quot;,
+        &quot;gl.getShaderInfoLog(shader)&quot;,
+        &quot;gl.getShaderParameter(shader, gl.SHADER_TYPE)&quot;,
+        &quot;gl.getShaderSource(shader)&quot;,
+        &quot;gl.getTexParameter(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S)&quot;,
+        &quot;gl.getUniform(program, uniformLocation)&quot;,
+        &quot;gl.getUniformLocation(program, 'vPosition')&quot;,
+        &quot;gl.getVertexAttrib(0, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING)&quot;,
+        &quot;gl.getSupportedExtensions()&quot;,
+        &quot;gl.getExtension('&quot; + extensionName + &quot;')&quot;,
+    ];
+    for (var i = 0; i &lt; nullTests.length; ++i) {
+        shouldBeNull(nullTests[i]);
+    }
+
+    // &quot;Is&quot; queries should all return false.
+    shouldBeFalse(&quot;gl.isBuffer(buffer)&quot;);
+    shouldBeFalse(&quot;gl.isEnabled(gl.BLEND)&quot;);
+    shouldBeFalse(&quot;gl.isFramebuffer(framebuffer)&quot;);
+    shouldBeFalse(&quot;gl.isProgram(program)&quot;);
+    shouldBeFalse(&quot;gl.isRenderbuffer(renderbuffer)&quot;);
+    shouldBeFalse(&quot;gl.isShader(shader)&quot;);
+    shouldBeFalse(&quot;gl.isTexture(texture)&quot;);
+
+    shouldBe(&quot;gl.getError()&quot;, &quot;gl.NO_ERROR&quot;);
+
+    debug(&quot;&quot;);
+
+    finishTest();
+}
+
+&lt;/script&gt;
+&lt;/head&gt;
+&lt;body onload=&quot;init()&quot;&gt;
+&lt;div id=&quot;description&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;console&quot;&gt;&lt;/div&gt;
+&lt;canvas id=&quot;canvas&quot;&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit216LayoutTestshttptestswebgl102resourceswebgl_test_filesconformancemoreconformanceargGeneratorsS_Vjs"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/more/conformance/argGenerators-S_V.js (0 => 213040)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/more/conformance/argGenerators-S_V.js                                (rev 0)
+++ releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/more/conformance/argGenerators-S_V.js        2017-02-27 09:06:10 UTC (rev 213040)
</span><span class="lines">@@ -0,0 +1,229 @@
</span><ins>+/*
+** Copyright (c) 2012 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** &quot;Materials&quot;), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+// ArgGenerators contains argument generators for WebGL functions.
+// The argument generators are used for running random tests against the WebGL
+// functions.
+//
+// ArgGenerators is an object consisting of functionName : argGen -properties.
+//
+// functionName is a WebGL context function name and the argGen is an argument
+// generator object that encapsulates the requirements to run
+// randomly generated tests on the WebGL function.
+//
+// An argGen object has the following methods:
+//   - setup    -- set up state for testing the GL function, returns values
+//                 that need cleanup in teardown. Run once before entering a
+//                 test loop.
+//   - teardown -- do cleanup on setup's return values after testing is complete
+//   - generate -- generate a valid set of random arguments for the GL function
+//   - returnValueCleanup -- do cleanup on value returned by the tested GL function
+//   - cleanup  -- do cleanup on generated arguments from generate
+//   - checkArgValidity -- check if passed args are valid. Has a call signature
+//                         that matches generate's return value. Returns true
+//                         if args are valid, false if not.
+//
+//   Example test loop that demonstrates how the function args and return
+//   values flow together:
+//
+//   var setupArgs = argGen.setup();
+//   for (var i=0; i&lt;numberOfTests; i++) {
+//     var generatedArgs = argGen.generate.apply(argGen, setupArgs);
+//     var validArgs = argGen.checkArgValidity.apply(argGen, generatedArgs);
+//     var rv = call the GL function with generatedArgs;
+//     argGen.returnValueCleanup(rv);
+//     argGen.cleanup.apply(argGen, generatedArgs);
+//   }
+//   argGen.teardown.apply(argGen, setupArgs);
+//
+ArgGenerators = {
+
+// GL functions in alphabetical order
+
+// S-2
+
+  stencilMaskSeparate : {
+    generate : function() { return [cullFace.random(), randomInt(0xffffffff)]; },
+    checkArgValidity : function(face, mask) {
+      return cullFace.has(face);
+    },
+    teardown : function() { GL.stencilMask(0xffffffff); }
+  },
+  stencilOp : {
+    generate : function() {
+      return [stencilOp.random(), stencilOp.random(), stencilOp.random()];
+    },
+    checkArgValidity : function(sfail, dpfail, dppass) {
+      return stencilOp.has(sfail) &amp;&amp; stencilOp.has(dpfail) &amp;&amp; stencilOp.has(dppass);
+    },
+    teardown : function() { GL.stencilOp(GL.KEEP, GL.KEEP, GL.KEEP); }
+  },
+  stencilOpSeparate : {
+    generate : function() {
+      return [cullFace.random(), stencilOp.random(), stencilOp.random(), stencilOp.random()];
+    },
+    checkArgValidity : function(face, sfail, dpfail, dppass) {
+      return cullFace.has(face) &amp;&amp; stencilOp.has(sfail) &amp;&amp;
+              stencilOp.has(dpfail) &amp;&amp; stencilOp.has(dppass);
+    },
+    teardown : function() { GL.stencilOp(GL.KEEP, GL.KEEP, GL.KEEP); }
+  },
+
+// T
+  texImage2D : {
+    noAlreadyTriedCheck : true, // Object.toSource is very slow here
+    setup : function() {
+      var tex = GL.createTexture();
+      var tex2 = GL.createTexture();
+      GL.bindTexture(GL.TEXTURE_2D, tex);
+      GL.bindTexture(GL.TEXTURE_CUBE_MAP, tex2);
+      return [tex, tex2];
+    },
+    generate : function() {
+      var format = texImageFormat.random();
+      if (Math.random() &lt; 0.5) {
+        var img = randomImage(16,16);
+        var a = [ texImageTarget.random(), 0, format, format, GL.UNSIGNED_BYTE, img ];
+        return a;
+      } else {
+        var pix = null;
+        if (Math.random &gt; 0.5) {
+          pix = new Uint8Array(16*16*4);
+        }
+        return [
+          texImageTarget.random(), 0,
+          format, 16, 16, 0,
+          format, GL.UNSIGNED_BYTE, pix
+        ];
+      }
+    },
+    checkArgValidity : function(target, level, internalformat, width, height, border, format, type, data) {
+               // or : function(target, level, internalformat, format, type, image)
+      if (!texImageTarget.has(target) || castToInt(level) &lt; 0)
+        return false;
+      if (arguments.length &lt;= 6) {
+        var xformat = width;
+        var xtype = height;
+        var ximage = border;
+        if ((ximage instanceof HTMLImageElement ||
+             ximage instanceof HTMLVideoElement ||
+             ximage instanceof HTMLCanvasElement ||
+             ximage instanceof ImageData) &amp;&amp;
+            texImageInternalFormat.has(internalformat) &amp;&amp;
+            texImageFormat.has(xformat) &amp;&amp;
+            texImageType.has(xtype) &amp;&amp;
+            internalformat == xformat)
+          return true;
+        return false;
+      }
+      var w = castToInt(width), h = castToInt(height), b = castToInt(border);
+      return texImageInternalFormat.has(internalformat) &amp;&amp; w &gt;= 0 &amp;&amp; h &gt;= 0 &amp;&amp;
+            b == 0 &amp;&amp; (data == null || data.byteLength == w*h*4) &amp;&amp;
+            texImageFormat.has(format) &amp;&amp; texImageType.has(type)
+            &amp;&amp; internalformat == format;
+    },
+    teardown : function(tex, tex2) {
+      GL.bindTexture(GL.TEXTURE_2D, null);
+      GL.bindTexture(GL.TEXTURE_CUBE_MAP, null);
+      GL.deleteTexture(tex);
+      GL.deleteTexture(tex2);
+    }
+  },
+  texParameterf : {
+    generate : function() {
+      var pname = texParameterPname.random();
+      var param = texParameterParam[pname].random();
+      return [bindTextureTarget.random(), pname, param];
+    },
+    checkArgValidity : function(target, pname, param) {
+      if (!bindTextureTarget.has(target))
+        return false;
+      if (!texParameterPname.has(pname))
+        return false;
+      return texParameterParam[pname].has(param);
+    }
+  },
+  texParameteri : {
+    generate : function() {
+      var pname = texParameterPname.random();
+      var param = texParameterParam[pname].random();
+      return [bindTextureTarget.random(), pname, param];
+    },
+    checkArgValidity : function(target, pname, param) {
+      if (!bindTextureTarget.has(target))
+        return false;
+      if (!texParameterPname.has(pname))
+        return false;
+      return texParameterParam[pname].has(param);
+    }
+  },
+  texSubImage2D : {}, // FIXME
+
+// U
+
+  uniform1f : {}, // FIXME
+  uniform1fv : {}, // FIXME
+  uniform1i : {}, // FIXME
+  uniform1iv : {}, // FIXME
+  uniform2f : {}, // FIXME
+  uniform2fv : {}, // FIXME
+  uniform2i : {}, // FIXME
+  uniform2iv : {}, // FIXME
+  uniform3f : {}, // FIXME
+  uniform3fv : {}, // FIXME
+  uniform3i : {}, // FIXME
+  uniform3iv : {}, // FIXME
+  uniform4f : {}, // FIXME
+  uniform4fv : {}, // FIXME
+  uniform4i : {}, // FIXME
+  uniform4iv : {}, // FIXME
+  uniformMatrix2fv : {}, // FIXME
+  uniformMatrix3fv : {}, // FIXME
+  uniformMatrix4fv : {}, // FIXME
+  useProgram : {}, // FIXME
+
+// V
+
+  validateProgram : {}, // FIXME
+  vertexAttrib1f : {}, // FIXME
+  vertexAttrib1fv : {}, // FIXME
+  vertexAttrib2f : {}, // FIXME
+  vertexAttrib2fv : {}, // FIXME
+  vertexAttrib3f : {}, // FIXME
+  vertexAttrib3fv : {}, // FIXME
+  vertexAttrib4f : {}, // FIXME
+  vertexAttrib4fv : {}, // FIXME
+  vertexAttribPointer : {}, // FIXME
+  viewport : {
+    generate : function() {
+      return [randomInt(3000)-1500, randomInt(3000)-1500, randomIntFromRange(0,3000), randomIntFromRange(0,3000)];
+    },
+    checkArgValidity : function(x,y,w,h) {
+      return castToInt(w) &gt;= 0 &amp;&amp; castToInt(h) &gt;= 0;
+    },
+    teardown : function() {
+      GL.viewport(0,0,GL.canvas.width, GL.canvas.height);
+    }
+  }
+
+};
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit216LayoutTestshttptestswebgl102resourceswebgl_test_filesconformancemoreconformancequickCheckAPIS_Vexpectedtxt"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/more/conformance/quickCheckAPI-S_V-expected.txt (0 => 213040)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/more/conformance/quickCheckAPI-S_V-expected.txt                                (rev 0)
+++ releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/more/conformance/quickCheckAPI-S_V-expected.txt        2017-02-27 09:06:10 UTC (rev 213040)
</span><span class="lines">@@ -0,0 +1,2175 @@
</span><ins>+PASS
+
+testValidArgs
+PASS: Valid args: stencilMaskSeparate(1032,709302763) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,709302763) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,2933074514) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,2933074514) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,489518994) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,489518994) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,2895284208) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,2895284208) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,3555588610) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,3555588610) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,2268879691) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,2268879691) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,2949969997) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,2949969997) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,1122749844) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,1122749844) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,1431446194) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,1431446194) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,2016383025) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,2016383025) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,2235039012) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,2235039012) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,2011673178) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,2011673178) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,1083777183) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,1083777183) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,4043403176) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,4043403176) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,1907896322) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,1907896322) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,1754858453) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,1754858453) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,768050481) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,768050481) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,853621338) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,853621338) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,3590013054) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,3590013054) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,1040125921) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,1040125921) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,1496280219) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,1496280219) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,1245953667) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,1245953667) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,3933585408) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,3933585408) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,3721269238) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,3721269238) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,364180595) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,364180595) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,1948082366) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,1948082366) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,1890111438) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,1890111438) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,419116746) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,419116746) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,1940082385) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,1940082385) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,3103396270) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,3103396270) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,1866674514) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,1866674514) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,2598797489) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,2598797489) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,2965900040) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,2965900040) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,1947443808) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,1947443808) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,466210682) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,466210682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,1538557179) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,1538557179) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,655573034) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,655573034) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,3170114789) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,3170114789) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,2265181993) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,2265181993) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,1146058544) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,1146058544) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,3390136091) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,3390136091) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,192324725) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,192324725) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,369001929) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,369001929) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,2255821169) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,2255821169) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,1673271215) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,1673271215) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,1968345122) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,1968345122) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,4217911710) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,4217911710) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,2315275455) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,2315275455) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,1769686002) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,1769686002) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,1733303749) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,1733303749) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,561976501) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,561976501) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,921928386) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,921928386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,2291339758) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,2291339758) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,1193915040) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,1193915040) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,1313640386) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,1313640386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,1406806114) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,1406806114) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,2643939366) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,2643939366) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,2059388730) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,2059388730) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,3248569757) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,3248569757) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,277938451) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,277938451) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,1921802148) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,1921802148) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,4000417287) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,4000417287) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,1826910832) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,1826910832) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,2721207925) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,2721207925) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,2845944260) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,2845944260) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,1281309705) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,1281309705) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,1723263485) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,1723263485) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,2258658435) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,2258658435) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,1236678844) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,1236678844) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,3934955564) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,3934955564) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,3896621292) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,3896621292) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,4255845016) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,4255845016) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,3791249266) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,3791249266) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,367266882) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,367266882) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,3415024727) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,3415024727) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,1974670221) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,1974670221) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,1524266296) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,1524266296) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,2394347315) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,2394347315) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,2812570596) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,2812570596) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,1004138954) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,1004138954) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,2772847208) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,2772847208) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,2797381193) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,2797381193) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,2372135341) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,2372135341) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,2520422917) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,2520422917) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,1829011084) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,1829011084) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,1960305007) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,1960305007) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,3179220100) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,3179220100) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,891254954) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,891254954) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,845561708) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,845561708) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,1052126389) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,1052126389) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,2808906411) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,2808906411) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,4207662419) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,4207662419) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,1977549842) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,1977549842) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,1751764566) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,1751764566) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,1081260351) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,1081260351) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1029,3106829254) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1029,3106829254) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,3476836850) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,3476836850) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,3762525338) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,3762525338) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1028,1742352136) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1028,1742352136) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilMaskSeparate(1032,4061894554) (in assert)
+true
+PASS: This should work: stencilMaskSeparate(1032,4061894554) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(5386,7683,34055) (in assert)
+true
+PASS: This should work: stencilOp(5386,7683,34055) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(34055,0,7683) (in assert)
+true
+PASS: This should work: stencilOp(34055,0,7683) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(34055,7680,7680) (in assert)
+true
+PASS: This should work: stencilOp(34055,7680,7680) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7680,34055,7683) (in assert)
+true
+PASS: This should work: stencilOp(7680,34055,7683) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7683,7681,5386) (in assert)
+true
+PASS: This should work: stencilOp(7683,7681,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(34055,34056,7682) (in assert)
+true
+PASS: This should work: stencilOp(34055,34056,7682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(5386,7682,7682) (in assert)
+true
+PASS: This should work: stencilOp(5386,7682,7682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7683,5386,5386) (in assert)
+true
+PASS: This should work: stencilOp(7683,5386,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(0,5386,5386) (in assert)
+true
+PASS: This should work: stencilOp(0,5386,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7683,7681,7682) (in assert)
+true
+PASS: This should work: stencilOp(7683,7681,7682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7683,34055,7680) (in assert)
+true
+PASS: This should work: stencilOp(7683,34055,7680) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7682,7682,34056) (in assert)
+true
+PASS: This should work: stencilOp(7682,7682,34056) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7682,7680,7682) (in assert)
+true
+PASS: This should work: stencilOp(7682,7680,7682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(0,5386,7682) (in assert)
+true
+PASS: This should work: stencilOp(0,5386,7682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7681,34055,7682) (in assert)
+true
+PASS: This should work: stencilOp(7681,34055,7682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(34056,7682,34056) (in assert)
+true
+PASS: This should work: stencilOp(34056,7682,34056) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7680,7683,5386) (in assert)
+true
+PASS: This should work: stencilOp(7680,7683,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(0,7683,7681) (in assert)
+true
+PASS: This should work: stencilOp(0,7683,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(5386,7681,7681) (in assert)
+true
+PASS: This should work: stencilOp(5386,7681,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7681,0,7681) (in assert)
+true
+PASS: This should work: stencilOp(7681,0,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(0,7680,7682) (in assert)
+true
+PASS: This should work: stencilOp(0,7680,7682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7680,0,34055) (in assert)
+true
+PASS: This should work: stencilOp(7680,0,34055) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7681,7683,7681) (in assert)
+true
+PASS: This should work: stencilOp(7681,7683,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(34056,34055,7682) (in assert)
+true
+PASS: This should work: stencilOp(34056,34055,7682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7682,7683,34055) (in assert)
+true
+PASS: This should work: stencilOp(7682,7683,34055) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(34056,7680,7681) (in assert)
+true
+PASS: This should work: stencilOp(34056,7680,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7680,34055,7681) (in assert)
+true
+PASS: This should work: stencilOp(7680,34055,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7682,7683,0) (in assert)
+true
+PASS: This should work: stencilOp(7682,7683,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(34055,34056,34056) (in assert)
+true
+PASS: This should work: stencilOp(34055,34056,34056) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7683,5386,7680) (in assert)
+true
+PASS: This should work: stencilOp(7683,5386,7680) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(0,7682,5386) (in assert)
+true
+PASS: This should work: stencilOp(0,7682,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(0,7680,7680) (in assert)
+true
+PASS: This should work: stencilOp(0,7680,7680) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(5386,34055,7681) (in assert)
+true
+PASS: This should work: stencilOp(5386,34055,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(34055,7681,34056) (in assert)
+true
+PASS: This should work: stencilOp(34055,7681,34056) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7682,0,34055) (in assert)
+true
+PASS: This should work: stencilOp(7682,0,34055) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7683,7682,0) (in assert)
+true
+PASS: This should work: stencilOp(7683,7682,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7682,7682,7680) (in assert)
+true
+PASS: This should work: stencilOp(7682,7682,7680) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(0,7681,7682) (in assert)
+true
+PASS: This should work: stencilOp(0,7681,7682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(0,7682,7682) (in assert)
+true
+PASS: This should work: stencilOp(0,7682,7682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7680,34056,7683) (in assert)
+true
+PASS: This should work: stencilOp(7680,34056,7683) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7681,7683,34056) (in assert)
+true
+PASS: This should work: stencilOp(7681,7683,34056) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7682,34056,7682) (in assert)
+true
+PASS: This should work: stencilOp(7682,34056,7682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7682,34056,7680) (in assert)
+true
+PASS: This should work: stencilOp(7682,34056,7680) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(0,0,34056) (in assert)
+true
+PASS: This should work: stencilOp(0,0,34056) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(34055,5386,7680) (in assert)
+true
+PASS: This should work: stencilOp(34055,5386,7680) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(34056,7683,7680) (in assert)
+true
+PASS: This should work: stencilOp(34056,7683,7680) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7682,7683,7680) (in assert)
+true
+PASS: This should work: stencilOp(7682,7683,7680) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7681,34056,7681) (in assert)
+true
+PASS: This should work: stencilOp(7681,34056,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(34056,34056,5386) (in assert)
+true
+PASS: This should work: stencilOp(34056,34056,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7683,5386,7681) (in assert)
+true
+PASS: This should work: stencilOp(7683,5386,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7680,34056,0) (in assert)
+true
+PASS: This should work: stencilOp(7680,34056,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(34055,34055,34055) (in assert)
+true
+PASS: This should work: stencilOp(34055,34055,34055) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7680,7682,34055) (in assert)
+true
+PASS: This should work: stencilOp(7680,7682,34055) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7680,5386,0) (in assert)
+true
+PASS: This should work: stencilOp(7680,5386,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7680,5386,7681) (in assert)
+true
+PASS: This should work: stencilOp(7680,5386,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7680,7680,7683) (in assert)
+true
+PASS: This should work: stencilOp(7680,7680,7683) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(34055,0,7681) (in assert)
+true
+PASS: This should work: stencilOp(34055,0,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7681,7681,7681) (in assert)
+true
+PASS: This should work: stencilOp(7681,7681,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7682,7681,5386) (in assert)
+true
+PASS: This should work: stencilOp(7682,7681,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(0,7682,0) (in assert)
+true
+PASS: This should work: stencilOp(0,7682,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(0,7680,5386) (in assert)
+true
+PASS: This should work: stencilOp(0,7680,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(34056,7682,5386) (in assert)
+true
+PASS: This should work: stencilOp(34056,7682,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7683,34055,34056) (in assert)
+true
+PASS: This should work: stencilOp(7683,34055,34056) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(5386,34056,34056) (in assert)
+true
+PASS: This should work: stencilOp(5386,34056,34056) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(34056,0,5386) (in assert)
+true
+PASS: This should work: stencilOp(34056,0,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(34055,5386,0) (in assert)
+true
+PASS: This should work: stencilOp(34055,5386,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7681,5386,5386) (in assert)
+true
+PASS: This should work: stencilOp(7681,5386,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7680,7683,0) (in assert)
+true
+PASS: This should work: stencilOp(7680,7683,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(5386,34055,7680) (in assert)
+true
+PASS: This should work: stencilOp(5386,34055,7680) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7681,7681,0) (in assert)
+true
+PASS: This should work: stencilOp(7681,7681,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7681,7680,7680) (in assert)
+true
+PASS: This should work: stencilOp(7681,7680,7680) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7683,0,0) (in assert)
+true
+PASS: This should work: stencilOp(7683,0,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(34055,7683,34055) (in assert)
+true
+PASS: This should work: stencilOp(34055,7683,34055) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7683,5386,34056) (in assert)
+true
+PASS: This should work: stencilOp(7683,5386,34056) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7682,7682,34055) (in assert)
+true
+PASS: This should work: stencilOp(7682,7682,34055) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7681,5386,34055) (in assert)
+true
+PASS: This should work: stencilOp(7681,5386,34055) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7683,34055,7682) (in assert)
+true
+PASS: This should work: stencilOp(7683,34055,7682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7683,7681,34056) (in assert)
+true
+PASS: This should work: stencilOp(7683,7681,34056) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(34056,7680,7680) (in assert)
+true
+PASS: This should work: stencilOp(34056,7680,7680) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7681,7680,7682) (in assert)
+true
+PASS: This should work: stencilOp(7681,7680,7682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(0,34055,0) (in assert)
+true
+PASS: This should work: stencilOp(0,34055,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7681,7680,34056) (in assert)
+true
+PASS: This should work: stencilOp(7681,7680,34056) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(5386,7683,5386) (in assert)
+true
+PASS: This should work: stencilOp(5386,7683,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7680,7680,5386) (in assert)
+true
+PASS: This should work: stencilOp(7680,7680,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7683,34055,34055) (in assert)
+true
+PASS: This should work: stencilOp(7683,34055,34055) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(5386,7681,0) (in assert)
+true
+PASS: This should work: stencilOp(5386,7681,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(34055,7682,34055) (in assert)
+true
+PASS: This should work: stencilOp(34055,7682,34055) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(34056,7680,7682) (in assert)
+true
+PASS: This should work: stencilOp(34056,7680,7682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7683,34055,7683) (in assert)
+true
+PASS: This should work: stencilOp(7683,34055,7683) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(0,5386,7683) (in assert)
+true
+PASS: This should work: stencilOp(0,5386,7683) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7682,7682,7683) (in assert)
+true
+PASS: This should work: stencilOp(7682,7682,7683) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7683,34056,7683) (in assert)
+true
+PASS: This should work: stencilOp(7683,34056,7683) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(34056,7683,34055) (in assert)
+true
+PASS: This should work: stencilOp(34056,7683,34055) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(7683,7681,7683) (in assert)
+true
+PASS: This should work: stencilOp(7683,7681,7683) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOp(34056,7681,34055) (in assert)
+true
+PASS: This should work: stencilOp(34056,7681,34055) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,7681,0,34055) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,7681,0,34055) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,7683,5386,7680) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,7683,5386,7680) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,7682,34056,7682) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,7682,34056,7682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,34055,7680,7682) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,34055,7680,7682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,7681,34056,5386) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,7681,34056,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,7682,7683,7683) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,7682,7683,7683) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,34056,7683,0) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,34056,7683,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,7683,7683,7682) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,7683,7683,7682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,7683,5386,7682) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,7683,5386,7682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,5386,7680,0) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,5386,7680,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,7683,0,7680) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,7683,0,7680) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,7680,0,7681) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,7680,0,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,7682,34056,5386) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,7682,34056,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,34055,0,34056) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,34055,0,34056) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,7682,7682,7681) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,7682,7682,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,7681,34056,34055) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,7681,34056,34055) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,7681,34055,5386) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,7681,34055,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,7683,34056,34055) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,7683,34056,34055) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,5386,34055,7680) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,5386,34055,7680) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,7682,5386,34055) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,7682,5386,34055) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,34055,34056,34055) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,34055,34056,34055) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,0,7681,7683) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,0,7681,7683) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,7680,0,7681) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,7680,0,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,7683,5386,34055) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,7683,5386,34055) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,5386,0,7683) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,5386,0,7683) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,0,0,7680) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,0,0,7680) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,34056,34056,7681) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,34056,34056,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,34056,7683,0) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,34056,7683,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,5386,7682,5386) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,5386,7682,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,7680,0,7680) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,7680,0,7680) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,7680,34056,34056) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,7680,34056,34056) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,7681,7681,5386) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,7681,7681,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,7680,7682,34056) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,7680,7682,34056) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,7680,7683,34055) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,7680,7683,34055) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,5386,5386,34056) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,5386,5386,34056) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,0,7683,5386) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,0,7683,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,7680,7681,7681) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,7680,7681,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,0,34055,7680) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,0,34055,7680) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,5386,34056,5386) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,5386,34056,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,34056,7681,7682) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,34056,7681,7682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,7683,34055,7681) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,7683,34055,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,7683,34056,7683) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,7683,34056,7683) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,7682,34056,7683) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,7682,34056,7683) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,5386,34056,7682) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,5386,34056,7682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,7682,34056,34056) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,7682,34056,34056) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,34056,7682,7681) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,34056,7682,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,7681,7683,34055) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,7681,7683,34055) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,7681,7680,34055) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,7681,7680,34055) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,34055,5386,34055) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,34055,5386,34055) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,5386,34055,7681) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,5386,34055,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,7683,34056,7681) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,7683,34056,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,7682,34055,7680) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,7682,34055,7680) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,7680,0,0) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,7680,0,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,34055,5386,34055) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,34055,5386,34055) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,5386,7680,5386) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,5386,7680,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,7683,34055,7682) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,7683,34055,7682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,7682,0,5386) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,7682,0,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,0,34056,7681) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,0,34056,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,7681,7680,5386) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,7681,7680,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,0,34056,7681) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,0,34056,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,7682,7680,34056) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,7682,7680,34056) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,0,7681,7681) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,0,7681,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,7681,34055,34055) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,7681,34055,34055) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,34056,0,7683) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,34056,0,7683) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,0,7681,7683) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,0,7681,7683) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,5386,7683,0) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,5386,7683,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,7681,5386,7680) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,7681,5386,7680) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,7682,5386,7681) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,7682,5386,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,7683,7681,5386) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,7683,7681,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,34055,0,7683) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,34055,0,7683) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,5386,7682,7683) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,5386,7682,7683) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,5386,7683,5386) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,5386,7683,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,34056,34056,7683) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,34056,34056,7683) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,0,34055,7683) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,0,34055,7683) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,7682,7682,0) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,7682,7682,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,5386,7681,7681) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,5386,7681,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,7681,34056,0) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,7681,34056,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,7681,7682,0) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,7681,7682,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,7680,7683,34056) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,7680,7683,34056) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,7683,34056,7682) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,7683,34056,7682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,7681,7682,7682) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,7681,7682,7682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,7683,0,7682) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,7683,0,7682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,5386,7683,34056) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,5386,7683,34056) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,7681,7681,34056) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,7681,7681,34056) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,7683,7683,0) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,7683,7683,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,34055,0,0) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,34055,0,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,7683,34055,7681) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,7683,34055,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,7683,7680,7680) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,7683,7680,7680) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,7683,34056,7681) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,7683,34056,7681) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,7680,5386,7682) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,7680,5386,7682) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,7681,7683,5386) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,7681,7683,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,34055,7683,0) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,34055,7683,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,7681,0,5386) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,7681,0,5386) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1028,34055,5386,34056) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1028,34055,5386,34056) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1032,34055,7681,34056) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1032,34055,7681,34056) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: stencilOpSeparate(1029,0,34055,34056) (in assert)
+true
+PASS: This should work: stencilOpSeparate(1029,0,34055,34056) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34071,0,6407,6407,5121,[object HTMLImageElement]) (in assert)
+true
+PASS: This should work: texImage2D(34071,0,6407,6407,5121,[object HTMLImageElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34074,0,6409,16,16,0,6409,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34074,0,6409,16,16,0,6409,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(3553,0,6407,6407,5121,[object HTMLVideoElement]) (in assert)
+true
+PASS: This should work: texImage2D(3553,0,6407,6407,5121,[object HTMLVideoElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34072,0,6410,16,16,0,6410,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34072,0,6410,16,16,0,6410,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(3553,0,6406,16,16,0,6406,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(3553,0,6406,16,16,0,6406,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34070,0,6406,16,16,0,6406,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34070,0,6406,16,16,0,6406,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(3553,0,6406,16,16,0,6406,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(3553,0,6406,16,16,0,6406,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34073,0,6409,6409,5121,[ImageData]) (in assert)
+true
+PASS: This should work: texImage2D(34073,0,6409,6409,5121,[ImageData]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34072,0,6408,16,16,0,6408,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34072,0,6408,16,16,0,6408,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34073,0,6407,16,16,0,6407,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34073,0,6407,16,16,0,6407,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34074,0,6408,16,16,0,6408,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34074,0,6408,16,16,0,6408,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34073,0,6408,6408,5121,[object HTMLVideoElement]) (in assert)
+true
+PASS: This should work: texImage2D(34073,0,6408,6408,5121,[object HTMLVideoElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34070,0,6410,6410,5121,[object HTMLVideoElement]) (in assert)
+true
+PASS: This should work: texImage2D(34070,0,6410,6410,5121,[object HTMLVideoElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34070,0,6408,16,16,0,6408,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34070,0,6408,16,16,0,6408,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(3553,0,6410,16,16,0,6410,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(3553,0,6410,16,16,0,6410,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34073,0,6407,16,16,0,6407,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34073,0,6407,16,16,0,6407,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34071,0,6409,6409,5121,[object HTMLVideoElement]) (in assert)
+true
+PASS: This should work: texImage2D(34071,0,6409,6409,5121,[object HTMLVideoElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34073,0,6408,6408,5121,[object HTMLVideoElement]) (in assert)
+true
+PASS: This should work: texImage2D(34073,0,6408,6408,5121,[object HTMLVideoElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34073,0,6410,6410,5121,[object HTMLImageElement]) (in assert)
+true
+PASS: This should work: texImage2D(34073,0,6410,6410,5121,[object HTMLImageElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34069,0,6406,6406,5121,[object HTMLCanvasElement]) (in assert)
+true
+PASS: This should work: texImage2D(34069,0,6406,6406,5121,[object HTMLCanvasElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34070,0,6408,16,16,0,6408,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34070,0,6408,16,16,0,6408,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34070,0,6406,6406,5121,[object HTMLImageElement]) (in assert)
+true
+PASS: This should work: texImage2D(34070,0,6406,6406,5121,[object HTMLImageElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34071,0,6408,16,16,0,6408,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34071,0,6408,16,16,0,6408,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34069,0,6408,16,16,0,6408,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34069,0,6408,16,16,0,6408,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34069,0,6408,6408,5121,[ImageData]) (in assert)
+true
+PASS: This should work: texImage2D(34069,0,6408,6408,5121,[ImageData]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34069,0,6408,16,16,0,6408,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34069,0,6408,16,16,0,6408,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(3553,0,6407,16,16,0,6407,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(3553,0,6407,16,16,0,6407,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34073,0,6409,6409,5121,[object HTMLVideoElement]) (in assert)
+true
+PASS: This should work: texImage2D(34073,0,6409,6409,5121,[object HTMLVideoElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34072,0,6408,6408,5121,[object HTMLVideoElement]) (in assert)
+true
+PASS: This should work: texImage2D(34072,0,6408,6408,5121,[object HTMLVideoElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34074,0,6409,6409,5121,[object HTMLCanvasElement]) (in assert)
+true
+PASS: This should work: texImage2D(34074,0,6409,6409,5121,[object HTMLCanvasElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34069,0,6407,6407,5121,[object HTMLVideoElement]) (in assert)
+true
+PASS: This should work: texImage2D(34069,0,6407,6407,5121,[object HTMLVideoElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34074,0,6409,16,16,0,6409,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34074,0,6409,16,16,0,6409,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34072,0,6409,16,16,0,6409,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34072,0,6409,16,16,0,6409,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34072,0,6406,16,16,0,6406,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34072,0,6406,16,16,0,6406,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34073,0,6407,16,16,0,6407,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34073,0,6407,16,16,0,6407,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34071,0,6409,16,16,0,6409,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34071,0,6409,16,16,0,6409,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34069,0,6408,16,16,0,6408,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34069,0,6408,16,16,0,6408,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34072,0,6410,6410,5121,[object HTMLVideoElement]) (in assert)
+true
+PASS: This should work: texImage2D(34072,0,6410,6410,5121,[object HTMLVideoElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34071,0,6408,16,16,0,6408,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34071,0,6408,16,16,0,6408,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34069,0,6407,16,16,0,6407,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34069,0,6407,16,16,0,6407,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34073,0,6409,6409,5121,[object HTMLCanvasElement]) (in assert)
+true
+PASS: This should work: texImage2D(34073,0,6409,6409,5121,[object HTMLCanvasElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34072,0,6407,6407,5121,[ImageData]) (in assert)
+true
+PASS: This should work: texImage2D(34072,0,6407,6407,5121,[ImageData]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(3553,0,6408,16,16,0,6408,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(3553,0,6408,16,16,0,6408,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34074,0,6407,16,16,0,6407,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34074,0,6407,16,16,0,6407,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34070,0,6410,16,16,0,6410,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34070,0,6410,16,16,0,6410,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34071,0,6409,6409,5121,[object HTMLVideoElement]) (in assert)
+true
+PASS: This should work: texImage2D(34071,0,6409,6409,5121,[object HTMLVideoElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34072,0,6409,6409,5121,[object HTMLCanvasElement]) (in assert)
+true
+PASS: This should work: texImage2D(34072,0,6409,6409,5121,[object HTMLCanvasElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34073,0,6406,6406,5121,[object HTMLImageElement]) (in assert)
+true
+PASS: This should work: texImage2D(34073,0,6406,6406,5121,[object HTMLImageElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34073,0,6409,6409,5121,[object HTMLCanvasElement]) (in assert)
+true
+PASS: This should work: texImage2D(34073,0,6409,6409,5121,[object HTMLCanvasElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(3553,0,6410,6410,5121,[object HTMLCanvasElement]) (in assert)
+true
+PASS: This should work: texImage2D(3553,0,6410,6410,5121,[object HTMLCanvasElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34073,0,6408,6408,5121,[object HTMLCanvasElement]) (in assert)
+true
+PASS: This should work: texImage2D(34073,0,6408,6408,5121,[object HTMLCanvasElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34074,0,6406,6406,5121,[object HTMLCanvasElement]) (in assert)
+true
+PASS: This should work: texImage2D(34074,0,6406,6406,5121,[object HTMLCanvasElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(3553,0,6407,6407,5121,[object HTMLImageElement]) (in assert)
+true
+PASS: This should work: texImage2D(3553,0,6407,6407,5121,[object HTMLImageElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34069,0,6409,6409,5121,[ImageData]) (in assert)
+true
+PASS: This should work: texImage2D(34069,0,6409,6409,5121,[ImageData]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34069,0,6409,16,16,0,6409,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34069,0,6409,16,16,0,6409,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34069,0,6410,16,16,0,6410,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34069,0,6410,16,16,0,6410,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34073,0,6408,6408,5121,[object HTMLVideoElement]) (in assert)
+true
+PASS: This should work: texImage2D(34073,0,6408,6408,5121,[object HTMLVideoElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34074,0,6409,6409,5121,[object HTMLCanvasElement]) (in assert)
+true
+PASS: This should work: texImage2D(34074,0,6409,6409,5121,[object HTMLCanvasElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(3553,0,6408,16,16,0,6408,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(3553,0,6408,16,16,0,6408,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34073,0,6410,6410,5121,[ImageData]) (in assert)
+true
+PASS: This should work: texImage2D(34073,0,6410,6410,5121,[ImageData]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(3553,0,6408,6408,5121,[ImageData]) (in assert)
+true
+PASS: This should work: texImage2D(3553,0,6408,6408,5121,[ImageData]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34074,0,6410,6410,5121,[object HTMLVideoElement]) (in assert)
+true
+PASS: This should work: texImage2D(34074,0,6410,6410,5121,[object HTMLVideoElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34070,0,6409,6409,5121,[object HTMLCanvasElement]) (in assert)
+true
+PASS: This should work: texImage2D(34070,0,6409,6409,5121,[object HTMLCanvasElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34069,0,6409,6409,5121,[object HTMLVideoElement]) (in assert)
+true
+PASS: This should work: texImage2D(34069,0,6409,6409,5121,[object HTMLVideoElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34070,0,6406,16,16,0,6406,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34070,0,6406,16,16,0,6406,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34072,0,6410,6410,5121,[object HTMLCanvasElement]) (in assert)
+true
+PASS: This should work: texImage2D(34072,0,6410,6410,5121,[object HTMLCanvasElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34071,0,6407,6407,5121,[ImageData]) (in assert)
+true
+PASS: This should work: texImage2D(34071,0,6407,6407,5121,[ImageData]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(3553,0,6409,6409,5121,[ImageData]) (in assert)
+true
+PASS: This should work: texImage2D(3553,0,6409,6409,5121,[ImageData]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34070,0,6409,16,16,0,6409,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34070,0,6409,16,16,0,6409,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34074,0,6408,16,16,0,6408,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34074,0,6408,16,16,0,6408,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34074,0,6406,6406,5121,[object HTMLImageElement]) (in assert)
+true
+PASS: This should work: texImage2D(34074,0,6406,6406,5121,[object HTMLImageElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34072,0,6409,16,16,0,6409,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34072,0,6409,16,16,0,6409,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34069,0,6408,16,16,0,6408,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34069,0,6408,16,16,0,6408,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(3553,0,6408,6408,5121,[object HTMLCanvasElement]) (in assert)
+true
+PASS: This should work: texImage2D(3553,0,6408,6408,5121,[object HTMLCanvasElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(3553,0,6407,16,16,0,6407,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(3553,0,6407,16,16,0,6407,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34071,0,6406,16,16,0,6406,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34071,0,6406,16,16,0,6406,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34070,0,6408,6408,5121,[object HTMLCanvasElement]) (in assert)
+true
+PASS: This should work: texImage2D(34070,0,6408,6408,5121,[object HTMLCanvasElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34074,0,6409,16,16,0,6409,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34074,0,6409,16,16,0,6409,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34070,0,6407,6407,5121,[ImageData]) (in assert)
+true
+PASS: This should work: texImage2D(34070,0,6407,6407,5121,[ImageData]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34069,0,6408,6408,5121,[object HTMLCanvasElement]) (in assert)
+true
+PASS: This should work: texImage2D(34069,0,6408,6408,5121,[object HTMLCanvasElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34074,0,6409,6409,5121,[ImageData]) (in assert)
+true
+PASS: This should work: texImage2D(34074,0,6409,6409,5121,[ImageData]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34071,0,6408,16,16,0,6408,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34071,0,6408,16,16,0,6408,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34070,0,6408,6408,5121,[object HTMLImageElement]) (in assert)
+true
+PASS: This should work: texImage2D(34070,0,6408,6408,5121,[object HTMLImageElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34069,0,6406,16,16,0,6406,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34069,0,6406,16,16,0,6406,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34070,0,6409,6409,5121,[object HTMLImageElement]) (in assert)
+true
+PASS: This should work: texImage2D(34070,0,6409,6409,5121,[object HTMLImageElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34072,0,6409,6409,5121,[ImageData]) (in assert)
+true
+PASS: This should work: texImage2D(34072,0,6409,6409,5121,[ImageData]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34072,0,6409,6409,5121,[ImageData]) (in assert)
+true
+PASS: This should work: texImage2D(34072,0,6409,6409,5121,[ImageData]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34070,0,6410,16,16,0,6410,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34070,0,6410,16,16,0,6410,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34071,0,6407,16,16,0,6407,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34071,0,6407,16,16,0,6407,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34071,0,6409,16,16,0,6409,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34071,0,6409,16,16,0,6409,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34070,0,6408,6408,5121,[object HTMLVideoElement]) (in assert)
+true
+PASS: This should work: texImage2D(34070,0,6408,6408,5121,[object HTMLVideoElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(3553,0,6409,6409,5121,[object HTMLVideoElement]) (in assert)
+true
+PASS: This should work: texImage2D(3553,0,6409,6409,5121,[object HTMLVideoElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34072,0,6409,6409,5121,[object HTMLVideoElement]) (in assert)
+true
+PASS: This should work: texImage2D(34072,0,6409,6409,5121,[object HTMLVideoElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34073,0,6406,6406,5121,[object HTMLVideoElement]) (in assert)
+true
+PASS: This should work: texImage2D(34073,0,6406,6406,5121,[object HTMLVideoElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(3553,0,6408,16,16,0,6408,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(3553,0,6408,16,16,0,6408,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34069,0,6409,6409,5121,[object HTMLVideoElement]) (in assert)
+true
+PASS: This should work: texImage2D(34069,0,6409,6409,5121,[object HTMLVideoElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34071,0,6408,6408,5121,[object HTMLImageElement]) (in assert)
+true
+PASS: This should work: texImage2D(34071,0,6408,6408,5121,[object HTMLImageElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(3553,0,6410,16,16,0,6410,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(3553,0,6410,16,16,0,6410,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34074,0,6407,6407,5121,[object HTMLImageElement]) (in assert)
+true
+PASS: This should work: texImage2D(34074,0,6407,6407,5121,[object HTMLImageElement]) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texImage2D(34073,0,6408,16,16,0,6408,5121,null) (in assert)
+true
+PASS: This should work: texImage2D(34073,0,6408,16,16,0,6408,5121,null) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(3553,10241,9987) (in assert)
+true
+PASS: This should work: texParameterf(3553,10241,9987) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(3553,10240,9728) (in assert)
+true
+PASS: This should work: texParameterf(3553,10240,9728) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(34067,10243,10497) (in assert)
+true
+PASS: This should work: texParameterf(34067,10243,10497) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(3553,10243,33071) (in assert)
+true
+PASS: This should work: texParameterf(3553,10243,33071) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(3553,10242,33648) (in assert)
+true
+PASS: This should work: texParameterf(3553,10242,33648) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(3553,10243,33648) (in assert)
+true
+PASS: This should work: texParameterf(3553,10243,33648) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(34067,10241,9728) (in assert)
+true
+PASS: This should work: texParameterf(34067,10241,9728) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(3553,10240,9729) (in assert)
+true
+PASS: This should work: texParameterf(3553,10240,9729) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(3553,10241,9986) (in assert)
+true
+PASS: This should work: texParameterf(3553,10241,9986) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(3553,10242,33071) (in assert)
+true
+PASS: This should work: texParameterf(3553,10242,33071) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(34067,10241,9987) (in assert)
+true
+PASS: This should work: texParameterf(34067,10241,9987) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(34067,10241,9729) (in assert)
+true
+PASS: This should work: texParameterf(34067,10241,9729) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(34067,10241,9986) (in assert)
+true
+PASS: This should work: texParameterf(34067,10241,9986) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(34067,10242,10497) (in assert)
+true
+PASS: This should work: texParameterf(34067,10242,10497) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(34067,10241,9985) (in assert)
+true
+PASS: This should work: texParameterf(34067,10241,9985) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(34067,10240,9728) (in assert)
+true
+PASS: This should work: texParameterf(34067,10240,9728) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(3553,10243,10497) (in assert)
+true
+PASS: This should work: texParameterf(3553,10243,10497) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(34067,10241,9984) (in assert)
+true
+PASS: This should work: texParameterf(34067,10241,9984) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(34067,10240,9729) (in assert)
+true
+PASS: This should work: texParameterf(34067,10240,9729) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(34067,10242,33648) (in assert)
+true
+PASS: This should work: texParameterf(34067,10242,33648) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(34067,10243,33071) (in assert)
+true
+PASS: This should work: texParameterf(34067,10243,33071) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(3553,10241,9985) (in assert)
+true
+PASS: This should work: texParameterf(3553,10241,9985) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(3553,10242,10497) (in assert)
+true
+PASS: This should work: texParameterf(3553,10242,10497) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(34067,10243,33648) (in assert)
+true
+PASS: This should work: texParameterf(34067,10243,33648) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(3553,10241,9729) (in assert)
+true
+PASS: This should work: texParameterf(3553,10241,9729) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(3553,10241,9728) (in assert)
+true
+PASS: This should work: texParameterf(3553,10241,9728) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameterf(34067,10242,33071) (in assert)
+true
+PASS: This should work: texParameterf(34067,10242,33071) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameteri(34067,10240,9729) (in assert)
+true
+PASS: This should work: texParameteri(34067,10240,9729) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameteri(3553,10241,9729) (in assert)
+true
+PASS: This should work: texParameteri(3553,10241,9729) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameteri(34067,10243,10497) (in assert)
+true
+PASS: This should work: texParameteri(34067,10243,10497) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameteri(3553,10242,33648) (in assert)
+true
+PASS: This should work: texParameteri(3553,10242,33648) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameteri(3553,10240,9728) (in assert)
+true
+PASS: This should work: texParameteri(3553,10240,9728) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameteri(3553,10241,9985) (in assert)
+true
+PASS: This should work: texParameteri(3553,10241,9985) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameteri(3553,10243,33648) (in assert)
+true
+PASS: This should work: texParameteri(3553,10243,33648) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameteri(3553,10243,33071) (in assert)
+true
+PASS: This should work: texParameteri(3553,10243,33071) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameteri(3553,10240,9729) (in assert)
+true
+PASS: This should work: texParameteri(3553,10240,9729) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameteri(34067,10240,9728) (in assert)
+true
+PASS: This should work: texParameteri(34067,10240,9728) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameteri(34067,10241,9728) (in assert)
+true
+PASS: This should work: texParameteri(34067,10241,9728) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameteri(34067,10243,33071) (in assert)
+true
+PASS: This should work: texParameteri(34067,10243,33071) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameteri(34067,10242,33071) (in assert)
+true
+PASS: This should work: texParameteri(34067,10242,33071) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameteri(34067,10242,10497) (in assert)
+true
+PASS: This should work: texParameteri(34067,10242,10497) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameteri(3553,10243,10497) (in assert)
+true
+PASS: This should work: texParameteri(3553,10243,10497) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameteri(3553,10242,10497) (in assert)
+true
+PASS: This should work: texParameteri(3553,10242,10497) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameteri(34067,10241,9985) (in assert)
+true
+PASS: This should work: texParameteri(34067,10241,9985) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameteri(3553,10241,9728) (in assert)
+true
+PASS: This should work: texParameteri(3553,10241,9728) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameteri(34067,10243,33648) (in assert)
+true
+PASS: This should work: texParameteri(34067,10243,33648) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameteri(3553,10241,9987) (in assert)
+true
+PASS: This should work: texParameteri(3553,10241,9987) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameteri(34067,10241,9986) (in assert)
+true
+PASS: This should work: texParameteri(34067,10241,9986) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameteri(3553,10242,33071) (in assert)
+true
+PASS: This should work: texParameteri(3553,10242,33071) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameteri(34067,10241,9987) (in assert)
+true
+PASS: This should work: texParameteri(34067,10241,9987) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameteri(34067,10241,9729) (in assert)
+true
+PASS: This should work: texParameteri(34067,10241,9729) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: texParameteri(34067,10241,9984) (in assert)
+true
+PASS: This should work: texParameteri(34067,10241,9984) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(1034,-168,2957,587) (in assert)
+true
+PASS: This should work: viewport(1034,-168,2957,587) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(1375,-15,3000,1680) (in assert)
+true
+PASS: This should work: viewport(1375,-15,3000,1680) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(1381,1138,2277,3000) (in assert)
+true
+PASS: This should work: viewport(1381,1138,2277,3000) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-575,-641,3,700) (in assert)
+true
+PASS: This should work: viewport(-575,-641,3,700) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-502,-1111,1069,2367) (in assert)
+true
+PASS: This should work: viewport(-502,-1111,1069,2367) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(1212,197,415,2892) (in assert)
+true
+PASS: This should work: viewport(1212,197,415,2892) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-475,1325,2471,1710) (in assert)
+true
+PASS: This should work: viewport(-475,1325,2471,1710) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(377,-727,1583,498) (in assert)
+true
+PASS: This should work: viewport(377,-727,1583,498) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(388,-1025,1917,1774) (in assert)
+true
+PASS: This should work: viewport(388,-1025,1917,1774) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(176,105,719,0) (in assert)
+true
+PASS: This should work: viewport(176,105,719,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(1049,-556,201,1023) (in assert)
+true
+PASS: This should work: viewport(1049,-556,201,1023) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-221,294,2727,663) (in assert)
+true
+PASS: This should work: viewport(-221,294,2727,663) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-1495,405,1230,279) (in assert)
+true
+PASS: This should work: viewport(-1495,405,1230,279) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-843,157,2866,119) (in assert)
+true
+PASS: This should work: viewport(-843,157,2866,119) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(71,-1392,0,1707) (in assert)
+true
+PASS: This should work: viewport(71,-1392,0,1707) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(1020,-404,303,1613) (in assert)
+true
+PASS: This should work: viewport(1020,-404,303,1613) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(1185,-1256,2733,932) (in assert)
+true
+PASS: This should work: viewport(1185,-1256,2733,932) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-1367,-851,0,1018) (in assert)
+true
+PASS: This should work: viewport(-1367,-851,0,1018) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(1310,-378,2060,1505) (in assert)
+true
+PASS: This should work: viewport(1310,-378,2060,1505) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-401,1407,1538,1975) (in assert)
+true
+PASS: This should work: viewport(-401,1407,1538,1975) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-991,150,534,0) (in assert)
+true
+PASS: This should work: viewport(-991,150,534,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-924,904,627,1581) (in assert)
+true
+PASS: This should work: viewport(-924,904,627,1581) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-1054,398,1124,1436) (in assert)
+true
+PASS: This should work: viewport(-1054,398,1124,1436) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(130,-184,1161,3000) (in assert)
+true
+PASS: This should work: viewport(130,-184,1161,3000) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-288,991,1763,2073) (in assert)
+true
+PASS: This should work: viewport(-288,991,1763,2073) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-1076,-181,2461,23) (in assert)
+true
+PASS: This should work: viewport(-1076,-181,2461,23) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-574,-1063,669,61) (in assert)
+true
+PASS: This should work: viewport(-574,-1063,669,61) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-1310,193,751,2513) (in assert)
+true
+PASS: This should work: viewport(-1310,193,751,2513) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(1141,212,798,2638) (in assert)
+true
+PASS: This should work: viewport(1141,212,798,2638) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-1111,1035,569,473) (in assert)
+true
+PASS: This should work: viewport(-1111,1035,569,473) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-494,1088,2762,2733) (in assert)
+true
+PASS: This should work: viewport(-494,1088,2762,2733) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-93,318,1470,2067) (in assert)
+true
+PASS: This should work: viewport(-93,318,1470,2067) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-77,-695,220,3000) (in assert)
+true
+PASS: This should work: viewport(-77,-695,220,3000) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-863,1480,2329,1214) (in assert)
+true
+PASS: This should work: viewport(-863,1480,2329,1214) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(1356,1493,880,1906) (in assert)
+true
+PASS: This should work: viewport(1356,1493,880,1906) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-1094,795,0,2469) (in assert)
+true
+PASS: This should work: viewport(-1094,795,0,2469) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-396,245,667,69) (in assert)
+true
+PASS: This should work: viewport(-396,245,667,69) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(516,695,509,1438) (in assert)
+true
+PASS: This should work: viewport(516,695,509,1438) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(515,394,3000,1881) (in assert)
+true
+PASS: This should work: viewport(515,394,3000,1881) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-894,-1341,745,2139) (in assert)
+true
+PASS: This should work: viewport(-894,-1341,745,2139) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-60,-1031,211,2391) (in assert)
+true
+PASS: This should work: viewport(-60,-1031,211,2391) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(331,31,2016,1146) (in assert)
+true
+PASS: This should work: viewport(331,31,2016,1146) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(597,-1405,2299,2560) (in assert)
+true
+PASS: This should work: viewport(597,-1405,2299,2560) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-1227,713,3000,1341) (in assert)
+true
+PASS: This should work: viewport(-1227,713,3000,1341) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(1084,61,150,727) (in assert)
+true
+PASS: This should work: viewport(1084,61,150,727) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(398,851,64,2614) (in assert)
+true
+PASS: This should work: viewport(398,851,64,2614) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(432,-91,565,1320) (in assert)
+true
+PASS: This should work: viewport(432,-91,565,1320) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(1420,1138,533,1060) (in assert)
+true
+PASS: This should work: viewport(1420,1138,533,1060) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(1109,-841,2421,495) (in assert)
+true
+PASS: This should work: viewport(1109,-841,2421,495) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(592,987,1506,1166) (in assert)
+true
+PASS: This should work: viewport(592,987,1506,1166) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-511,-638,987,1609) (in assert)
+true
+PASS: This should work: viewport(-511,-638,987,1609) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-1297,1453,1495,895) (in assert)
+true
+PASS: This should work: viewport(-1297,1453,1495,895) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-506,-1350,656,1405) (in assert)
+true
+PASS: This should work: viewport(-506,-1350,656,1405) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(843,-740,742,1539) (in assert)
+true
+PASS: This should work: viewport(843,-740,742,1539) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-1285,1263,2903,2825) (in assert)
+true
+PASS: This should work: viewport(-1285,1263,2903,2825) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(1126,-1386,2228,41) (in assert)
+true
+PASS: This should work: viewport(1126,-1386,2228,41) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-713,-1399,2231,794) (in assert)
+true
+PASS: This should work: viewport(-713,-1399,2231,794) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(796,-397,154,2407) (in assert)
+true
+PASS: This should work: viewport(796,-397,154,2407) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-121,55,0,1544) (in assert)
+true
+PASS: This should work: viewport(-121,55,0,1544) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(637,-1412,1073,3000) (in assert)
+true
+PASS: This should work: viewport(637,-1412,1073,3000) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(363,1156,2243,2480) (in assert)
+true
+PASS: This should work: viewport(363,1156,2243,2480) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-420,-1063,1108,1292) (in assert)
+true
+PASS: This should work: viewport(-420,-1063,1108,1292) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-1246,-839,2963,1220) (in assert)
+true
+PASS: This should work: viewport(-1246,-839,2963,1220) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-659,1141,2810,346) (in assert)
+true
+PASS: This should work: viewport(-659,1141,2810,346) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-576,224,593,0) (in assert)
+true
+PASS: This should work: viewport(-576,224,593,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(9,1136,2824,719) (in assert)
+true
+PASS: This should work: viewport(9,1136,2824,719) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-499,-363,3000,979) (in assert)
+true
+PASS: This should work: viewport(-499,-363,3000,979) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-939,394,2257,1763) (in assert)
+true
+PASS: This should work: viewport(-939,394,2257,1763) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-521,239,3000,189) (in assert)
+true
+PASS: This should work: viewport(-521,239,3000,189) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(1032,1365,200,0) (in assert)
+true
+PASS: This should work: viewport(1032,1365,200,0) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-907,-645,1389,1642) (in assert)
+true
+PASS: This should work: viewport(-907,-645,1389,1642) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(1010,-1203,619,1122) (in assert)
+true
+PASS: This should work: viewport(1010,-1203,619,1122) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(699,1297,2105,2143) (in assert)
+true
+PASS: This should work: viewport(699,1297,2105,2143) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-405,110,1441,2521) (in assert)
+true
+PASS: This should work: viewport(-405,110,1441,2521) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-748,-854,2784,1875) (in assert)
+true
+PASS: This should work: viewport(-748,-854,2784,1875) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-164,-887,2524,2568) (in assert)
+true
+PASS: This should work: viewport(-164,-887,2524,2568) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-821,-396,1668,1140) (in assert)
+true
+PASS: This should work: viewport(-821,-396,1668,1140) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(552,-1278,257,1852) (in assert)
+true
+PASS: This should work: viewport(552,-1278,257,1852) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(784,924,933,249) (in assert)
+true
+PASS: This should work: viewport(784,924,933,249) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(426,1365,2703,1581) (in assert)
+true
+PASS: This should work: viewport(426,1365,2703,1581) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(1162,1320,1580,3000) (in assert)
+true
+PASS: This should work: viewport(1162,1320,1580,3000) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(506,-54,2015,1305) (in assert)
+true
+PASS: This should work: viewport(506,-54,2015,1305) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-312,-1438,2089,3000) (in assert)
+true
+PASS: This should work: viewport(-312,-1438,2089,3000) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-960,-1278,2330,1979) (in assert)
+true
+PASS: This should work: viewport(-960,-1278,2330,1979) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(949,702,1358,3000) (in assert)
+true
+PASS: This should work: viewport(949,702,1358,3000) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-1484,-599,2206,2285) (in assert)
+true
+PASS: This should work: viewport(-1484,-599,2206,2285) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(845,849,1905,2392) (in assert)
+true
+PASS: This should work: viewport(845,849,1905,2392) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(1190,-1046,2192,1783) (in assert)
+true
+PASS: This should work: viewport(1190,-1046,2192,1783) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-559,-1212,2326,194) (in assert)
+true
+PASS: This should work: viewport(-559,-1212,2326,194) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(682,-888,240,1934) (in assert)
+true
+PASS: This should work: viewport(682,-888,240,1934) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(269,-79,287,310) (in assert)
+true
+PASS: This should work: viewport(269,-79,287,310) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(617,651,535,1017) (in assert)
+true
+PASS: This should work: viewport(617,651,535,1017) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-1278,-169,1575,613) (in assert)
+true
+PASS: This should work: viewport(-1278,-169,1575,613) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(1367,-1315,2870,784) (in assert)
+true
+PASS: This should work: viewport(1367,-1315,2870,784) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(721,43,395,2780) (in assert)
+true
+PASS: This should work: viewport(721,43,395,2780) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(1147,1331,1298,1779) (in assert)
+true
+PASS: This should work: viewport(1147,1331,1298,1779) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(787,-822,541,2995) (in assert)
+true
+PASS: This should work: viewport(787,-822,541,2995) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(-1261,1457,0,1608) (in assert)
+true
+PASS: This should work: viewport(-1261,1457,0,1608) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(1367,242,1120,463) (in assert)
+true
+PASS: This should work: viewport(1367,242,1120,463) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
+PASS: Valid args: viewport(1312,-1240,148,248) (in assert)
+true
+PASS: This should work: viewport(1312,-1240,148,248) (in assertOk)
+(function (){rv = GL[name].apply(GL, args); ok = true;})
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit216LayoutTestshttptestswebgl102resourceswebgl_test_filesconformancemoreconformancequickCheckAPIS_Vhtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/more/conformance/quickCheckAPI-S_V.html (0 => 213040)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/more/conformance/quickCheckAPI-S_V.html                                (rev 0)
+++ releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/more/conformance/quickCheckAPI-S_V.html        2017-02-27 09:06:10 UTC (rev 213040)
</span><span class="lines">@@ -0,0 +1,86 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;meta charset=&quot;utf-8&quot;&gt;
+&lt;!--
+
+/*
+** Copyright (c) 2012 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** &quot;Materials&quot;), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+--&gt;
+&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;../unit.css&quot; /&gt;
+&lt;script type=&quot;application/x-javascript&quot; src=&quot;../unit.js&quot;&gt;&lt;/script&gt;
+&lt;script type=&quot;application/x-javascript&quot; src=&quot;../util.js&quot;&gt;&lt;/script&gt;
+&lt;script type=&quot;application/x-javascript&quot; src=&quot;quickCheckAPI.js&quot;&gt;&lt;/script&gt;
+&lt;script type=&quot;application/x-javascript&quot; src=&quot;argGenerators-S_V.js&quot;&gt;&lt;/script&gt;
+
+&lt;script type=&quot;application/x-javascript&quot;&gt;
+
+// Test that all GL functions specified in ArgGenerators work
+// when called with randomly generated valid arguments
+Tests.testValidArgs = function() {
+  var randomTestCount = 100;
+  for (var name in ArgGenerators) {
+    try {
+      if (!GL[name])
+        throw (new Error(name + &quot; is missing from the WebGL context&quot;));
+      var argGen = ArgGenerators[name];
+      var alreadyTriedArgs = {};
+      if (!argGen.generate) continue;
+      // test each GL function with randomTestCount randomly generated valid args
+      argGeneratorTestRunner(argGen, function(args, gen, setupVars) {
+        if (!gen.noAlreadyTriedCheck) {
+          var src = Object.toSource(args);
+          if (alreadyTriedArgs[src])
+            return true;
+
+          alreadyTriedArgs[src] = true;
+        }
+        var ok = false;
+        // if we have an validity checker, assert that the generated args are valid
+        if (gen.checkArgValidity)
+          assert(&quot;Valid args: &quot;+name+&quot;(&quot;+argsToString(args)+&quot;)&quot;,
+                gen.checkArgValidity.apply(gen, args));
+        var rv;
+        // assert that GL function works when called with valid args
+        assertOk(&quot;This should work: &quot;+name+&quot;(&quot;+argsToString(args)+&quot;)&quot;,
+                function(){rv = GL[name].apply(GL, args); ok = true;});
+        // if we need to cleanup the return value, do it here
+        // e.g. calling gl.deleteBuffer(rv) after testing gl.createBuffer() above
+        if (gen.returnValueCleanup)
+          assertOk(&quot;Cleaning up return value after &quot;+name+&quot;(&quot;+argsToString(args)+&quot;)&quot;,
+                   function() { gen.returnValueCleanup(rv); });
+        return ok;
+      }, argGen.testCount || randomTestCount);
+    } catch(e) {
+      testFailed(name, e.name, formatError(e));
+    }
+  }
+  if (window.testRunner)
+    testRunner.notifyDone();
+}
+
+&lt;/script&gt;
+&lt;style&gt;canvas{position:absolute;}&lt;/style&gt;
+&lt;/head&gt;&lt;body&gt;
+&lt;/body&gt;&lt;/html&gt;
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit216LayoutTestshttptestswebgl102resourceswebgl_test_filesconformancemoreconformancequickCheckAPIjs"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/more/conformance/quickCheckAPI.js (0 => 213040)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/more/conformance/quickCheckAPI.js                                (rev 0)
+++ releases/WebKitGTK/webkit-2.16/LayoutTests/http/tests/webgl/1.0.2/resources/webgl_test_files/conformance/more/conformance/quickCheckAPI.js        2017-02-27 09:06:10 UTC (rev 213040)
</span><span class="lines">@@ -0,0 +1,430 @@
</span><ins>+/*
+** Copyright (c) 2012 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** &quot;Materials&quot;), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+/*
+  QuickCheck tests for WebGL:
+
+    1. Write a valid arg generator for each function
+      1.1. Write valid arg predicates to use with random generator:
+            if value passes generator, accept it as valid.
+      1.2. Often needs initializing and cleanup:
+            setup - generate - cleanup
+            gl.createBuffer - test(bindBufferGenerator) - gl.deleteBuffer
+
+    2. Write an invalid arg generator
+      2.1. Take valid args, modify an arg until the args no longer pass
+            checkArgValidity.
+      2.2. Repeat for all args.
+
+    3. Test functions using the generators
+      3.1. Args generated with the valid arg generator should pass
+            assertOk(f(args))
+      3.2. Args generated with the invalid arg generator should pass
+            assertFail(f(args))
+*/
+var GLcanvas = document.createElement('canvas');
+var canvas2D = document.createElement('canvas');
+GLcanvas.width = GLcanvas.height = 256;
+GL = getGLContext(GLcanvas);
+Array.from = function(o) {
+  var a = [];
+  for (var i=0; i&lt;o.length; i++)
+    a.push(o[i]);
+  return a;
+}
+Array.prototype.has = function(v) { return this.indexOf(v) != -1; }
+Array.prototype.random = function() { return this[randomInt(this.length)]; }
+
+castToInt = function(o) {
+  if (typeof o == 'number')
+    return isNaN(o) ? 0 : Math.floor(o);
+  if (o == true) return 1;
+  return 0;
+};
+
+// Creates a constant checker / generator from its arguments.
+//
+// E.g. if you want a constant checker for the constants 1, 2, and 3, you
+// would do the following:
+//
+//   var cc = constCheck(1,2,3);
+//   var randomConst = cc.random();
+//   if (cc.has(randomConst))
+//     console.log(&quot;randomConst is included in cc's constants&quot;);
+//
+constCheck = function() {
+  var a = Array.from(arguments);
+  a.has = function(v) { return this.indexOf(castToInt(v)) != -1; };
+  return a;
+}
+
+bindTextureTarget = constCheck(GL.TEXTURE_2D, GL.TEXTURE_CUBE_MAP);
+blendEquationMode = constCheck(GL.FUNC_ADD, GL.FUNC_SUBTRACT, GL.FUNC_REVERSE_SUBTRACT);
+blendFuncSfactor = constCheck(
+  GL.ZERO, GL.ONE, GL.SRC_COLOR, GL.ONE_MINUS_SRC_COLOR, GL.DST_COLOR,
+  GL.ONE_MINUS_DST_COLOR, GL.SRC_ALPHA, GL.ONE_MINUS_SRC_ALPHA, GL.DST_ALPHA,
+  GL.ONE_MINUS_DST_ALPHA, GL.CONSTANT_COLOR, GL.ONE_MINUS_CONSTANT_COLOR,
+  GL.CONSTANT_ALPHA, GL.ONE_MINUS_CONSTANT_ALPHA, GL.SRC_ALPHA_SATURATE
+);
+blendFuncDfactor = constCheck(
+  GL.ZERO, GL.ONE, GL.SRC_COLOR, GL.ONE_MINUS_SRC_COLOR, GL.DST_COLOR,
+  GL.ONE_MINUS_DST_COLOR, GL.SRC_ALPHA, GL.ONE_MINUS_SRC_ALPHA, GL.DST_ALPHA,
+  GL.ONE_MINUS_DST_ALPHA, GL.CONSTANT_COLOR, GL.ONE_MINUS_CONSTANT_COLOR,
+  GL.CONSTANT_ALPHA, GL.ONE_MINUS_CONSTANT_ALPHA
+);
+bufferTarget = constCheck(GL.ARRAY_BUFFER, GL.ELEMENT_ARRAY_BUFFER);
+bufferMode = constCheck(GL.STREAM_DRAW, GL.STATIC_DRAW, GL.DYNAMIC_DRAW);
+clearMask = constCheck(
+  GL.COLOR_BUFFER_BIT | GL.DEPTH_BUFFER_BIT | GL.STENCIL_BUFFER_BIT,
+  GL.COLOR_BUFFER_BIT | GL.DEPTH_BUFFER_BIT,
+  GL.COLOR_BUFFER_BIT | GL.STENCIL_BUFFER_BIT,
+  GL.DEPTH_BUFFER_BIT | GL.STENCIL_BUFFER_BIT,
+  GL.COLOR_BUFFER_BIT, GL.DEPTH_BUFFER_BIT, GL.STENCIL_BUFFER_BIT, 0
+);
+cullFace = constCheck(GL.FRONT, GL.BACK, GL.FRONT_AND_BACK);
+depthFuncFunc = constCheck(
+  GL.NEVER, GL.LESS, GL.EQUAL, GL.LEQUAL, GL.GREATER, GL.NOTEQUAL,
+  GL.GEQUAL, GL.ALWAYS
+);
+stencilFuncFunc = depthFuncFunc;
+enableCap = constCheck(
+  GL.BLEND, GL.CULL_FACE, GL.DEPTH_TEST, GL.DITHER, GL.POLYGON_OFFSET_FILL,
+  GL.SAMPLE_ALPHA_TO_COVERAGE, GL.SAMPLE_COVERAGE, GL.SCISSOR_TEST,
+  GL.STENCIL_TEST
+);
+frontFaceMode = constCheck(GL.CCW, GL.CW);
+getParameterPname = constCheck(
+  GL.ACTIVE_TEXTURE || &quot;GL.ACTIVE_TEXTURE&quot;,
+  GL.ALIASED_LINE_WIDTH_RANGE || &quot;GL.ALIASED_LINE_WIDTH_RANGE&quot;,
+  GL.ALIASED_POINT_SIZE_RANGE || &quot;GL.ALIASED_POINT_SIZE_RANGE&quot;,
+  GL.ALPHA_BITS || &quot;GL.ALPHA_BITS&quot;,
+  GL.ARRAY_BUFFER_BINDING || &quot;GL.ARRAY_BUFFER_BINDING&quot;,
+  GL.BLEND || &quot;GL.BLEND&quot;,
+  GL.BLEND_COLOR || &quot;GL.BLEND_COLOR&quot;,
+  GL.BLEND_DST_ALPHA || &quot;GL.BLEND_DST_ALPHA&quot;,
+  GL.BLEND_DST_RGB || &quot;GL.BLEND_DST_RGB&quot;,
+  GL.BLEND_EQUATION_ALPHA || &quot;GL.BLEND_EQUATION_ALPHA&quot;,
+  GL.BLEND_EQUATION_RGB || &quot;GL.BLEND_EQUATION_RGB&quot;,
+  GL.BLEND_SRC_ALPHA || &quot;GL.BLEND_SRC_ALPHA&quot;,
+  GL.BLEND_SRC_RGB || &quot;GL.BLEND_SRC_RGB&quot;,
+  GL.BLUE_BITS || &quot;GL.BLUE_BITS&quot;,
+  GL.COLOR_CLEAR_VALUE || &quot;GL.COLOR_CLEAR_VALUE&quot;,
+  GL.COLOR_WRITEMASK || &quot;GL.COLOR_WRITEMASK&quot;,
+  GL.COMPRESSED_TEXTURE_FORMATS || &quot;GL.COMPRESSED_TEXTURE_FORMATS&quot;,
+  GL.CULL_FACE || &quot;GL.CULL_FACE&quot;,
+  GL.CULL_FACE_MODE || &quot;GL.CULL_FACE_MODE&quot;,
+  GL.CURRENT_PROGRAM || &quot;GL.CURRENT_PROGRAM&quot;,
+  GL.DEPTH_BITS || &quot;GL.DEPTH_BITS&quot;,
+  GL.DEPTH_CLEAR_VALUE || &quot;GL.DEPTH_CLEAR_VALUE&quot;,
+  GL.DEPTH_FUNC || &quot;GL.DEPTH_FUNC&quot;,
+  GL.DEPTH_RANGE || &quot;GL.DEPTH_RANGE&quot;,
+  GL.DEPTH_TEST || &quot;GL.DEPTH_TEST&quot;,
+  GL.DEPTH_WRITEMASK || &quot;GL.DEPTH_WRITEMASK&quot;,
+  GL.DITHER || &quot;GL.DITHER&quot;,
+  GL.ELEMENT_ARRAY_BUFFER_BINDING || &quot;GL.ELEMENT_ARRAY_BUFFER_BINDING&quot;,
+  GL.FRAMEBUFFER_BINDING || &quot;GL.FRAMEBUFFER_BINDING&quot;,
+  GL.FRONT_FACE || &quot;GL.FRONT_FACE&quot;,
+  GL.GENERATE_MIPMAP_HINT || &quot;GL.GENERATE_MIPMAP_HINT&quot;,
+  GL.GREEN_BITS || &quot;GL.GREEN_BITS&quot;,
+  GL.LINE_WIDTH || &quot;GL.LINE_WIDTH&quot;,
+  GL.MAX_COMBINED_TEXTURE_IMAGE_UNITS || &quot;GL.MAX_COMBINED_TEXTURE_IMAGE_UNITS&quot;,
+  GL.MAX_CUBE_MAP_TEXTURE_SIZE || &quot;GL.MAX_CUBE_MAP_TEXTURE_SIZE&quot;,
+  GL.MAX_FRAGMENT_UNIFORM_VECTORS || &quot;GL.MAX_FRAGMENT_UNIFORM_VECTORS&quot;,
+  GL.MAX_RENDERBUFFER_SIZE || &quot;GL.MAX_RENDERBUFFER_SIZE&quot;,
+  GL.MAX_TEXTURE_IMAGE_UNITS || &quot;GL.MAX_TEXTURE_IMAGE_UNITS&quot;,
+  GL.MAX_TEXTURE_SIZE || &quot;GL.MAX_TEXTURE_SIZE&quot;,
+  GL.MAX_VARYING_VECTORS || &quot;GL.MAX_VARYING_VECTORS&quot;,
+  GL.MAX_VERTEX_ATTRIBS || &quot;GL.MAX_VERTEX_ATTRIBS&quot;,
+  GL.MAX_VERTEX_TEXTURE_IMAGE_UNITS || &quot;GL.MAX_VERTEX_TEXTURE_IMAGE_UNITS&quot;,
+  GL.MAX_VERTEX_UNIFORM_VECTORS || &quot;GL.MAX_VERTEX_UNIFORM_VECTORS&quot;,
+  GL.MAX_VIEWPORT_DIMS || &quot;GL.MAX_VIEWPORT_DIMS&quot;,
+  GL.PACK_ALIGNMENT || &quot;GL.PACK_ALIGNMENT&quot;,
+  GL.POLYGON_OFFSET_FACTOR || &quot;GL.POLYGON_OFFSET_FACTOR&quot;,
+  GL.POLYGON_OFFSET_FILL || &quot;GL.POLYGON_OFFSET_FILL&quot;,
+  GL.POLYGON_OFFSET_UNITS || &quot;GL.POLYGON_OFFSET_UNITS&quot;,
+  GL.RED_BITS || &quot;GL.RED_BITS&quot;,
+  GL.RENDERBUFFER_BINDING || &quot;GL.RENDERBUFFER_BINDING&quot;,
+  GL.SAMPLE_BUFFERS || &quot;GL.SAMPLE_BUFFERS&quot;,
+  GL.SAMPLE_COVERAGE_INVERT || &quot;GL.SAMPLE_COVERAGE_INVERT&quot;,
+  GL.SAMPLE_COVERAGE_VALUE || &quot;GL.SAMPLE_COVERAGE_VALUE&quot;,
+  GL.SAMPLES || &quot;GL.SAMPLES&quot;,
+  GL.SCISSOR_BOX || &quot;GL.SCISSOR_BOX&quot;,
+  GL.SCISSOR_TEST || &quot;GL.SCISSOR_TEST&quot;,
+  GL.STENCIL_BACK_FAIL || &quot;GL.STENCIL_BACK_FAIL&quot;,
+  GL.STENCIL_BACK_FUNC || &quot;GL.STENCIL_BACK_FUNC&quot;,
+  GL.STENCIL_BACK_PASS_DEPTH_FAIL || &quot;GL.STENCIL_BACK_PASS_DEPTH_FAIL&quot;,
+  GL.STENCIL_BACK_PASS_DEPTH_PASS || &quot;GL.STENCIL_BACK_PASS_DEPTH_PASS&quot;,
+  GL.STENCIL_BACK_REF || &quot;GL.STENCIL_BACK_REF&quot;,
+  GL.STENCIL_BACK_VALUE_MASK || &quot;GL.STENCIL_BACK_VALUE_MASK&quot;,
+  GL.STENCIL_BACK_WRITEMASK || &quot;GL.STENCIL_BACK_WRITEMASK&quot;,
+  GL.STENCIL_BITS || &quot;GL.STENCIL_BITS&quot;,
+  GL.STENCIL_CLEAR_VALUE || &quot;GL.STENCIL_CLEAR_VALUE&quot;,
+  GL.STENCIL_FAIL || &quot;GL.STENCIL_FAIL&quot;,
+  GL.STENCIL_FUNC || &quot;GL.STENCIL_FUNC&quot;,
+  GL.STENCIL_PASS_DEPTH_FAIL || &quot;GL.STENCIL_PASS_DEPTH_FAIL&quot;,
+  GL.STENCIL_PASS_DEPTH_PASS || &quot;GL.STENCIL_PASS_DEPTH_PASS&quot;,
+  GL.STENCIL_REF || &quot;GL.STENCIL_REF&quot;,
+  GL.STENCIL_TEST || &quot;GL.STENCIL_TEST&quot;,
+  GL.STENCIL_VALUE_MASK || &quot;GL.STENCIL_VALUE_MASK&quot;,
+  GL.STENCIL_WRITEMASK || &quot;GL.STENCIL_WRITEMASK&quot;,
+  GL.SUBPIXEL_BITS || &quot;GL.SUBPIXEL_BITS&quot;,
+  GL.TEXTURE_BINDING_2D || &quot;GL.TEXTURE_BINDING_2D&quot;,
+  GL.TEXTURE_BINDING_CUBE_MAP || &quot;GL.TEXTURE_BINDING_CUBE_MAP&quot;,
+  GL.UNPACK_ALIGNMENT || &quot;GL.UNPACK_ALIGNMENT&quot;,
+  GL.VIEWPORT || &quot;GL.VIEWPORT&quot;
+);
+mipmapHint = constCheck(GL.FASTEST, GL.NICEST, GL.DONT_CARE);
+pixelStoreiPname = constCheck(GL.PACK_ALIGNMENT, GL.UNPACK_ALIGNMENT);
+pixelStoreiParam = constCheck(1,2,4,8);
+shaderType = constCheck(GL.VERTEX_SHADER, GL.FRAGMENT_SHADER);
+stencilOp = constCheck(GL.KEEP, GL.ZERO, GL.REPLACE, GL.INCR, GL.INCR_WRAP,
+                        GL.DECR, GL.DECR_WRAP, GL.INVERT);
+texImageTarget = constCheck(
+  GL.TEXTURE_2D,
+  GL.TEXTURE_CUBE_MAP_POSITIVE_X,
+  GL.TEXTURE_CUBE_MAP_NEGATIVE_X,
+  GL.TEXTURE_CUBE_MAP_POSITIVE_Y,
+  GL.TEXTURE_CUBE_MAP_NEGATIVE_Y,
+  GL.TEXTURE_CUBE_MAP_POSITIVE_Z,
+  GL.TEXTURE_CUBE_MAP_NEGATIVE_Z
+);
+texImageInternalFormat = constCheck(
+  GL.ALPHA,
+  GL.LUMINANCE,
+  GL.LUMINANCE_ALPHA,
+  GL.RGB,
+  GL.RGBA
+);
+texImageFormat = constCheck(
+  GL.ALPHA,
+  GL.LUMINANCE,
+  GL.LUMINANCE_ALPHA,
+  GL.RGB,
+  GL.RGBA
+);
+texImageType = constCheck(GL.UNSIGNED_BYTE);
+texParameterPname = constCheck(
+  GL.TEXTURE_MIN_FILTER, GL.TEXTURE_MAG_FILTER,
+  GL.TEXTURE_WRAP_S, GL.TEXTURE_WRAP_T);
+texParameterParam = {};
+texParameterParam[GL.TEXTURE_MIN_FILTER] = constCheck(
+  GL.NEAREST, GL.LINEAR, GL.NEAREST_MIPMAP_NEAREST, GL.LINEAR_MIPMAP_NEAREST,
+  GL.NEAREST_MIPMAP_LINEAR, GL.LINEAR_MIPMAP_LINEAR);
+texParameterParam[GL.TEXTURE_MAG_FILTER] = constCheck(GL.NEAREST, GL.LINEAR);
+texParameterParam[GL.TEXTURE_WRAP_S] = constCheck(
+  GL.CLAMP_TO_EDGE, GL.MIRRORED_REPEAT, GL.REPEAT);
+texParameterParam[GL.TEXTURE_WRAP_T] = texParameterParam[GL.TEXTURE_WRAP_S];
+textureUnit = constCheck.apply(this, (function(){
+  var textureUnits = [];
+  var texUnits = GL.getParameter(GL.MAX_TEXTURE_IMAGE_UNITS);
+  for (var i=0; i&lt;texUnits; i++) textureUnits.push(GL['TEXTURE'+i]);
+  return textureUnits;
+})());
+
+var StencilBits = GL.getParameter(GL.STENCIL_BITS);
+var MaxStencilValue = 1 &lt;&lt; StencilBits;
+
+var MaxVertexAttribs = GL.getParameter(GL.MAX_VERTEX_ATTRIBS);
+var LineWidthRange = GL.getParameter(GL.ALIASED_LINE_WIDTH_RANGE);
+
+// Returns true if bufData can be passed to GL.bufferData
+isBufferData = function(bufData) {
+  if (typeof bufData == 'number')
+    return bufData &gt;= 0;
+  if (bufData instanceof ArrayBuffer)
+    return true;
+  return WebGLArrayTypes.some(function(t) {
+    return bufData instanceof t;
+  });
+};
+
+isVertexAttribute = function(idx) {
+  if (typeof idx != 'number') return false;
+  return idx &gt;= 0 &amp;&amp; idx &lt; MaxVertexAttribs;
+};
+
+isValidName = function(name) {
+  if (typeof name != 'string') return false;
+  for (var i=0; i&lt;name.length; i++) {
+    var c = name.charCodeAt(i);
+    if (c &amp; 0x00FF == 0 || c &amp; 0xFF00 == 0) {
+      return false;
+    }
+  }
+  return true;
+};
+
+WebGLArrayTypes = [
+  Float32Array,
+  Int32Array,
+  Int16Array,
+  Int8Array,
+  Uint32Array,
+  Uint16Array,
+  Uint8Array
+];
+webGLArrayContentGenerators = [randomLength, randomSmallIntArray];
+randomWebGLArray = function() {
+  var t = WebGLArrayTypes.random();
+  return new t(webGLArrayContentGenerators.random()());
+};
+
+randomArrayBuffer = function(buflen) {
+  if (buflen == null) buflen = 256;
+  var len = randomInt(buflen)+1;
+  var rv;
+  try {
+    rv = new ArrayBuffer(len);
+  } catch(e) {
+    log(&quot;Error creating ArrayBuffer with length &quot; + len);
+    throw(e);
+  }
+  return rv;
+};
+
+bufferDataGenerators = [randomLength, randomWebGLArray, randomArrayBuffer];
+randomBufferData = function() {
+  return bufferDataGenerators.random()();
+};
+
+randomSmallWebGLArray = function(buflen) {
+  var t = WebGLArrayTypes.random();
+  return new t(randomInt(buflen/4)+1);
+};
+
+bufferSubDataGenerators = [randomSmallWebGLArray, randomArrayBuffer];
+randomBufferSubData = function(buflen) {
+  var data = bufferSubDataGenerators.random()(buflen);
+  var offset = randomInt(buflen - data.byteLength);
+  return {data:data, offset:offset};
+};
+
+randomColor = function() {
+  return [Math.random(), Math.random(), Math.random(), Math.random()];
+};
+
+randomName = function() {
+  var arr = [];
+  var len = randomLength()+1;
+  for (var i=0; i&lt;len; i++) {
+    var l = randomInt(255)+1;
+    var h = randomInt(255)+1;
+    var c = (h &lt;&lt; 8) | l;
+    arr.push(String.fromCharCode(c));
+  }
+  return arr.join('');
+};
+randomVertexAttribute = function() {
+  return randomInt(MaxVertexAttribs);
+};
+
+randomBool = function() { return Math.random() &gt; 0.5; };
+
+randomStencil = function() {
+  return randomInt(MaxStencilValue);
+};
+
+randomLineWidth = function() {
+  var lo = LineWidthRange[0],
+      hi = LineWidthRange[1];
+  return randomFloatFromRange(lo, hi);
+};
+
+randomImage = function(w,h) {
+  var img;
+  var r = Math.random();
+  if (r &lt; 0.25) {
+    img = document.createElement('canvas');
+    img.width = w; img.height = h;
+    img.getContext('2d').fillRect(0,0,w,h);
+  } else if (r &lt; 0.5) {
+    img = document.createElement('video');
+    img.width = w; img.height = h;
+  } else if (r &lt; 0.75) {
+    img = document.createElement('img');
+    img.width = w; img.height = h;
+  } else {
+    img = canvas2D.getContext('2d').createImageData(w,h);
+  }
+  return img
+};
+
+mutateArgs = function(args) {
+  var mutateCount = randomIntFromRange(1, args.length);
+  var newArgs = Array.from(args);
+  for (var i=0; i&lt;mutateCount; i++) {
+    var idx = randomInt(args.length);
+    newArgs[idx] = generateRandomArg(idx, args.length);
+  }
+  return newArgs;
+};
+
+// Calls testFunction numberOfTests times with arguments generated by
+// argGen.generate() (or empty arguments if no generate present).
+//
+// The arguments testFunction is called with are the generated args,
+// the argGen, and what argGen.setup() returned or [] if argGen has not setup
+// method. I.e. testFunction(generatedArgs, argGen, setupVars).
+//
+argGeneratorTestRunner = function(argGen, testFunction, numberOfTests) {
+  // do argument generator setup if needed
+  var setupVars = argGen.setup ? argGen.setup() : [];
+  var error;
+  for (var i=0; i&lt;numberOfTests; i++) {
+    var failed = false;
+    // generate arguments if argGen has a generate method
+    var generatedArgs = argGen.generate ? argGen.generate.apply(argGen, setupVars) : [];
+    try {
+      // call testFunction with the generated args
+      testFunction.call(this, generatedArgs, argGen, setupVars);
+    } catch (e) {
+      failed = true;
+      error = e;
+    }
+    // if argGen needs cleanup for generated args, do it here
+    if (argGen.cleanup)
+      argGen.cleanup.apply(argGen, generatedArgs);
+    if (failed) break;
+  }
+  // if argGen needs to do a final cleanup for setupVars, do it here
+  if (argGen.teardown)
+    argGen.teardown.apply(argGen, setupVars);
+  if (error) throw(error);
+};
+
+// TODO: Remove this
+// WebKit or at least Chrome is really slow at laying out strings with
+// unprintable characters. Without this tests can take 30-90 seconds.
+// With this they're instant.
+sanitize = function(str) {
+  var newStr = [];
+  for (var ii = 0; ii &lt; str.length; ++ii) {
+    var c = str.charCodeAt(ii);
+    newStr.push((c &gt; 31 &amp;&amp; c &lt; 128) ? str[ii] : &quot;?&quot;);
+  }
+  return newStr.join('');
+};
+
+argsToString = function(args) {
+  return sanitize(args.map(function(a){return Object.toSource(a)}).join(&quot;,&quot;));
+};
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit216SourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.16/Source/WebCore/ChangeLog (213039 => 213040)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.16/Source/WebCore/ChangeLog        2017-02-27 09:03:30 UTC (rev 213039)
+++ releases/WebKitGTK/webkit-2.16/Source/WebCore/ChangeLog        2017-02-27 09:06:10 UTC (rev 213040)
</span><span class="lines">@@ -1,3 +1,28 @@
</span><ins>+2017-02-21  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        REGRESSION (r207720): /more/conformance/conformance/quickCheckAPI-S_V.html test fails
+        https://bugs.webkit.org/show_bug.cgi?id=168632
+        &lt;rdar://problem/30620129&gt;
+
+        Reviewed by Darin Adler.
+
+        After r207720, the following WebGL conformance tests started failing:
+        - /more/conformance/conformance/quickCheckAPI-S_V.html
+        - /context/context-lost.html
+
+        We started throwing security errors in case where we did not before.
+        Chrome and Firefox are both passing these tests so our new behavior was not interoperable.
+
+        This patch reverts part of r207720 to restore our previous behavior.
+
+        * html/canvas/WebGLRenderingContextBase.cpp:
+        (WebCore::WebGLRenderingContextBase::texSubImage2D):
+        (WebCore::WebGLRenderingContextBase::texImage2D):
+        (WebCore::WebGLRenderingContextBase::validateHTMLImageElement):
+        (WebCore::WebGLRenderingContextBase::validateHTMLCanvasElement):
+        (WebCore::WebGLRenderingContextBase::validateHTMLVideoElement):
+        * html/canvas/WebGLRenderingContextBase.h:
+
</ins><span class="cx"> 2017-02-20  Filip Pizlo  &lt;fpizlo@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         The collector thread should only start when the mutator doesn't have heap access
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit216SourceWebCorehtmlcanvasWebGLRenderingContextBasecpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.16/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp (213039 => 213040)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.16/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp        2017-02-27 09:03:30 UTC (rev 213039)
+++ releases/WebKitGTK/webkit-2.16/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp        2017-02-27 09:06:10 UTC (rev 213040)
</span><span class="lines">@@ -3547,10 +3547,9 @@
</span><span class="cx"> 
</span><span class="cx">         return { };
</span><span class="cx">     } , [&amp;](const RefPtr&lt;HTMLImageElement&gt;&amp; image) -&gt; ExceptionOr&lt;void&gt; {
</span><del>-        if (wouldTaintOrigin(image.get()))
-            return Exception { SECURITY_ERR };
-        if (isContextLostOrPending() || !validateHTMLImageElement(&quot;texSubImage2D&quot;, image.get()))
-            return { };
</del><ins>+        ExceptionCode ec = 0;
+        if (isContextLostOrPending() || !validateHTMLImageElement(&quot;texSubImage2D&quot;, image.get(), ec))
+            return ec ? Exception { ec } : ExceptionOr&lt;void&gt; { };
</ins><span class="cx"> 
</span><span class="cx">         RefPtr&lt;Image&gt; imageForRender = image-&gt;cachedImage()-&gt;imageForRenderer(image-&gt;renderer());
</span><span class="cx">         if (!imageForRender)
</span><span class="lines">@@ -3575,10 +3574,9 @@
</span><span class="cx">         texSubImage2DImpl(target, level, xoffset, yoffset, format, type, imageForRender.get(), GraphicsContext3D::HtmlDomImage, m_unpackFlipY, m_unpackPremultiplyAlpha);
</span><span class="cx">         return { };
</span><span class="cx">     }, [&amp;](const RefPtr&lt;HTMLCanvasElement&gt;&amp; canvas) -&gt; ExceptionOr&lt;void&gt; {
</span><del>-        if (wouldTaintOrigin(canvas.get()))
-            return Exception { SECURITY_ERR };
-        if (isContextLostOrPending() || !validateHTMLCanvasElement(&quot;texSubImage2D&quot;, canvas.get()))
-            return { };
</del><ins>+        ExceptionCode ec = 0;
+        if (isContextLostOrPending() || !validateHTMLCanvasElement(&quot;texSubImage2D&quot;, canvas.get(), ec))
+            return ec ? Exception { ec } : ExceptionOr&lt;void&gt; { };
</ins><span class="cx"> 
</span><span class="cx">         WebGLTexture* texture = validateTextureBinding(&quot;texSubImage2D&quot;, target, true);
</span><span class="cx">         if (!texture)
</span><span class="lines">@@ -3600,10 +3598,9 @@
</span><span class="cx">             texSubImage2DImpl(target, level, xoffset, yoffset, format, type, canvas-&gt;copiedImage(), GraphicsContext3D::HtmlDomCanvas, m_unpackFlipY, m_unpackPremultiplyAlpha);
</span><span class="cx">         return { };
</span><span class="cx">     }, [&amp;](const RefPtr&lt;HTMLVideoElement&gt;&amp; video) -&gt; ExceptionOr&lt;void&gt; {
</span><del>-        if (wouldTaintOrigin(video.get()))
-            return Exception { SECURITY_ERR };
-        if (isContextLostOrPending() || !validateHTMLVideoElement(&quot;texSubImage2D&quot;, video.get()))
-            return { };
</del><ins>+        ExceptionCode ec = 0;
+        if (isContextLostOrPending() || !validateHTMLVideoElement(&quot;texSubImage2D&quot;, video.get(), ec))
+            return ec ? Exception { ec } : ExceptionOr&lt;void&gt; { };
</ins><span class="cx"> 
</span><span class="cx">         WebGLTexture* texture = validateTextureBinding(&quot;texSubImage2D&quot;, target, true);
</span><span class="cx">         if (!texture)
</span><span class="lines">@@ -4064,10 +4061,9 @@
</span><span class="cx">             m_context-&gt;pixelStorei(GraphicsContext3D::UNPACK_ALIGNMENT, m_unpackAlignment);
</span><span class="cx">         return { };
</span><span class="cx">     }, [&amp;](const RefPtr&lt;HTMLImageElement&gt;&amp; image) -&gt; ExceptionOr&lt;void&gt; {
</span><del>-        if (wouldTaintOrigin(image.get()))
-            return Exception { SECURITY_ERR };
-        if (isContextLostOrPending() || !validateHTMLImageElement(&quot;texImage2D&quot;, image.get()))
-            return { };
</del><ins>+        ExceptionCode ec = 0;
+        if (isContextLostOrPending() || !validateHTMLImageElement(&quot;texImage2D&quot;, image.get(), ec))
+            return ec ? Exception { ec } : ExceptionOr&lt;void&gt; { };
</ins><span class="cx"> 
</span><span class="cx">         RefPtr&lt;Image&gt; imageForRender = image-&gt;cachedImage()-&gt;imageForRenderer(image-&gt;renderer());
</span><span class="cx">         if (!imageForRender)
</span><span class="lines">@@ -4082,10 +4078,9 @@
</span><span class="cx">         texImage2DImpl(target, level, internalformat, format, type, imageForRender.get(), GraphicsContext3D::HtmlDomImage, m_unpackFlipY, m_unpackPremultiplyAlpha);
</span><span class="cx">         return { };
</span><span class="cx">     }, [&amp;](const RefPtr&lt;HTMLCanvasElement&gt;&amp; canvas) -&gt; ExceptionOr&lt;void&gt; {
</span><del>-        if (wouldTaintOrigin(canvas.get()))
-            return Exception { SECURITY_ERR };
-        if (isContextLostOrPending() || !validateHTMLCanvasElement(&quot;texImage2D&quot;, canvas.get()) || !validateTexFunc(&quot;texImage2D&quot;, TexImage, SourceHTMLCanvasElement, target, level, internalformat, canvas-&gt;width(), canvas-&gt;height(), 0, format, type, 0, 0))
-            return { };
</del><ins>+        ExceptionCode ec = 0;
+        if (isContextLostOrPending() || !validateHTMLCanvasElement(&quot;texImage2D&quot;, canvas.get(), ec) || !validateTexFunc(&quot;texImage2D&quot;, TexImage, SourceHTMLCanvasElement, target, level, internalformat, canvas-&gt;width(), canvas-&gt;height(), 0, format, type, 0, 0))
+            return ec ? Exception { ec } : ExceptionOr&lt;void&gt; { };
</ins><span class="cx"> 
</span><span class="cx">         WebGLTexture* texture = validateTextureBinding(&quot;texImage2D&quot;, target, true);
</span><span class="cx">         // If possible, copy from the canvas element directly to the texture
</span><span class="lines">@@ -4113,11 +4108,10 @@
</span><span class="cx">             texImage2DImpl(target, level, internalformat, format, type, canvas-&gt;copiedImage(), GraphicsContext3D::HtmlDomCanvas, m_unpackFlipY, m_unpackPremultiplyAlpha);
</span><span class="cx">         return { };
</span><span class="cx">     }, [&amp;](const RefPtr&lt;HTMLVideoElement&gt;&amp; video) -&gt; ExceptionOr&lt;void&gt; {
</span><del>-        if (wouldTaintOrigin(video.get()))
-            return Exception { SECURITY_ERR };
-        if (isContextLostOrPending() || !validateHTMLVideoElement(&quot;texImage2D&quot;, video.get())
</del><ins>+        ExceptionCode ec = 0;
+        if (isContextLostOrPending() || !validateHTMLVideoElement(&quot;texImage2D&quot;, video.get(), ec)
</ins><span class="cx">             || !validateTexFunc(&quot;texImage2D&quot;, TexImage, SourceHTMLVideoElement, target, level, internalformat, video-&gt;videoWidth(), video-&gt;videoHeight(), 0, format, type, 0, 0))
</span><del>-            return { };
</del><ins>+            return ec ? Exception { ec } : ExceptionOr&lt;void&gt; { };
</ins><span class="cx"> 
</span><span class="cx">         // Go through the fast path doing a GPU-GPU textures copy without a readback to system memory if possible.
</span><span class="cx">         // Otherwise, it will fall back to the normal SW path.
</span><span class="lines">@@ -5323,7 +5317,7 @@
</span><span class="cx">     return nullptr;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool WebGLRenderingContextBase::validateHTMLImageElement(const char* functionName, HTMLImageElement* image)
</del><ins>+bool WebGLRenderingContextBase::validateHTMLImageElement(const char* functionName, HTMLImageElement* image, ExceptionCode&amp; ec)
</ins><span class="cx"> {
</span><span class="cx">     if (!image || !image-&gt;cachedImage()) {
</span><span class="cx">         synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, &quot;no image&quot;);
</span><span class="lines">@@ -5334,26 +5328,38 @@
</span><span class="cx">         synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, &quot;invalid image&quot;);
</span><span class="cx">         return false;
</span><span class="cx">     }
</span><ins>+    if (wouldTaintOrigin(image)) {
+        ec = SECURITY_ERR;
+        return false;
+    }
</ins><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool WebGLRenderingContextBase::validateHTMLCanvasElement(const char* functionName, HTMLCanvasElement* canvas)
</del><ins>+bool WebGLRenderingContextBase::validateHTMLCanvasElement(const char* functionName, HTMLCanvasElement* canvas, ExceptionCode&amp; ec)
</ins><span class="cx"> {
</span><span class="cx">     if (!canvas || !canvas-&gt;buffer()) {
</span><span class="cx">         synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, &quot;no canvas&quot;);
</span><span class="cx">         return false;
</span><span class="cx">     }
</span><ins>+    if (wouldTaintOrigin(canvas)) {
+        ec = SECURITY_ERR;
+        return false;
+    }
</ins><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(VIDEO)
</span><span class="cx"> 
</span><del>-bool WebGLRenderingContextBase::validateHTMLVideoElement(const char* functionName, HTMLVideoElement* video)
</del><ins>+bool WebGLRenderingContextBase::validateHTMLVideoElement(const char* functionName, HTMLVideoElement* video, ExceptionCode&amp; ec)
</ins><span class="cx"> {
</span><span class="cx">     if (!video || !video-&gt;videoWidth() || !video-&gt;videoHeight()) {
</span><span class="cx">         synthesizeGLError(GraphicsContext3D::INVALID_VALUE, functionName, &quot;no video&quot;);
</span><span class="cx">         return false;
</span><span class="cx">     }
</span><ins>+    if (wouldTaintOrigin(video)) {
+        ec = SECURITY_ERR;
+        return false;
+    }
</ins><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit216SourceWebCorehtmlcanvasWebGLRenderingContextBaseh"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.16/Source/WebCore/html/canvas/WebGLRenderingContextBase.h (213039 => 213040)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.16/Source/WebCore/html/canvas/WebGLRenderingContextBase.h        2017-02-27 09:03:30 UTC (rev 213039)
+++ releases/WebKitGTK/webkit-2.16/Source/WebCore/html/canvas/WebGLRenderingContextBase.h        2017-02-27 09:06:10 UTC (rev 213040)
</span><span class="lines">@@ -775,10 +775,10 @@
</span><span class="cx">     WebGLBuffer* validateBufferDataParameters(const char* functionName, GC3Denum target, GC3Denum usage);
</span><span class="cx"> 
</span><span class="cx">     // Helper function for tex{Sub}Image2D to make sure image is ready.
</span><del>-    bool validateHTMLImageElement(const char* functionName, HTMLImageElement*);
-    bool validateHTMLCanvasElement(const char* functionName, HTMLCanvasElement*);
</del><ins>+    bool validateHTMLImageElement(const char* functionName, HTMLImageElement*, ExceptionCode&amp;);
+    bool validateHTMLCanvasElement(const char* functionName, HTMLCanvasElement*, ExceptionCode&amp;);
</ins><span class="cx"> #if ENABLE(VIDEO)
</span><del>-    bool validateHTMLVideoElement(const char* functionName, HTMLVideoElement*);
</del><ins>+    bool validateHTMLVideoElement(const char* functionName, HTMLVideoElement*, ExceptionCode&amp;);
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     // Helper functions for vertexAttribNf{v}.
</span></span></pre>
</div>
</div>

</body>
</html>