Diff
Modified: trunk/Source/ThirdParty/ANGLE/ChangeLog (286322 => 286323)
--- trunk/Source/ThirdParty/ANGLE/ChangeLog 2021-11-30 21:31:02 UTC (rev 286322)
+++ trunk/Source/ThirdParty/ANGLE/ChangeLog 2021-11-30 21:35:25 UTC (rev 286323)
@@ -1,3 +1,25 @@
+2021-11-30 Kyle Piddington <[email protected]>
+
+ Hardware PCF filtering does not work on iOS 15 when using WebGL2
+ https://bugs.webkit.org/show_bug.cgi?id=232071
+
+ Lower restrictions on sampling D32F formats, and allow filtering
+ of Depth16F on iOS hardware, as it was previously restricted.
+
+ Reviewed by Kenneth Russell.
+
+ * include/platform/FeaturesMtl.h:
+ * src/libANGLE/renderer/metal/DisplayMtl.h:
+ * src/libANGLE/renderer/metal/DisplayMtl.mm:
+ (rx::DisplayMtl::initializeFeatures):
+ (rx::DisplayMtl::supports32BitFloatFiltering const):
+ (rx::DisplayMtl::supportsDepth24Stencil8PixelFormat const):
+ * src/libANGLE/renderer/metal/TextureMtl.mm:
+ (rx::TextureMtl::ensureSamplerStateCreated):
+ * src/libANGLE/renderer/metal/mtl_format_map.json:
+ * src/libANGLE/renderer/metal/mtl_format_table_autogen.mm:
+ (rx::mtl::FormatTable::initNativeFormatCapsAutogen):
+
2021-11-17 Dean Jackson <[email protected]>
ANGLE build failure - sprintf is deprecated
Modified: trunk/Source/ThirdParty/ANGLE/include/platform/FeaturesMtl.h (286322 => 286323)
--- trunk/Source/ThirdParty/ANGLE/include/platform/FeaturesMtl.h 2021-11-30 21:31:02 UTC (rev 286322)
+++ trunk/Source/ThirdParty/ANGLE/include/platform/FeaturesMtl.h 2021-11-30 21:35:25 UTC (rev 286323)
@@ -21,11 +21,6 @@
"has_base_vertex_instanced_draw", FeatureCategory::MetalFeatures,
"The renderer supports base vertex instanced draw", &members};
- // Support depth texture filtering
- Feature hasDepthTextureFiltering = {
- "has_depth_texture_filtering", FeatureCategory::MetalFeatures,
- "The renderer supports depth texture's filtering other than nearest", &members};
-
// Support explicit memory barrier
Feature hasExplicitMemBarrier = {"has_explicit_mem_barrier", FeatureCategory::MetalFeatures,
"The renderer supports explicit memory barrier", &members};
Modified: trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/DisplayMtl.h (286322 => 286323)
--- trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/DisplayMtl.h 2021-11-30 21:31:02 UTC (rev 286322)
+++ trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/DisplayMtl.h 2021-11-30 21:35:25 UTC (rev 286323)
@@ -122,6 +122,8 @@
bool supportsEitherGPUFamily(uint8_t iOSFamily, uint8_t macFamily) const;
bool supportsIOSGPUFamily(uint8_t iOSFamily) const;
bool supportsMacGPUFamily(uint8_t macFamily) const;
+ bool supportsDepth24Stencil8PixelFormat() const;
+ bool supports32BitFloatFiltering() const;
bool isAMD() const;
bool isIntel() const;
bool isNVIDIA() const;
Modified: trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/DisplayMtl.mm (286322 => 286323)
--- trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/DisplayMtl.mm 2021-11-30 21:31:02 UTC (rev 286322)
+++ trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/DisplayMtl.mm 2021-11-30 21:35:25 UTC (rev 286323)
@@ -938,9 +938,6 @@
ANGLE_FEATURE_CONDITION((&mFeatures), allowGenMultipleMipsPerPass, true);
ANGLE_FEATURE_CONDITION((&mFeatures), forceBufferGPUStorage, false);
-
- ANGLE_FEATURE_CONDITION((&mFeatures), hasDepthTextureFiltering,
- (isOSX || isCatalyst) && !isARM);
ANGLE_FEATURE_CONDITION((&mFeatures), hasExplicitMemBarrier,
isMetal2_1 && (isOSX || isCatalyst) && !isARM);
ANGLE_FEATURE_CONDITION((&mFeatures), hasDepthAutoResolve, supportsEitherGPUFamily(3, 2));
@@ -1082,6 +1079,31 @@
return supportsIOSGPUFamily(iOSFamily) || supportsMacGPUFamily(macFamily);
}
+
+
+bool DisplayMtl::supports32BitFloatFiltering() const
+{
+#if (defined(__MAC_11_0) && __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_11_0) ||\
+ (defined(__IPHONE_14_0) && __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_14_0) ||\
+ (defined(__TVOS_14_0) && __TV_OS_VERSION_MIN_REQUIRED >= __TVOS_14_0)
+ if(@available(ios 14.0, macOS 11.0,*))
+ {
+ return [mMetalDevice supports32BitFloatFiltering];
+ }
+ else
+#endif
+ {
+ return supportsMacGPUFamily(1);
+ }
+}
+
+bool DisplayMtl::supportsDepth24Stencil8PixelFormat() const
+{
+#if TARGET_OS_OSX || TARGET_OS_MACCATALYST
+ return [mMetalDevice isDepth24Stencil8PixelFormatSupported];
+#endif
+ return false;
+}
bool DisplayMtl::isAMD() const
{
return angle::IsAMD(mMetalDeviceVendorId);
Modified: trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/TextureMtl.mm (286322 => 286323)
--- trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/TextureMtl.mm 2021-11-30 21:31:02 UTC (rev 286322)
+++ trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/TextureMtl.mm 2021-11-30 21:35:25 UTC (rev 286323)
@@ -795,7 +795,7 @@
mtl::SamplerDesc samplerDesc(mState.getSamplerState());
if (mFormat.actualAngleFormat().depthBits &&
- !displayMtl->getFeatures().hasDepthTextureFiltering.enabled)
+ !mFormat.getCaps().filterable)
{
// On devices not supporting filtering for depth textures, we need to convert to nearest
// here.
Modified: trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_format_map.json (286322 => 286323)
--- trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_format_map.json 2021-11-30 21:31:02 UTC (rev 286322)
+++ trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_format_map.json 2021-11-30 21:35:25 UTC (rev 286323)
@@ -607,7 +607,7 @@
"colorRenderable": "true"
},
"MTLPixelFormatDepth32Float":{
- "filterable": "display->supportsMacGPUFamily(1)",
+ "filterable": "display->supports32BitFloatFiltering()",
"writable": "false",
"blendable": "false",
"multisample": "true",
@@ -625,7 +625,7 @@
"depthRenderable": "true"
},
"MTLPixelFormatDepth32Float_Stencil8":{
- "filterable": "display->supportsMacGPUFamily(1)",
+ "filterable": "display->supports32BitFloatFiltering()",
"writable": "false",
"blendable": "false",
"multisample": "true",
@@ -645,13 +645,13 @@
"depthRenderable": "true"
},
"MTLPixelFormatDepth24Unorm_Stencil8":{
- "filterable": "display->supportsMacGPUFamily(1)",
+ "filterable": "display->supportsMacGPUFamily(1) && display->supportsDepth24Stencil8PixelFormat()",
"writable": "false",
"blendable": "false",
"multisample": "true",
"resolve": "supportDepthStencilAutoResolve",
"colorRenderable": "false",
- "depthRenderable": "display->supportsMacGPUFamily(1)"
+ "depthRenderable": "display->supportsMacGPUFamily(1) && display->supportsDepth24Stencil8PixelFormat()"
},
"MTLPixelFormatBC1_RGBA":{
"filterable": "true"
@@ -1014,4 +1014,4 @@
"R8G8B8_SSCALED": "R8G8B8A8_SINT"
}
}
-}
\ No newline at end of file
+}
Modified: trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_format_table_autogen.mm (286322 => 286323)
--- trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_format_table_autogen.mm 2021-11-30 21:31:02 UTC (rev 286322)
+++ trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_format_table_autogen.mm 2021-11-30 21:35:25 UTC (rev 286323)
@@ -3143,9 +3143,9 @@
setFormatCaps(MTLPixelFormatBGRA8Unorm_sRGB, /** filterable*/ true, /** writable*/ display->supportsIOSGPUFamily(2), /** blendable*/ true, /** multisample*/ true, /** resolve*/ true, /** colorRenderable*/ true, /** depthRenderable*/ false);
- setFormatCaps(MTLPixelFormatDepth32Float, /** filterable*/ display->supportsMacGPUFamily(1), /** writable*/ false, /** blendable*/ false, /** multisample*/ true, /** resolve*/ supportDepthAutoResolve, /** colorRenderable*/ false, /** depthRenderable*/ true);
+ setFormatCaps(MTLPixelFormatDepth32Float, /** filterable*/ display->supports32BitFloatFiltering(), /** writable*/ false, /** blendable*/ false, /** multisample*/ true, /** resolve*/ supportDepthAutoResolve, /** colorRenderable*/ false, /** depthRenderable*/ true);
- setFormatCaps(MTLPixelFormatDepth32Float_Stencil8, /** filterable*/ display->supportsMacGPUFamily(1), /** writable*/ false, /** blendable*/ false, /** multisample*/ true, /** resolve*/ supportDepthStencilAutoResolve, /** colorRenderable*/ false, /** depthRenderable*/ true);
+ setFormatCaps(MTLPixelFormatDepth32Float_Stencil8, /** filterable*/ display->supports32BitFloatFiltering(), /** writable*/ false, /** blendable*/ false, /** multisample*/ true, /** resolve*/ supportDepthStencilAutoResolve, /** colorRenderable*/ false, /** depthRenderable*/ true);
setFormatCaps(MTLPixelFormatR16Float, /** filterable*/ true, /** writable*/ true, /** blendable*/ true, /** multisample*/ true, /** resolve*/ true, /** colorRenderable*/ true, /** depthRenderable*/ false);
@@ -3262,7 +3262,7 @@
setFormatCaps(MTLPixelFormatDepth16Unorm, /** filterable*/ true, /** writable*/ false, /** blendable*/ false, /** multisample*/ true, /** resolve*/ supportDepthAutoResolve, /** colorRenderable*/ false, /** depthRenderable*/ true);
- setFormatCaps(MTLPixelFormatDepth24Unorm_Stencil8, /** filterable*/ display->supportsMacGPUFamily(1), /** writable*/ false, /** blendable*/ false, /** multisample*/ true, /** resolve*/ supportDepthStencilAutoResolve, /** colorRenderable*/ false, /** depthRenderable*/ display->supportsMacGPUFamily(1));
+ setFormatCaps(MTLPixelFormatDepth24Unorm_Stencil8, /** filterable*/ display->supportsMacGPUFamily(1) && display->supportsDepth24Stencil8PixelFormat(), /** writable*/ false, /** blendable*/ false, /** multisample*/ true, /** resolve*/ supportDepthStencilAutoResolve, /** colorRenderable*/ false, /** depthRenderable*/ display->supportsMacGPUFamily(1));
#elif !TARGET_OS_SIMULATOR && (TARGET_OS_IOS || TARGET_OS_TV) // TARGET_OS_OSX || TARGET_OS_MACCATALYST
setFormatCaps(MTLPixelFormatA1BGR5Unorm, /** filterable*/ true, /** writable*/ false, /** blendable*/ true, /** multisample*/ true, /** resolve*/ true, /** colorRenderable*/ true, /** depthRenderable*/ false);