Title: [281703] branches/safari-612.1.29.14-branch
Revision
281703
Author
repst...@apple.com
Date
2021-08-27 11:02:27 -0700 (Fri, 27 Aug 2021)

Log Message

Cherry-pick r281245. rdar://problem/82445892

    WebGL via Metal experimental feature does not correctly toggle metal backend
    https://bugs.webkit.org/show_bug.cgi?id=229267
    <rdar://81855735>

    Source/WebCore:

    Patch by Kyle Piddington <kpidding...@apple.com> on 2021-08-19
    Reviewed by Dean Jackson.

    GraphicsContextGLAttributes defines 'useMetal' as 'true' by default.
    Since this branch was only checking if Metal was enabled via the
    setting, rather than checking the status of the flag, the metal backend
    was never disabled, even when requested.

    Tests: webgl/webgl-metal-disabled.html
           webgl/webgl-metal-enabled.html

    * WebCore.xcodeproj/project.pbxproj:
    * html/canvas/WebGLRenderingContextBase.cpp:
    (WebCore::WebGLRenderingContextBase::create):
    * testing/Internals.cpp:
    (WebCore::Internals::requestedMetal):
    * testing/Internals.h:
    * testing/Internals.idl:
    * testing/Internals.mm:
    (WebCore::Internals::platformSupportsMetal):

    LayoutTests:

    Add tests to verify WebGL feature flag works as intended.

    Patch by Kyle Piddington <kpidding...@apple.com> on 2021-08-19
    Reviewed by Dean Jackson.

    * webgl/webgl-metal-disabled-expected.txt: Added.
    * webgl/webgl-metal-disabled.html: Added.
    * webgl/webgl-metal-enabled-expected.txt: Added.
    * webgl/webgl-metal-enabled.html: Added.

    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@281245 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Modified Paths

Added Paths

Diff

Modified: branches/safari-612.1.29.14-branch/LayoutTests/ChangeLog (281702 => 281703)


--- branches/safari-612.1.29.14-branch/LayoutTests/ChangeLog	2021-08-27 17:53:06 UTC (rev 281702)
+++ branches/safari-612.1.29.14-branch/LayoutTests/ChangeLog	2021-08-27 18:02:27 UTC (rev 281703)
@@ -1,3 +1,63 @@
+2021-08-27  Russell Epstein  <repst...@apple.com>
+
+        Cherry-pick r281245. rdar://problem/82445892
+
+    WebGL via Metal experimental feature does not correctly toggle metal backend
+    https://bugs.webkit.org/show_bug.cgi?id=229267
+    <rdar://81855735>
+    
+    Source/WebCore:
+    
+    Patch by Kyle Piddington <kpidding...@apple.com> on 2021-08-19
+    Reviewed by Dean Jackson.
+    
+    GraphicsContextGLAttributes defines 'useMetal' as 'true' by default.
+    Since this branch was only checking if Metal was enabled via the
+    setting, rather than checking the status of the flag, the metal backend
+    was never disabled, even when requested.
+    
+    Tests: webgl/webgl-metal-disabled.html
+           webgl/webgl-metal-enabled.html
+    
+    * WebCore.xcodeproj/project.pbxproj:
+    * html/canvas/WebGLRenderingContextBase.cpp:
+    (WebCore::WebGLRenderingContextBase::create):
+    * testing/Internals.cpp:
+    (WebCore::Internals::requestedMetal):
+    * testing/Internals.h:
+    * testing/Internals.idl:
+    * testing/Internals.mm:
+    (WebCore::Internals::platformSupportsMetal):
+    
+    LayoutTests:
+    
+    Add tests to verify WebGL feature flag works as intended.
+    
+    Patch by Kyle Piddington <kpidding...@apple.com> on 2021-08-19
+    Reviewed by Dean Jackson.
+    
+    * webgl/webgl-metal-disabled-expected.txt: Added.
+    * webgl/webgl-metal-disabled.html: Added.
+    * webgl/webgl-metal-enabled-expected.txt: Added.
+    * webgl/webgl-metal-enabled.html: Added.
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@281245 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2021-08-19  Kyle Piddington  <kpidding...@apple.com>
+
+            WebGL via Metal experimental feature does not correctly toggle metal backend
+            https://bugs.webkit.org/show_bug.cgi?id=229267
+            <rdar://81855735>
+
+            Add tests to verify WebGL feature flag works as intended.
+
+            Reviewed by Dean Jackson.
+
+            * webgl/webgl-metal-disabled-expected.txt: Added.
+            * webgl/webgl-metal-disabled.html: Added.
+            * webgl/webgl-metal-enabled-expected.txt: Added.
+            * webgl/webgl-metal-enabled.html: Added.
+
 2021-08-19  Kate Cheney  <katherine_che...@apple.com>
 
         [App Privacy Report] Some HTTP Redirects from non app initiated requests are marked app initiated

