Title: [275074] trunk/Source/ThirdParty/ANGLE
- Revision
- 275074
- Author
- [email protected]
- Date
- 2021-03-25 20:13:09 -0700 (Thu, 25 Mar 2021)
Log Message
ANGLE Metal crash ASAN webgl/1.0.3/conformance/misc/object-deletion-behaviour.html
https://bugs.webkit.org/show_bug.cgi?id=223739
Patch by Kyle Piddington <[email protected]> on 2021-03-25
Reviewed by Dean Jackson.
Previously, ANGLE would try to read color attachments off of the
cached render targets. However, since validation happens before
state sync, the cached render targets may be out of date.
For non-surface backed render targets, we instead get a fresh copy
of the render target when determening the native pixel format.
* src/libANGLE/renderer/metal/FrameBufferMtl.h:
* src/libANGLE/renderer/metal/FrameBufferMtl.mm:
(rx::FramebufferMtl::getImplementationColorReadFormat const):
(rx::FramebufferMtl::getColorReadRenderTargetNoCache const):
Modified Paths
Diff
Modified: trunk/Source/ThirdParty/ANGLE/ChangeLog (275073 => 275074)
--- trunk/Source/ThirdParty/ANGLE/ChangeLog 2021-03-26 03:09:08 UTC (rev 275073)
+++ trunk/Source/ThirdParty/ANGLE/ChangeLog 2021-03-26 03:13:09 UTC (rev 275074)
@@ -1,5 +1,25 @@
2021-03-25 Kyle Piddington <[email protected]>
+ ANGLE Metal crash ASAN webgl/1.0.3/conformance/misc/object-deletion-behaviour.html
+ https://bugs.webkit.org/show_bug.cgi?id=223739
+
+ Reviewed by Dean Jackson.
+
+ Previously, ANGLE would try to read color attachments off of the
+ cached render targets. However, since validation happens before
+ state sync, the cached render targets may be out of date.
+
+ For non-surface backed render targets, we instead get a fresh copy
+ of the render target when determening the native pixel format.
+
+ * src/libANGLE/renderer/metal/FrameBufferMtl.h:
+ * src/libANGLE/renderer/metal/FrameBufferMtl.mm:
+ (rx::FramebufferMtl::getImplementationColorReadFormat const):
+ (rx::FramebufferMtl::getColorReadRenderTargetNoCache const):
+
+
+2021-03-25 Kyle Piddington <[email protected]>
+
[Metal ANGLE] Add CPU mipmap generation for workaround on Intel devices.
https://bugs.webkit.org/show_bug.cgi?id=223778
Modified: trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/FrameBufferMtl.h (275073 => 275074)
--- trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/FrameBufferMtl.h 2021-03-26 03:09:08 UTC (rev 275073)
+++ trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/FrameBufferMtl.h 2021-03-26 03:13:09 UTC (rev 275074)
@@ -206,6 +206,8 @@
uint32_t dstBufferRowPitch,
const mtl::BufferRef *dstBuffer) const;
+ RenderTargetMtl * getColorReadRenderTargetNoCache(const gl::Context *context) const;
+
// NOTE: we cannot use RenderTargetCache here because it doesn't support separate
// depth & stencil attachments as of now. Separate depth & stencil could be useful to
// save spaces on iOS devices. See doc/PackedDepthStencilSupport.md.
Modified: trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/FrameBufferMtl.mm (275073 => 275074)
--- trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/FrameBufferMtl.mm 2021-03-26 03:09:08 UTC (rev 275073)
+++ trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/FrameBufferMtl.mm 2021-03-26 03:13:09 UTC (rev 275074)
@@ -202,7 +202,7 @@
const gl::InternalFormat &FramebufferMtl::getImplementationColorReadFormat(
const gl::Context *context) const
{
- return GetReadAttachmentInfo(context, getColorReadRenderTarget(context));
+ return GetReadAttachmentInfo(context, getColorReadRenderTargetNoCache(context));
}
angle::Result FramebufferMtl::readPixels(const gl::Context *context,
@@ -641,6 +641,30 @@
return mColorRenderTargets[mState.getReadIndex()];
}
+RenderTargetMtl *FramebufferMtl::getColorReadRenderTargetNoCache(const gl::Context *context) const
+{
+ if (mState.getReadIndex() >= mColorRenderTargets.size())
+ {
+ return nullptr;
+ }
+
+ if (mBackbuffer)
+ {
+ //If we have a backbuffer/window surface, we can take the old path here and return
+ //the cached color render target.
+ return getColorReadRenderTarget(context);
+ }
+ //If we have no backbuffer, get the attachment from state color attachments, as it may have changed before syncing.
+ const gl::FramebufferAttachment * attachment = mState.getColorAttachment(mState.getReadIndex());
+ RenderTargetMtl * currentTarget = nullptr;
+ if(attachment->getRenderTarget(context, attachment->getRenderToTextureSamples(),
+ ¤tTarget) == angle::Result::Stop)
+ {
+ return nullptr;
+ }
+ return currentTarget;
+}
+
int FramebufferMtl::getSamples() const
{
return mRenderPassDesc.sampleCount;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes