Title: [226815] trunk

Diff

Modified: trunk/LayoutTests/ChangeLog (226814 => 226815)


--- trunk/LayoutTests/ChangeLog	2018-01-11 23:57:52 UTC (rev 226814)
+++ trunk/LayoutTests/ChangeLog	2018-01-12 00:03:23 UTC (rev 226815)
@@ -1,5 +1,9 @@
 2018-01-11  Dean Jackson  <[email protected]>
 
+        Rolling out 226814. It crashes on some bots.
+
+2018-01-11  Dean Jackson  <[email protected]>
+
         [WebGL] Simulated vertexAttrib0 can sometimes cause OUT_OF_MEMORY errors
         https://bugs.webkit.org/show_bug.cgi?id=181558
         <rdar://problem/36189833>

Deleted: trunk/LayoutTests/fast/canvas/webgl/simulated-vertexAttrib0-invalid-indicies-expected.txt (226814 => 226815)


--- trunk/LayoutTests/fast/canvas/webgl/simulated-vertexAttrib0-invalid-indicies-expected.txt	2018-01-11 23:57:52 UTC (rev 226814)
+++ trunk/LayoutTests/fast/canvas/webgl/simulated-vertexAttrib0-invalid-indicies-expected.txt	2018-01-12 00:03:23 UTC (rev 226815)
@@ -1,5 +0,0 @@
-CONSOLE MESSAGE: line 49: WebGL: INVALID_OPERATION: drawElements: attempt to access out of bounds arrays
-CONSOLE MESSAGE: line 59: WebGL: INVALID_OPERATION: drawElements: unable to simulate vertexAttrib0 array
-PASS: MAX_UINT index was unable to be simulated
-PASS: Huge index was unable to be simulated
-

Deleted: trunk/LayoutTests/fast/canvas/webgl/simulated-vertexAttrib0-invalid-indicies.html (226814 => 226815)


--- trunk/LayoutTests/fast/canvas/webgl/simulated-vertexAttrib0-invalid-indicies.html	2018-01-11 23:57:52 UTC (rev 226814)
+++ trunk/LayoutTests/fast/canvas/webgl/simulated-vertexAttrib0-invalid-indicies.html	2018-01-12 00:03:23 UTC (rev 226815)
@@ -1,67 +0,0 @@
-<canvas id="canvas" width="10" height="10"></canvas>
-<div></div>
-<script id='vertex-shader' type='x-shader/x-vertex'>
-attribute vec3 position;
-void main(void) {
-  gl_Position =  vec4(position, 1.0);
-}
-</script>
-<script id='fragment-shader' type='x-shader/x-fragment'>
-precision mediump float;
-void main(void) {
-    gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
-}
-</script>
-<script>
-function output(msg) {
-    document.querySelector("div").innerHTML += msg + "<br>";
-}
-
-if (window.testRunner)
-    testRunner.dumpAsText();
-
-let canvas = document.getElementById("canvas");
-let gl = canvas.getContext("webgl");
-
-gl.getExtension("OES_element_index_uint");
-
-let vShader = gl.createShader(gl.VERTEX_SHADER);
-gl.shaderSource(vShader, document.getElementById("vertex-shader").text);
-gl.compileShader(vShader);
-
-let fShader = gl.createShader(gl.FRAGMENT_SHADER);
-gl.shaderSource(fShader, document.getElementById("fragment-shader").text);
-gl.compileShader(fShader);
-program = gl.createProgram();
-gl.attachShader(program, vShader);
-gl.attachShader(program, fShader);
-gl.linkProgram(program);
-gl.useProgram(program);
-
-let buffer = gl.createBuffer();
-gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer);
-
-let data;
-
-// Maximum uint.
-data = "" Uint8Array([255, 255, 255, 255]);
-gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, data, gl.DYNAMIC_DRAW);
-gl.drawElements(gl.TRIANGLE_STRIP, 1, gl.UNSIGNED_INT,0);
-
-if (gl.getError() == gl.INVALID_OPERATION)
-    output("PASS: MAX_UINT index was unable to be simulated");
-else
-    output("FAIL: MAX_UINT index did not fail validation");
-
-// Two large numbers, one of which is smaller than 0.25 * max uint.
-data = "" Uint32Array([380000000, 4294967295]);
-gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, data, gl.DYNAMIC_DRAW);
-gl.drawElements(gl.TRIANGLE_STRIP, 1, gl.UNSIGNED_INT,0);
-
-if (gl.getError() == gl.INVALID_OPERATION)
-    output("PASS: Huge index was unable to be simulated");
-else
-    output("FAIL: Huge index did not fail validation");
-
-</script>
-

