Title: [277143] trunk/Source/ThirdParty/ANGLE
- Revision
- 277143
- Author
- [email protected]
- Date
- 2021-05-06 17:17:47 -0700 (Thu, 06 May 2021)
Log Message
[Metal ANGLE] Only clear dirty state bits after all state has been successfully set
https://bugs.webkit.org/show_bug.cgi?id=225468
<rdar://77066752>
When running in release, if any ANGLE calls fail, we eventually return to this part of the code.
We can be left with an incomplete state, where we have an incomplete program or attachment,
but a 'clean' state. This can lead to errors such as setting nil render pipeline states, leading to
crashes.
To mitigate this, hold off on setting state bits until we've completly set up a program.
Reviewed by Dean Jackson.
* src/libANGLE/renderer/metal/ContextMtl.mm:
(rx::ContextMtl::setupDraw):
* src/libANGLE/renderer/metal/ProgramMtl.mm:
Modified Paths
Diff
Modified: trunk/Source/ThirdParty/ANGLE/ChangeLog (277142 => 277143)
--- trunk/Source/ThirdParty/ANGLE/ChangeLog 2021-05-07 00:17:05 UTC (rev 277142)
+++ trunk/Source/ThirdParty/ANGLE/ChangeLog 2021-05-07 00:17:47 UTC (rev 277143)
@@ -1,3 +1,22 @@
+2021-05-06 Kyle Piddington <[email protected]>
+
+ [Metal ANGLE] Only clear dirty state bits after all state has been successfully set
+ https://bugs.webkit.org/show_bug.cgi?id=225468
+ <rdar://77066752>
+
+ When running in release, if any ANGLE calls fail, we eventually return to this part of the code.
+ We can be left with an incomplete state, where we have an incomplete program or attachment,
+ but a 'clean' state. This can lead to errors such as setting nil render pipeline states, leading to
+ crashes.
+
+ To mitigate this, hold off on setting state bits until we've completly set up a program.
+
+ Reviewed by Dean Jackson.
+
+ * src/libANGLE/renderer/metal/ContextMtl.mm:
+ (rx::ContextMtl::setupDraw):
+ * src/libANGLE/renderer/metal/ProgramMtl.mm:
+
2021-05-03 Kyle Piddington <[email protected]>
[Metal ANGLE]: Fix conversions tests and remove failing test expectations
Modified: trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/ContextMtl.mm (277142 => 277143)
--- trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/ContextMtl.mm 2021-05-07 00:17:05 UTC (rev 277142)
+++ trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/ContextMtl.mm 2021-05-07 00:17:47 UTC (rev 277143)
@@ -2167,8 +2167,8 @@
}
}
- mDirtyBits.reset();
+
if (transformFeedbackDraw)
{
mtl::RenderUtils &utils = getDisplay()->getUtils();
@@ -2189,7 +2189,7 @@
invalidateState(context);
ANGLE_TRY(setupDraw(context, mode, firstVertex, vertexOrIndexCount, instances, indexTypeOrNone, indices, transformFeedbackDraw));
}
-
+ mDirtyBits.reset();
return angle::Result::Continue;
}
Modified: trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/ProgramMtl.mm (277142 => 277143)
--- trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/ProgramMtl.mm 2021-05-07 00:17:05 UTC (rev 277142)
+++ trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/ProgramMtl.mm 2021-05-07 00:17:47 UTC (rev 277143)
@@ -195,7 +195,7 @@
{
NSError *nsErr = nil;
- id<MTLFunction> mtlShader;
+ id<MTLFunction> mtlShader = nullptr;
if (funcConstants)
{
mtlShader = [shaderLib newFunctionWithName:SHADER_ENTRY_NAME
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes