Title: [290141] branches/safari-613.1.17.0-branch
Revision
290141
Author
alanc...@apple.com
Date
2022-02-18 10:17:46 -0800 (Fri, 18 Feb 2022)

Log Message

Cherry-pick r290087. rdar://problem/88713302

    Source/ThirdParty/ANGLE:
    Metal ANGLE: vertex array does not correctly observe contents of data buffers
    https://bugs.webkit.org/show_bug.cgi?id=236733
    <rdar://problem/88713302>
    <rdar://problem/88499073>

    Patch by Kyle Piddington <kpidding...@apple.com> on 2022-02-17
    Reviewed by Dean Jackson.

    Similar to previous bug (236427), we were not correctly observing changes to the
    vertex buffer data. This caused us to miss rebinding vertex buffers
    when data was updated without causing conversion

    * src/libANGLE/renderer/metal/VertexArrayMtl.h:
    * src/libANGLE/renderer/metal/VertexArrayMtl.mm:
    (rx::VertexArrayMtl::syncState):
    (rx::VertexArrayMtl::setupDraw):
    (rx::VertexArrayMtl::syncDirtyAttrib):

    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@290087 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Modified Paths

Added Paths

Diff

Modified: branches/safari-613.1.17.0-branch/LayoutTests/ChangeLog (290140 => 290141)


--- branches/safari-613.1.17.0-branch/LayoutTests/ChangeLog	2022-02-18 18:15:16 UTC (rev 290140)
+++ branches/safari-613.1.17.0-branch/LayoutTests/ChangeLog	2022-02-18 18:17:46 UTC (rev 290141)
@@ -1,30 +1,71 @@
-2022-02-17  Russell Epstein  <repst...@apple.com>
+2022-02-18  Russell Epstein  <repst...@apple.com>
 
-        Cherry-pick r289693. rdar://problem/88264857
+        Cherry-pick r290087. rdar://problem/88713302
 
-    Suppress style invalidation when matching :checked
-    https://bugs.webkit.org/show_bug.cgi?id=235910
+    Source/ThirdParty/ANGLE:
+    Metal ANGLE: vertex array does not correctly observe contents of data buffers
+    https://bugs.webkit.org/show_bug.cgi?id=236733
+    <rdar://problem/88713302>
+    <rdar://problem/88499073>
     
-    Patch by Rob Buis <rb...@igalia.com> on 2022-02-12
-    Reviewed by Antti Koivisto.
+    Patch by Kyle Piddington <kpidding...@apple.com> on 2022-02-17
+    Reviewed by Dean Jackson.
     
-    Source/WebCore:
+    Similar to previous bug (236427), we were not correctly observing changes to the
+    vertex buffer data. This caused us to miss rebinding vertex buffers
+    when data was updated without causing conversion
     
-    Suppress style invalidation when matching :checked for option elements.
+    * src/libANGLE/renderer/metal/VertexArrayMtl.h:
+    * src/libANGLE/renderer/metal/VertexArrayMtl.mm:
+    (rx::VertexArrayMtl::syncState):
+    (rx::VertexArrayMtl::setupDraw):
+    (rx::VertexArrayMtl::syncDirtyAttrib):
     