Modified: trunk/Source/WebCore/ChangeLog (226814 => 226815)


--- trunk/Source/WebCore/ChangeLog	2018-01-11 23:57:52 UTC (rev 226814)
+++ trunk/Source/WebCore/ChangeLog	2018-01-12 00:03:23 UTC (rev 226815)
@@ -1,5 +1,9 @@
 2018-01-11  Dean Jackson  <[email protected]>
 
+        Rolling out 226814. It crashes on some bots.
+
+2018-01-11  Dean Jackson  <[email protected]>
+
         [WebGL] Simulated vertexAttrib0 can sometimes cause OUT_OF_MEMORY errors
         https://bugs.webkit.org/show_bug.cgi?id=181558
         <rdar://problem/36189833>

Modified: trunk/Source/WebCore/html/canvas/WebGL2RenderingContext.cpp (226814 => 226815)


--- trunk/Source/WebCore/html/canvas/WebGL2RenderingContext.cpp	2018-01-11 23:57:52 UTC (rev 226814)
+++ trunk/Source/WebCore/html/canvas/WebGL2RenderingContext.cpp	2018-01-12 00:03:23 UTC (rev 226815)
@@ -1822,12 +1822,10 @@
 
     // The number of required elements is one more than the maximum
     // index that will be accessed.
-    Checked<unsigned, RecordOverflow> checkedNumElementsRequired = Checked<unsigned>(maxIndex.value());
-    checkedNumElementsRequired += 1;
-    if (checkedNumElementsRequired.hasOverflowed())
-        return false;
-    numElementsRequired = checkedNumElementsRequired.unsafeGet();
-    return true;
+    numElementsRequired = maxIndex.value() + 1;
+
+    // Check for overflow.
+    return numElementsRequired > 0;
 }
 
 bool WebGL2RenderingContext::validateBlendEquation(const char* functionName, GC3Denum mode)

Modified: trunk/Source/WebCore/html/canvas/WebGLRenderingContext.cpp (226814 => 226815)


--- trunk/Source/WebCore/html/canvas/WebGLRenderingContext.cpp	2018-01-11 23:57:52 UTC (rev 226814)
+++ trunk/Source/WebCore/html/canvas/WebGLRenderingContext.cpp	2018-01-12 00:03:23 UTC (rev 226815)
@@ -720,12 +720,10 @@
 
     // The number of required elements is one more than the maximum
     // index that will be accessed.
-    Checked<unsigned, RecordOverflow> checkedNumElementsRequired = Checked<unsigned>(maxIndex.value());
-    checkedNumElementsRequired += 1;
-    if (checkedNumElementsRequired.hasOverflowed())
-        return false;
-    numElementsRequired = checkedNumElementsRequired.unsafeGet();
-    return true;
+    numElementsRequired = maxIndex.value() + 1;
+
+    // Check for overflow.
+    return numElementsRequired > 0;
 }
 
 bool WebGLRenderingContext::validateBlendEquation(const char* functionName, GC3Denum mode)

Modified: trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp (226814 => 226815)


--- trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp	2018-01-11 23:57:52 UTC (rev 226814)
+++ trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp	2018-01-12 00:03:23 UTC (rev 226815)
@@ -1892,12 +1892,8 @@
     }
 
     // Then set the last index in the index array and make sure it is valid.
