Title: [286323] trunk/Source/ThirdParty/ANGLE
Revision
286323
Author
[email protected]
Date
2021-11-30 13:35:25 -0800 (Tue, 30 Nov 2021)

Log Message

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):

Modified Paths

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);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to