-    Test: fast/selectors/has-select-option-crash.html
-    
-    * css/SelectorCheckerTestFunctions.h:
-    (WebCore::isChecked):
-    * html/HTMLOptionElement.cpp:
-    (WebCore::HTMLOptionElement::selected const):
-    (WebCore::HTMLOptionElement::setSelectedState):
-    * html/HTMLOptionElement.h:
-    * html/HTMLSelectElement.cpp:
-    (WebCore::HTMLSelectElement::updateListItemSelectedStates):
-    (WebCore::HTMLSelectElement::recalcListItems const):
-    * html/HTMLSelectElement.h:
-    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@290087 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2022-02-17  Russell Epstein  <repst...@apple.com>
+
+            Cherry-pick r289693. rdar://problem/88264857
+
+        Suppress style invalidation when matching :checked
+        https://bugs.webkit.org/show_bug.cgi?id=235910
+
+        Patch by Rob Buis <rb...@igalia.com> on 2022-02-12
+        Reviewed by Antti Koivisto.
+
+        Source/WebCore:
+
+        Suppress style invalidation when matching :checked for option elements.
+
+        Test: fast/selectors/has-select-option-crash.html
+
+        * css/SelectorCheckerTestFunctions.h:
+        (WebCore::isChecked):
+        * html/HTMLOptionElement.cpp:
+        (WebCore::HTMLOptionElement::selected const):
+        (WebCore::HTMLOptionElement::setSelectedState):
+        * html/HTMLOptionElement.h:
+        * html/HTMLSelectElement.cpp:
+        (WebCore::HTMLSelectElement::updateListItemSelectedStates):
+        (WebCore::HTMLSelectElement::recalcListItems const):
+        * html/HTMLSelectElement.h:
+
+2022-02-17  Kyle Piddington  <kpidding...@apple.com>
+
+        Metal ANGLE: vertex array does not correctly observe contents of data buffers
+        https://bugs.webkit.org/show_bug.cgi?id=236733
+        <rdar://problem/88713302>
+        <rdar://problem/88499073>
+
+        Reviewed by Dean Jackson.
+
+        Similar to previous bug (236427), we were not correctly observing changes to the
+        vertex buffer data. This caused us to miss rebinding vertex buffers
+        when data was updated without causing conversion
+
+        * fast/canvas/webgl/buffer-data-subdata-dynamic-buffer.html: Added.
+        * fast/canvas/webgl/buffer-data-subdata-dynamic-buffer-expected.txt: Added.
+
     LayoutTests:
     
     * fast/selectors/has-select-option-crash-expected.txt: Added.

Added: branches/safari-613.1.17.0-branch/LayoutTests/fast/canvas/webgl/buffer-data-subdata-dynamic-buffer-expected.txt (0 => 290141)


--- branches/safari-613.1.17.0-branch/LayoutTests/fast/canvas/webgl/buffer-data-subdata-dynamic-buffer-expected.txt	                        (rev 0)
+++ branches/safari-613.1.17.0-branch/LayoutTests/fast/canvas/webgl/buffer-data-subdata-dynamic-buffer-expected.txt	2022-02-18 18:17:46 UTC (rev 290141)
@@ -0,0 +1,14 @@
+ Checks that update-draws of bufferSubData are respected
+
+PASS gl.getError() is gl.NO_ERROR
+PASS gl.getError() is gl.NO_ERROR
+PASS gl.getError() is gl.NO_ERROR
+PASS gl.getError() is gl.NO_ERROR
+PASS top-left of canvas should be green.
+PASS bottom-left of canvas should be green.
+PASS Top-right of canvas should be green.
+PASS bottom-right of canvas should be green.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: branches/safari-613.1.17.0-branch/LayoutTests/fast/canvas/webgl/buffer-data-subdata-dynamic-buffer.html (0 => 290141)


