Title: [289664] trunk/Source/ThirdParty/ANGLE
- Revision
- 289664
- Author
- [email protected]
- Date
- 2022-02-11 13:00:43 -0800 (Fri, 11 Feb 2022)
Log Message
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):
Modified Paths
Diff
Modified: trunk/Source/ThirdParty/ANGLE/ChangeLog (289663 => 289664)
--- trunk/Source/ThirdParty/ANGLE/ChangeLog 2022-02-11 20:35:18 UTC (rev 289663)
+++ trunk/Source/ThirdParty/ANGLE/ChangeLog 2022-02-11 21:00:43 UTC (rev 289664)
@@ -1,3 +1,21 @@
+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-02-03 Michael Saboff <[email protected]>
WebKit projects have incorrect install name for the frameworks for Catalyst builds with the system content path
Modified: trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/VertexArrayMtl.h (289663 => 289664)
--- trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/VertexArrayMtl.h 2022-02-11 20:35:18 UTC (rev 289663)
+++ trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/VertexArrayMtl.h 2022-02-11 21:00:43 UTC (rev 289664)
@@ -151,7 +151,7 @@
mtl::BufferPool mDynamicIndexData;
std::vector<uint32_t> mEmulatedInstanceAttribs;
-
+ bool mElementArrayDirty = true;
bool mVertexArrayDirty = true;
};
} // namespace rx
Modified: trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/VertexArrayMtl.mm (289663 => 289664)
--- trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/VertexArrayMtl.mm 2022-02-11 20:35:18 UTC (rev 289663)
+++ trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/VertexArrayMtl.mm 2022-02-11 21:00:43 UTC (rev 289664)
@@ -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