Title: [289651] branches/safari-613.1.17.0-branch/Source/ThirdParty/ANGLE

Diff

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


--- branches/safari-613.1.17.0-branch/Source/ThirdParty/ANGLE/ChangeLog	2022-02-11 19:58:46 UTC (rev 289650)
+++ branches/safari-613.1.17.0-branch/Source/ThirdParty/ANGLE/ChangeLog	2022-02-11 19:58:49 UTC (rev 289651)
@@ -1,3 +1,25 @@
+2022-02-11  Alan Coon  <[email protected]>
+
+        Apply patch. rdar://problem/87136345
+
+    2022-02-11  Kyle Piddington  <[email protected]>
+
+            Cocoa2d-HTLM5 game apepars to use wrong vertex buffer data
+            https://bugs.webkit.org/show_bug.cgi?id=236427
+            <rdar://problem/87136345>
+
+            Reviewed by Kimmo Kinnunen.
+
+            Render encoder appears to carry stale state when a vertex array's element
+            buffer is updated, but no other parts of the buffer are updated. Reassign
+            vertex buffer bindings in this case, which clears up corruption
+            (Squished rendering elements, incorrect UV's)
+
+            * src/libANGLE/renderer/metal/VertexArrayMtl.h:
+            * src/libANGLE/renderer/metal/VertexArrayMtl.mm:
+            (rx::VertexArrayMtl::syncState):
+            (rx::VertexArrayMtl::setupDraw):
+
 2022-01-24  Alan Coon  <[email protected]>
 
         Cherry-pick r288105. rdar://problem/87656387

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


--- branches/safari-613.1.17.0-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/VertexArrayMtl.h	2022-02-11 19:58:46 UTC (rev 289650)
+++ branches/safari-613.1.17.0-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/VertexArrayMtl.h	2022-02-11 19:58:49 UTC (rev 289651)
@@ -151,7 +151,7 @@
     mtl::BufferPool mDynamicIndexData;
 
     std::vector<uint32_t> mEmulatedInstanceAttribs;
-
+    bool mElementArrayDirty = true;
     bool mVertexArrayDirty = true;
 };
 }  // namespace rx

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


--- branches/safari-613.1.17.0-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/VertexArrayMtl.mm	2022-02-11 19:58:46 UTC (rev 289650)
+++ branches/safari-613.1.17.0-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/VertexArrayMtl.mm	2022-02-11 19:58:49 UTC (rev 289651)
@@ -273,6 +273,7 @@
             case gl::VertexArray::DIRTY_BIT_ELEMENT_ARRAY_BUFFER:
             case gl::VertexArray::DIRTY_BIT_ELEMENT_ARRAY_BUFFER_DATA:
             {
+                mElementArrayDirty = true;
                 break;
             }
 
@@ -475,23 +476,38 @@
                 }
 
                 desc.layouts[bufferIdx].stride = mCurrentArrayBufferStrides[v];
-
-                if (mCurrentArrayBuffers[v])
-                {
-                    cmdEncoder->setVertexBuffer(mCurrentArrayBuffers[v]->getCurrentBuffer(),
-                                                bufferOffset, bufferIdx);
-                }
-                else
-                {
-                    // No buffer specified, use the client memory directly as inline constant data
-                    ASSERT(mCurrentArrayInlineDataSizes[v] <= mInlineDataMaxSize);
-                    cmdEncoder->setVertexBytes(mCurrentArrayInlineDataPointers[v],
-                                               mCurrentArrayInlineDataSizes[v], bufferIdx);
-                }
             }
         }  // for (v)
     }
 
+    if(dirty || mElementArrayDirty)
+    {
+        mElementArrayDirty = false;
+        const gl::ProgramExecutable *executable = glContext->getState().getProgramExecutable();
+        const gl::AttributesMask &programActiveAttribsMask =
+                executable->getActiveAttribLocationsMask();
+
+        for (uint32_t v = 0; v < mtl::kMaxVertexAttribs; ++v)
+        {
+            uint32_t bufferIdx    = mtl::kVboBindingIndexStart + v;
+            uint32_t bufferOffset = static_cast<uint32_t>(mCurrentArrayBufferOffsets[v]);
+            if (mCurrentArrayBuffers[v])
+            {
+                cmdEncoder->setVertexBuffer(mCurrentArrayBuffers[v]->getCurrentBuffer(),
+                                            bufferOffset, bufferIdx);
+            }
+            else
+            {
+                // No buffer specified, use the client memory directly as inline constant data
+                ASSERT(mCurrentArrayInlineDataSizes[v] <= mInlineDataMaxSize);
+                cmdEncoder->setVertexBytes(mCurrentArrayInlineDataPointers[v],
+                                           mCurrentArrayInlineDataSizes[v], bufferIdx);
+            }
+
+        }
+    }
+
+
     *vertexDescChanged = dirty;
 
     return angle::Result::Continue;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to