Added: branches/safari-612.1.29.14-branch/LayoutTests/webgl/webgl-metal-disabled-expected.txt (0 => 281703)


--- branches/safari-612.1.29.14-branch/LayoutTests/webgl/webgl-metal-disabled-expected.txt	                        (rev 0)
+++ branches/safari-612.1.29.14-branch/LayoutTests/webgl/webgl-metal-disabled-expected.txt	2021-08-27 18:02:27 UTC (rev 281703)
@@ -0,0 +1,2 @@
+Metal for WebGL1 disabled when requested: OK
+

Added: branches/safari-612.1.29.14-branch/LayoutTests/webgl/webgl-metal-disabled.html (0 => 281703)


--- branches/safari-612.1.29.14-branch/LayoutTests/webgl/webgl-metal-disabled.html	                        (rev 0)
+++ branches/safari-612.1.29.14-branch/LayoutTests/webgl/webgl-metal-disabled.html	2021-08-27 18:02:27 UTC (rev 281703)
@@ -0,0 +1,31 @@
+<!-- webkit-test-runner [ WebGLUsingMetal=false ] -->
+<canvas id="a"></canvas>
+<script>
+if (window.testRunner)
+    window.testRunner.dumpAsText();
+
+function run()
+{
+    const out = document.querySelector("p");
+    let result = "";
+
+    if (!window.internals) {
+        out.innerText = "Test requires internals.";
+        return;
+    }
+
+    const canvasA = document.getElementById("a");
+    const glA = canvasA.getContext("webgl");
+    const requested = internals.requestedMetal(glA);
+    const supported = false;
+    let resultStr = "OK";
+    if (requested != supported)
+        resultStr = "FAIL";
+
+    result += `Metal for WebGL1 disabled when requested: ${resultStr}<br>`;
+    out.innerHTML = result;
+}
+
+window.addEventListener("load", run, false);
+</script>
+<p></p>

Added: branches/safari-612.1.29.14-branch/LayoutTests/webgl/webgl-metal-enabled-expected.txt (0 => 281703)


--- branches/safari-612.1.29.14-branch/LayoutTests/webgl/webgl-metal-enabled-expected.txt	                        (rev 0)
+++ branches/safari-612.1.29.14-branch/LayoutTests/webgl/webgl-metal-enabled-expected.txt	2021-08-27 18:02:27 UTC (rev 281703)
@@ -0,0 +1,2 @@
+Metal for WebGL1 enabled matches platform support: OK
+

Added: branches/safari-612.1.29.14-branch/LayoutTests/webgl/webgl-metal-enabled.html (0 => 281703)


--- branches/safari-612.1.29.14-branch/LayoutTests/webgl/webgl-metal-enabled.html	                        (rev 0)
+++ branches/safari-612.1.29.14-branch/LayoutTests/webgl/webgl-metal-enabled.html	2021-08-27 18:02:27 UTC (rev 281703)
@@ -0,0 +1,30 @@
+<canvas id="a"></canvas>
+<script>
+if (window.testRunner)
+    window.testRunner.dumpAsText();
+
+function run()
+{
+    const out = document.querySelector("p");
+    let result = "";
+
+    if (!window.internals) {
+        out.innerText = "Test requires internals.";
+        return;
+    }
+
+    const canvasA = document.getElementById("a");
+    const glA = canvasA.getContext("webgl");
+    const requested = internals.requestedMetal(glA);
+    const supported = internals.platformSupportsMetal(false);
+    let resultStr = "OK";
+    if (requested != supported)
+        resultStr = "FAIL";
+
+    result += `Metal for WebGL1 enabled matches platform support: ${resultStr}<br>`;
+    out.innerHTML = result;
+}
+
+window.addEventListener("load", run, false);
+</script>
+<p></p>

Modified: branches/safari-612.1.29.14-branch/Source/WebCore/ChangeLog (281702 => 281703)