-    Checked<unsigned, RecordOverflow> checkedNumElementsRequired = Checked<unsigned>(lastIndex);
-    checkedNumElementsRequired += 1;
-    if (checkedNumElementsRequired.hasOverflowed())
-        return false;
-    numElementsRequired = checkedNumElementsRequired.unsafeGet();
-    return true;
+    numElementsRequired = lastIndex + 1;
+    return numElementsRequired > 0;
 }
 
 bool WebGLRenderingContextBase::validateVertexAttributes(unsigned elementCount, unsigned primitiveCount)
@@ -2119,15 +2115,8 @@
     clearIfComposited();
 
     bool vertexAttrib0Simulated = false;
-    if (!isGLES2Compliant()) {
-        auto simulateVertexAttrib0Status = simulateVertexAttrib0(first + count - 1);
-        if (!simulateVertexAttrib0Status) {
-            // We were unable to simulate the attribute buffer.
-            synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "drawArrays", "unable to simulate vertexAttrib0 array");
-            return;
-        }
-        vertexAttrib0Simulated = simulateVertexAttrib0Status.value();
-    }
+    if (!isGLES2Compliant())
+        vertexAttrib0Simulated = simulateVertexAttrib0(first + count - 1);
     bool usesFallbackTexture = false;
     if (!isGLES2NPOTStrict())
         usesFallbackTexture = checkTextureCompleteness("drawArrays", true);
@@ -2156,13 +2145,7 @@
     if (!isGLES2Compliant()) {
         if (!numElements)
             validateIndexArrayPrecise(count, type, static_cast<GC3Dintptr>(offset), numElements);
-        auto simulateVertexAttrib0Status = simulateVertexAttrib0(numElements);
-        if (!simulateVertexAttrib0Status) {
-            // We were unable to simulate the attribute buffer.
-            synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "drawElements", "unable to simulate vertexAttrib0 array");
-            return;
-        }
-        vertexAttrib0Simulated = simulateVertexAttrib0Status.value();
+        vertexAttrib0Simulated = simulateVertexAttrib0(numElements);
     }
 
     bool usesFallbackTexture = false;
@@ -5699,8 +5682,11 @@
     m_vertexAttrib0UsedBefore = false;
 }
 
-bool WebGLRenderingContextBase::validateSimulatedVertexAttrib0(GC3Duint numVertex)
+bool WebGLRenderingContextBase::validateSimulatedVertexAttrib0(GC3Dsizei numVertex)
 {
+    if (numVertex < 0)
+        return false;
+
     if (!m_currentProgram)
         return true;
 
@@ -5712,17 +5698,15 @@
     if (state.enabled)
         return true;
 
-    Checked<GC3Duint, RecordOverflow> bufferSize(numVertex);
+    Checked<GC3Dsizei, RecordOverflow> bufferSize(numVertex);
     bufferSize += 1;
-    bufferSize *= Checked<GC3Duint>(4);
-    if (bufferSize.hasOverflowed())
-        return false;
+    bufferSize *= Checked<GC3Dsizei>(4);
     Checked<GC3Dsizeiptr, RecordOverflow> bufferDataSize(bufferSize);
     bufferDataSize *= Checked<GC3Dsizeiptr>(sizeof(GC3Dfloat));
-    return !bufferDataSize.hasOverflowed() && bufferDataSize.unsafeGet() > 0;
+    return !bufferDataSize.hasOverflowed();
 }
 