--- branches/safari-613.1.17.0-branch/LayoutTests/fast/canvas/webgl/buffer-data-subdata-dynamic-buffer.html	                        (rev 0)
+++ branches/safari-613.1.17.0-branch/LayoutTests/fast/canvas/webgl/buffer-data-subdata-dynamic-buffer.html	2022-02-18 18:17:46 UTC (rev 290141)
@@ -0,0 +1,96 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+<script src="" </script>
+</head>
+<body>
+<canvas id="example" width="40" height="40" style="width: 40px; height: 40px;"></canvas>
+<div id="description"></div>
+<div id="console"></div>
+<script id="vshader" type="x-shader/x-vertex">
+#ifdef GL_ES
+precision highp float;
+#endif
+attribute vec4 vPosition;
+void main()
+{
+    gl_Position = vPosition;
+}
+</script>
+
+<script id="fshader" type="x-shader/x-fragment">
+#ifdef GL_ES
+precision highp float;
+#endif
+void main()
+{
+    gl_FragColor = vec4(0, 1, 0, 1);
+}
+</script>
+
+<script>
+function init()
+{
+    if (window.initNonKhronosFramework)
+        window.initNonKhronosFramework(false);
+
+    debug("Checks that update-draws of bufferSubData are respected");
+    debug("");
+
+    if (window.internals)
+        internals.settings.setWebGL2Enabled(true);
+    gl = initWebGL("example", "vshader", "fshader", [ "vPosition", "index" ],
+                   [ 1, 1, 1, 1 ], 1, null, true);
+
+    gl.disable(gl.DEPTH_TEST);
+    gl.disable(gl.BLEND);
+
+     // Vertex buffer data lower left triangle
+    // 2     
+    //
+    // o    1
+    var vertexData1 = new Float32Array([-1, -1, 1, -1, -1, 1]);
+    //Vertex buffer data upper right triangle
+    // 2      1
+    //
+    //        0
+    var vertexData2 = new Float32Array([ 1., -1., 1., 1., -1., 1.]);
+    
+    var vertexObject = gl.createBuffer();
+    gl.bindBuffer(gl.ARRAY_BUFFER, vertexObject);
+    shouldBe("gl.getError()", "gl.NO_ERROR")
+    gl.bufferData(gl.ARRAY_BUFFER, vertexData1, gl.DYNAMIC_DRAW);
+    shouldBe("gl.getError()", "gl.NO_ERROR");
+    gl.enableVertexAttribArray(0);
+    gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
+    shouldBe("gl.getError()", "gl.NO_ERROR");
+    gl.drawArrays(gl.TRIANGLES, 0, 3);
+    gl.bufferData(gl.ARRAY_BUFFER, vertexData2, gl.DYNAMIC_DRAW);
+    shouldBe("gl.getError()", "gl.NO_ERROR");
+    gl.drawArrays(gl.TRIANGLES, 0, 3);
+    gl.flush();
+    checkGreenValue(0, 0, 255, "top-left of canvas should be green.");
+    checkGreenValue(0, 39, 255, "bottom-left of canvas should be green.");
+    checkGreenValue(39, 0, 255, "Top-right of canvas should be green.");
+    checkGreenValue(39, 39, 255, "bottom-right of canvas should be green.");
+    gl.deleteBuffer(vertexObject);
+
+    function checkGreenValue(x, y, value, msg) {
+        
+        var buf = new Uint8Array(4);
+        gl.readPixels(x, y, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, buf);
+        if (buf[1] != value || buf[3] != 255) {
+            debug('expected: green channel should = ' + value + ' but was = ' + buf[2] + '.');
+            testFailed(msg);
+            return;
+        }
+        testPassed(msg);
+    }
+}
+
+init();
+</script>
+<script src=""
+</body>
+</html>
\ No newline at end of file

Modified: branches/safari-613.1.17.0-branch/Source/ThirdParty/ANGLE/ChangeLog (290140 => 290141)


--- branches/safari-613.1.17.0-branch/Source/ThirdParty/ANGLE/ChangeLog	2022-02-18 18:15:16 UTC (rev 290140)
+++ branches/safari-613.1.17.0-branch/Source/ThirdParty/ANGLE/ChangeLog	2022-02-18 18:17:46 UTC (rev 290141)
@@ -1,3 +1,47 @@
+2022-02-18  Russell Epstein  <repst...@apple.com>
+
+        Cherry-pick r290087. rdar://problem/88713302
+
+    Source/ThirdParty/ANGLE:
+    Metal ANGLE: vertex array does not correctly observe contents of data buffers
+    https://bugs.webkit.org/show_bug.cgi?id=236733
+    <rdar://problem/88713302>
+    <rdar://problem/88499073>
+    
+    Patch by Kyle Piddington <kpidding...@apple.com> on 2022-02-17
+    Reviewed by Dean Jackson.
+    
+    Similar to previous bug (236427), we were not correctly observing changes to the
+    vertex buffer data. This caused us to miss rebinding vertex buffers
+    when data was updated without causing conversion
+    
+    * src/libANGLE/renderer/metal/VertexArrayMtl.h:
+    * src/libANGLE/renderer/metal/VertexArrayMtl.mm:
+    (rx::VertexArrayMtl::syncState):
+    (rx::VertexArrayMtl::setupDraw):
+    (rx::VertexArrayMtl::syncDirtyAttrib):
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@290087 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2022-02-17  Kyle Piddington  <kpidding...@apple.com>
+
+            Metal ANGLE: vertex array does not correctly observe contents of data buffers
+            https://bugs.webkit.org/show_bug.cgi?id=236733
+            <rdar://problem/88713302>
+            <rdar://problem/88499073>
+
+            Reviewed by Dean Jackson.
+
+            Similar to previous bug (236427), we were not correctly observing changes to the
+            vertex buffer data. This caused us to miss rebinding vertex buffers
+            when data was updated without causing conversion
+
+            * src/libANGLE/renderer/metal/VertexArrayMtl.h:
+            * src/libANGLE/renderer/metal/VertexArrayMtl.mm:
+            (rx::VertexArrayMtl::syncState):
+            (rx::VertexArrayMtl::setupDraw):
+            (rx::VertexArrayMtl::syncDirtyAttrib):
+
 2022-02-17  Russell Epstein  <repst...@apple.com>
 
         Cherry-pick r290011. rdar://problem/89024095