--- branches/safari-612.1.29.14-branch/Source/WebCore/ChangeLog	2021-08-27 17:53:06 UTC (rev 281702)
+++ branches/safari-612.1.29.14-branch/Source/WebCore/ChangeLog	2021-08-27 18:02:27 UTC (rev 281703)
@@ -1,3 +1,74 @@
+2021-08-27  Russell Epstein  <repst...@apple.com>
+
+        Cherry-pick r281245. rdar://problem/82445892
+
+    WebGL via Metal experimental feature does not correctly toggle metal backend
+    https://bugs.webkit.org/show_bug.cgi?id=229267
+    <rdar://81855735>
+    
+    Source/WebCore:
+    
+    Patch by Kyle Piddington <kpidding...@apple.com> on 2021-08-19
+    Reviewed by Dean Jackson.
+    
+    GraphicsContextGLAttributes defines 'useMetal' as 'true' by default.
+    Since this branch was only checking if Metal was enabled via the
+    setting, rather than checking the status of the flag, the metal backend
+    was never disabled, even when requested.
+    
+    Tests: webgl/webgl-metal-disabled.html
+           webgl/webgl-metal-enabled.html
+    
+    * WebCore.xcodeproj/project.pbxproj:
+    * html/canvas/WebGLRenderingContextBase.cpp:
+    (WebCore::WebGLRenderingContextBase::create):
+    * testing/Internals.cpp:
+    (WebCore::Internals::requestedMetal):
+    * testing/Internals.h:
+    * testing/Internals.idl:
+    * testing/Internals.mm:
+    (WebCore::Internals::platformSupportsMetal):
+    
+    LayoutTests:
+    
+    Add tests to verify WebGL feature flag works as intended.
+    
+    Patch by Kyle Piddington <kpidding...@apple.com> on 2021-08-19
+    Reviewed by Dean Jackson.
+    
+    * webgl/webgl-metal-disabled-expected.txt: Added.
+    * webgl/webgl-metal-disabled.html: Added.
+    * webgl/webgl-metal-enabled-expected.txt: Added.
+    * webgl/webgl-metal-enabled.html: Added.
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@281245 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2021-08-19  Kyle Piddington  <kpidding...@apple.com>
+
+            WebGL via Metal experimental feature does not correctly toggle metal backend
+            https://bugs.webkit.org/show_bug.cgi?id=229267
+            <rdar://81855735>
+
+            Reviewed by Dean Jackson.
+
+            GraphicsContextGLAttributes defines 'useMetal' as 'true' by default.
+            Since this branch was only checking if Metal was enabled via the
+            setting, rather than checking the status of the flag, the metal backend
+            was never disabled, even when requested.
+
+            Tests: webgl/webgl-metal-disabled.html
+                   webgl/webgl-metal-enabled.html
+
+            * WebCore.xcodeproj/project.pbxproj:
+            * html/canvas/WebGLRenderingContextBase.cpp:
+            (WebCore::WebGLRenderingContextBase::create):
+            * testing/Internals.cpp:
+            (WebCore::Internals::requestedMetal):
+            * testing/Internals.h:
+            * testing/Internals.idl:
+            * testing/Internals.mm:
+            (WebCore::Internals::platformSupportsMetal):
+
 2021-08-23  Russell Epstein  <repst...@apple.com>
 
         Cherry-pick r281384. rdar://problem/82218757

Modified: branches/safari-612.1.29.14-branch/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp (281702 => 281703)


--- branches/safari-612.1.29.14-branch/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp	2021-08-27 17:53:06 UTC (rev 281702)
+++ branches/safari-612.1.29.14-branch/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp	2021-08-27 18:02:27 UTC (rev 281703)
@@ -719,8 +719,7 @@
     attributes.webGLVersion = type;
 
 #if PLATFORM(COCOA)
-    if (scriptExecutionContext->settingsValues().webGLUsingMetal)
-        attributes.useMetal = true;
+    attributes.useMetal = scriptExecutionContext->settingsValues().webGLUsingMetal;
 #endif
 
     if (isPendingPolicyResolution) {

Modified: branches/safari-612.1.29.14-branch/Source/WebCore/testing/Internals.cpp (281702 => 281703)


--- branches/safari-612.1.29.14-branch/Source/WebCore/testing/Internals.cpp	2021-08-27 17:53:06 UTC (rev 281702)
+++ branches/safari-612.1.29.14-branch/Source/WebCore/testing/Internals.cpp	2021-08-27 18:02:27 UTC (rev 281703)
@@ -5289,8 +5289,22 @@
 
     return RequestedGPU::Default;
 }