-std::optional<bool> WebGLRenderingContextBase::simulateVertexAttrib0(GC3Duint numVertex)
+bool WebGLRenderingContextBase::simulateVertexAttrib0(GC3Dsizei numVertex)
 {
     if (!m_currentProgram)
         return false;
@@ -5738,21 +5722,15 @@
     m_vertexAttrib0UsedBefore = true;
     m_context->bindBuffer(GraphicsContext3D::ARRAY_BUFFER, m_vertexAttrib0Buffer->object());
 
-    Checked<GC3Duint> bufferSize(numVertex);
+    Checked<GC3Dsizei> bufferSize(numVertex);
     bufferSize += 1;
-    bufferSize *= Checked<GC3Duint>(4);
+    bufferSize *= Checked<GC3Dsizei>(4);
 
     Checked<GC3Dsizeiptr> bufferDataSize(bufferSize);
     bufferDataSize *= Checked<GC3Dsizeiptr>(sizeof(GC3Dfloat));
 
     if (bufferDataSize.unsafeGet() > m_vertexAttrib0BufferSize) {
-        m_context->moveErrorsToSyntheticErrorList();
         m_context->bufferData(GraphicsContext3D::ARRAY_BUFFER, bufferDataSize.unsafeGet(), 0, GraphicsContext3D::DYNAMIC_DRAW);
-        if (m_context->getError() != GraphicsContext3D::NO_ERROR) {
-            // We were unable to create a buffer.
-            m_vertexAttrib0UsedBefore = false;
-            return std::nullopt;
-        }
         m_vertexAttrib0BufferSize = bufferDataSize.unsafeGet();
         m_forceAttrib0BufferRefill = true;
     }
@@ -5767,7 +5745,7 @@
             || attribValue.value[3] != m_vertexAttrib0BufferValue[3])) {
 
         auto bufferData = std::make_unique<GC3Dfloat[]>(bufferSize.unsafeGet());
-        for (GC3Duint ii = 0; ii < numVertex + 1; ++ii) {
+        for (GC3Dsizei ii = 0; ii < numVertex + 1; ++ii) {
             bufferData[ii * 4] = attribValue.value[0];
             bufferData[ii * 4 + 1] = attribValue.value[1];
             bufferData[ii * 4 + 2] = attribValue.value[2];
@@ -6070,15 +6048,8 @@
     clearIfComposited();
 
     bool vertexAttrib0Simulated = false;
-    if (!isGLES2Compliant()) {
-        auto simulateVertexAttrib0Status = simulateVertexAttrib0(first + count - 1);
-        if (!simulateVertexAttrib0Status) {
-            // We were unable to simulate the attribute buffer.
-            synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "drawArraysInstanced", "unable to simulate vertexAttrib0 array");
-            return;
-        }
-        vertexAttrib0Simulated = simulateVertexAttrib0Status.value();
-    }
+    if (!isGLES2Compliant())
+        vertexAttrib0Simulated = simulateVertexAttrib0(first + count - 1);
     if (!isGLES2NPOTStrict())
         checkTextureCompleteness("drawArraysInstanced", true);
 
@@ -6108,13 +6079,7 @@
     if (!isGLES2Compliant()) {
         if (!numElements)
             validateIndexArrayPrecise(count, type, static_cast<GC3Dintptr>(offset), numElements);
-        auto simulateVertexAttrib0Status = simulateVertexAttrib0(numElements);
-        if (!simulateVertexAttrib0Status) {
-            // We were unable to simulate the attribute buffer.
-            synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "drawArraysInstanced", "unable to simulate vertexAttrib0 array");
-            return;
-        }
-        vertexAttrib0Simulated = simulateVertexAttrib0Status.value();
+        vertexAttrib0Simulated = simulateVertexAttrib0(numElements);
     }
     if (!isGLES2NPOTStrict())
         checkTextureCompleteness("drawElementsInstanced", true);

Modified: trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.h (226814 => 226815)


--- trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.h	2018-01-11 23:57:52 UTC (rev 226814)
+++ trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.h	2018-01-12 00:03:23 UTC (rev 226815)
@@ -792,8 +792,8 @@
 
     // Helpers for simulating vertexAttrib0.
     void initVertexAttrib0();
-    std::optional<bool> simulateVertexAttrib0(GC3Duint numVertex);
-    bool validateSimulatedVertexAttrib0(GC3Duint numVertex);
+    bool simulateVertexAttrib0(GC3Dsizei numVertex);
+    bool validateSimulatedVertexAttrib0(GC3Dsizei numVertex);
     void restoreStatesAfterVertexAttrib0Simulation();
 
     void dispatchContextLostEvent();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to