Modified: branches/safari-613.1.17.0-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/VertexArrayMtl.h (290140 => 290141)


--- branches/safari-613.1.17.0-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/VertexArrayMtl.h	2022-02-18 18:15:16 UTC (rev 290140)
+++ branches/safari-613.1.17.0-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/VertexArrayMtl.h	2022-02-18 18:17:46 UTC (rev 290141)
@@ -151,8 +151,9 @@
     mtl::BufferPool mDynamicIndexData;
 
     std::vector<uint32_t> mEmulatedInstanceAttribs;
-    bool mElementArrayDirty = true;
+
     bool mVertexArrayDirty = true;
+    bool mVertexDataDirty = true;
 };
 }  // namespace rx
 

Modified: branches/safari-613.1.17.0-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/VertexArrayMtl.mm (290140 => 290141)


--- branches/safari-613.1.17.0-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/VertexArrayMtl.mm	2022-02-18 18:15:16 UTC (rev 290140)
+++ branches/safari-613.1.17.0-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/VertexArrayMtl.mm	2022-02-18 18:17:46 UTC (rev 290141)
@@ -273,7 +273,7 @@
             case gl::VertexArray::DIRTY_BIT_ELEMENT_ARRAY_BUFFER:
             case gl::VertexArray::DIRTY_BIT_ELEMENT_ARRAY_BUFFER_DATA:
             {
-                mElementArrayDirty = true;
+                mVertexDataDirty = true;
                 break;
             }
 
@@ -301,7 +301,7 @@
     case gl::VertexArray::DIRTY_BIT_BUFFER_DATA_0 + INDEX:                                        \
         ANGLE_TRY(syncDirtyAttrib(context, attribs[INDEX], bindings[attribs[INDEX].bindingIndex], \
                                   INDEX));                                                        \
-        mVertexArrayDirty = true;                                                                 \
+        mVertexDataDirty = true;                                                                 \
         break;
 
                 ANGLE_VERTEX_INDEX_CASES(ANGLE_VERTEX_DIRTY_BUFFER_DATA_FUNC)
@@ -480,9 +480,9 @@
         }  // for (v)
     }
 
-    if(dirty || mElementArrayDirty)
+    if(dirty || mVertexDataDirty)
     {
-        mElementArrayDirty = false;
+        mVertexDataDirty = false;
         const gl::ProgramExecutable *executable = glContext->getState().getProgramExecutable();
         const gl::AttributesMask &programActiveAttribsMask =
                 executable->getActiveAttribLocationsMask();
@@ -652,6 +652,7 @@
         if (bufferGL)
         {
             BufferMtl *bufferMtl = mtl::GetImpl(bufferGL);
+            mContentsObservers->enableForBuffer(bufferGL, static_cast<uint32_t>(attribIndex));
             bool needConversion =
                 format.actualFormatId != format.intendedFormatId ||
                 (binding.getOffset() % format.actualAngleFormat().pixelBytes) != 0 ||
@@ -661,12 +662,10 @@
 
             if (needConversion)
             {
-                mContentsObservers->enableForBuffer(bufferGL, static_cast<uint32_t>(attribIndex));
                 ANGLE_TRY(convertVertexBuffer(glContext, bufferMtl, binding, attribIndex, format));
             }
             else
             {
-                mContentsObservers->disableForBuffer(bufferGL, static_cast<uint32_t>(attribIndex));
                 mCurrentArrayBuffers[attribIndex]       = bufferMtl;
                 mCurrentArrayBufferOffsets[attribIndex] = binding.getOffset();
                 mCurrentArrayBufferStrides[attribIndex] = binding.getStride();
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to