+
+bool Internals::requestedMetal(WebGLRenderingContext& context)
+{
+    UNUSED_PARAM(context);
+#if PLATFORM(COCOA)
+    if (auto optionalAttributes = context.getContextAttributes()) {
+        auto attributes = *optionalAttributes;
+
+        return attributes.useMetal;
+    }
 #endif
 
+    return false;
+}
+#endif
+
 void Internals::setPageVisibility(bool isVisible)
 {
     auto* document = contextDocument();
@@ -6508,4 +6522,11 @@
     return { };
 }
 
+#if ENABLE(WEBGL) && !PLATFORM(COCOA)
+bool Internals::platformSupportsMetal(bool)
+{
+    return false;
+}
+#endif
+
 } // namespace WebCore

Modified: branches/safari-612.1.29.14-branch/Source/WebCore/testing/Internals.h (281702 => 281703)


--- branches/safari-612.1.29.14-branch/Source/WebCore/testing/Internals.h	2021-08-27 17:53:06 UTC (rev 281702)
+++ branches/safari-612.1.29.14-branch/Source/WebCore/testing/Internals.h	2021-08-27 18:02:27 UTC (rev 281703)
@@ -825,6 +825,8 @@
         HighPerformance
     };
     RequestedGPU requestedGPU(WebGLRenderingContext&);
+    bool requestedMetal(WebGLRenderingContext&);
+    bool platformSupportsMetal(bool isWebGL2);
 #endif
 
     void setPageVisibility(bool isVisible);

Modified: branches/safari-612.1.29.14-branch/Source/WebCore/testing/Internals.idl (281702 => 281703)


--- branches/safari-612.1.29.14-branch/Source/WebCore/testing/Internals.idl	2021-08-27 17:53:06 UTC (rev 281702)
+++ branches/safari-612.1.29.14-branch/Source/WebCore/testing/Internals.idl	2021-08-27 18:02:27 UTC (rev 281703)
@@ -855,6 +855,8 @@
     [Conditional=WEBGL] undefined simulateEventForWebGLContext(SimulatedWebGLContextEvent event, WebGLRenderingContext context);
     [Conditional=WEBGL] boolean hasLowAndHighPowerGPUs();
     [Conditional=WEBGL] RequestedGPU requestedGPU(WebGLRenderingContext context);
+    [Conditional=WEBGL] boolean requestedMetal(WebGLRenderingContext context);
+    [Conditional=WEBGL] boolean platformSupportsMetal(boolean isWebGL2);
 
     undefined setPageVisibility(boolean isVisible);
     undefined setPageIsFocusedAndActive(boolean isFocused);

Modified: branches/safari-612.1.29.14-branch/Source/WebCore/testing/Internals.mm (281702 => 281703)


--- branches/safari-612.1.29.14-branch/Source/WebCore/testing/Internals.mm	2021-08-27 17:53:06 UTC (rev 281702)
+++ branches/safari-612.1.29.14-branch/Source/WebCore/testing/Internals.mm	2021-08-27 18:02:27 UTC (rev 281703)
@@ -38,6 +38,9 @@
 #import "SimpleRange.h"
 #import "UTIUtilities.h"
 #import <AVFoundation/AVPlayer.h>
+#if PLATFORM(COCOA)
+#import <Metal/Metal.h>
+#endif
 #import <pal/spi/cocoa/NSAccessibilitySPI.h>
 #import <wtf/cocoa/NSURLExtras.h>
 #import <wtf/spi/darwin/SandboxSPI.h>
@@ -46,6 +49,8 @@
 #import <pal/ios/UIKitSoftLink.h>
 #endif
 
+
+
 namespace WebCore {
 
 String Internals::userVisibleString(const DOMURL& url)
@@ -146,4 +151,25 @@
     return !sandbox_check(pid, "iokit-open", static_cast<enum sandbox_filter_type>(SANDBOX_FILTER_IOKIT_CONNECTION | SANDBOX_CHECK_NO_REPORT), ioKitClass.utf8().data());
 }
 
+#if ENABLE(WEBGL) && PLATFORM(COCOA)
+bool Internals::platformSupportsMetal(bool isWebGL2)
+{
+    auto device = MTLCreateSystemDefaultDevice();
+
+    if (device) {
+#if PLATFORM(IOS_FAMILY) && !PLATFORM(IOS_FAMILY_SIMULATOR)
+        // A8 devices (iPad Mini 4, iPad Air 2) cannot use WebGL2 via Metal.
+        // This check can be removed once they are no longer supported.
+        if (isWebGL2)
+            return [device supportsFamily:MTLGPUFamilyApple3];
+#else
+        UNUSED_PARAM(isWebGL2);
+#endif
+        return true;
+    }
+
+    return false;
 }
+#endif
+
+}
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to