Some platforms won't be able to create a GPUDevice
authordino@apple.com <dino@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 8 Mar 2017 00:09:37 +0000 (00:09 +0000)
committerdino@apple.com <dino@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 8 Mar 2017 00:09:37 +0000 (00:09 +0000)
https://bugs.webkit.org/show_bug.cgi?id=169314
<rdar://problems/30907521>

Reviewed by Jon Lee.

Source/JavaScriptCore:

Disable WEB_GPU on the iOS Simulator.

* Configurations/FeatureDefines.xcconfig:

Source/WebCore:

Protect for the case where the hardware doesn't support Metal. And
we might as well disable WebGPU completely in the iOS simulator
for now.

* Configurations/FeatureDefines.xcconfig:
* platform/graphics/cocoa/GPUDeviceMetal.mm:
(WebCore::GPUDevice::GPUDevice):
* platform/graphics/gpu/GPUDevice.cpp:
(WebCore::GPUDevice::create):

Source/WebCore/PAL:

Disable WEB_GPU on the iOS Simulator.

* Configurations/FeatureDefines.xcconfig:

Source/WebKit/mac:

Disable WEB_GPU on the iOS Simulator.

* Configurations/FeatureDefines.xcconfig:

Source/WebKit2:

Disable WEB_GPU on the iOS Simulator.

* Configurations/FeatureDefines.xcconfig:

Tools:

Protect for the case where the hardware doesn't support Metal.

* TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
* TestWebKitAPI/Tests/WebCore/mac/GPUDevice.mm:
(TestWebKitAPI::TEST):

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

15 files changed:
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig
Source/WebCore/ChangeLog
Source/WebCore/Configurations/FeatureDefines.xcconfig
Source/WebCore/PAL/ChangeLog
Source/WebCore/PAL/Configurations/FeatureDefines.xcconfig
Source/WebCore/platform/graphics/cocoa/GPUDeviceMetal.mm
Source/WebCore/platform/graphics/gpu/GPUDevice.cpp
Source/WebKit/mac/ChangeLog
Source/WebKit/mac/Configurations/FeatureDefines.xcconfig
Source/WebKit2/ChangeLog
Source/WebKit2/Configurations/FeatureDefines.xcconfig
Tools/ChangeLog
Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig
Tools/TestWebKitAPI/Tests/WebCore/mac/GPUDevice.mm

index e374bc2..ca040bc 100644 (file)
@@ -1,3 +1,15 @@
+2017-03-07  Dean Jackson  <dino@apple.com>
+
+        Some platforms won't be able to create a GPUDevice
+        https://bugs.webkit.org/show_bug.cgi?id=169314
+        <rdar://problems/30907521>
+
+        Reviewed by Jon Lee.
+
+        Disable WEB_GPU on the iOS Simulator.
+
+        * Configurations/FeatureDefines.xcconfig:
+
 2017-03-06  Saam Barati  <sbarati@apple.com>
 
         WebAssembly: Implement the WebAssembly.instantiate API
index bbe92cd..dce0e7e 100644 (file)
@@ -200,6 +200,7 @@ ENABLE_WEBASSEMBLY = ;
 ENABLE_WEBGL = ENABLE_WEBGL;
 ENABLE_WEBGL2 = ENABLE_WEBGL2;
 ENABLE_WEBGPU = ENABLE_WEBGPU;
+ENABLE_WEBGPU[sdk=iphonesimulator*] = ;
 ENABLE_WEB_ANIMATIONS = ENABLE_WEB_ANIMATIONS;
 ENABLE_WEB_AUDIO = ENABLE_WEB_AUDIO;
 ENABLE_WEB_REPLAY = $(ENABLE_WEB_REPLAY_$(PLATFORM_NAME)_$(CONFIGURATION));
index 9df8682..78ddbc0 100644 (file)
@@ -1,3 +1,21 @@
+2017-03-07  Dean Jackson  <dino@apple.com>
+
+        Some platforms won't be able to create a GPUDevice
+        https://bugs.webkit.org/show_bug.cgi?id=169314
+        <rdar://problems/30907521>
+
+        Reviewed by Jon Lee.
+
+        Protect for the case where the hardware doesn't support Metal. And
+        we might as well disable WebGPU completely in the iOS simulator
+        for now.
+
+        * Configurations/FeatureDefines.xcconfig:
+        * platform/graphics/cocoa/GPUDeviceMetal.mm:
+        (WebCore::GPUDevice::GPUDevice):
+        * platform/graphics/gpu/GPUDevice.cpp:
+        (WebCore::GPUDevice::create):
+
 2017-03-07  Maureen Daum  <mdaum@apple.com>
 
         Correctly check for an empty database file.
index bbe92cd..dce0e7e 100644 (file)
@@ -200,6 +200,7 @@ ENABLE_WEBASSEMBLY = ;
 ENABLE_WEBGL = ENABLE_WEBGL;
 ENABLE_WEBGL2 = ENABLE_WEBGL2;
 ENABLE_WEBGPU = ENABLE_WEBGPU;
+ENABLE_WEBGPU[sdk=iphonesimulator*] = ;
 ENABLE_WEB_ANIMATIONS = ENABLE_WEB_ANIMATIONS;
 ENABLE_WEB_AUDIO = ENABLE_WEB_AUDIO;
 ENABLE_WEB_REPLAY = $(ENABLE_WEB_REPLAY_$(PLATFORM_NAME)_$(CONFIGURATION));
index 66a19a8..bb6b449 100644 (file)
@@ -1,3 +1,15 @@
+2017-03-07  Dean Jackson  <dino@apple.com>
+
+        Some platforms won't be able to create a GPUDevice
+        https://bugs.webkit.org/show_bug.cgi?id=169314
+        <rdar://problems/30907521>
+
+        Reviewed by Jon Lee.
+
+        Disable WEB_GPU on the iOS Simulator.
+
+        * Configurations/FeatureDefines.xcconfig:
+
 2017-03-06  Michael Saboff  <msaboff@apple.com>
 
         Take advantage of fast permissions switching of JIT memory for devices that support it
index bbe92cd..dce0e7e 100644 (file)
@@ -200,6 +200,7 @@ ENABLE_WEBASSEMBLY = ;
 ENABLE_WEBGL = ENABLE_WEBGL;
 ENABLE_WEBGL2 = ENABLE_WEBGL2;
 ENABLE_WEBGPU = ENABLE_WEBGPU;
+ENABLE_WEBGPU[sdk=iphonesimulator*] = ;
 ENABLE_WEB_ANIMATIONS = ENABLE_WEB_ANIMATIONS;
 ENABLE_WEB_AUDIO = ENABLE_WEB_AUDIO;
 ENABLE_WEB_REPLAY = $(ENABLE_WEB_REPLAY_$(PLATFORM_NAME)_$(CONFIGURATION));
index 0bc5852..16b8308 100644 (file)
 #import <runtime/ArrayBuffer.h>
 #import <wtf/BlockObjCExceptions.h>
 
-#if ENABLE(WEBGPU) && !PLATFORM(IOS_SIMULATOR)
+#if ENABLE(WEBGPU)
 
 namespace WebCore {
 
 GPUDevice::GPUDevice()
 {
     m_device = MTLCreateSystemDefaultDevice();
-    LOG(WebGPU, "GPUDevice::GPUDevice Metal device is %p", m_device.get());
 
     if (!m_device) {
-        LOG(WebGPU, "GPUDevice::GPUDevice -- could not create the device");
+        LOG(WebGPU, "GPUDevice::GPUDevice -- could not create the device. This usually means Metal is not available on this hardware.");
         return;
     }
 
+    LOG(WebGPU, "GPUDevice::GPUDevice Metal device is %p", m_device.get());
+
     BEGIN_BLOCK_OBJC_EXCEPTIONS
     m_layer = [[WebGPULayer alloc] initWithGPUDevice:this];
     [m_layer setOpaque:0];
index c96ba98..dd9dfa2 100644 (file)
@@ -35,6 +35,14 @@ namespace WebCore {
 RefPtr<GPUDevice> GPUDevice::create()
 {
     RefPtr<GPUDevice> device = adoptRef(new GPUDevice());
+
+#if PLATFORM(COCOA)
+    if (!device->platformDevice()) {
+        LOG(WebGPU, "GPUDevice::create() was unable to create the low-level device");
+        return nullptr;
+    }
+#endif
+
     LOG(WebGPU, "GPUDevice::create() device is %p", device.get());
     return device;
 }
@@ -44,7 +52,7 @@ GPUDevice::~GPUDevice()
     LOG(WebGPU, "GPUDevice::~GPUDevice()");
 }
 
-#if !PLATFORM(COCOA) || PLATFORM(IOS_SIMULATOR)
+#if !PLATFORM(COCOA)
 
 GPUDevice::GPUDevice()
 {
index 1a4d620..b1ce635 100644 (file)
@@ -1,3 +1,15 @@
+2017-03-07  Dean Jackson  <dino@apple.com>
+
+        Some platforms won't be able to create a GPUDevice
+        https://bugs.webkit.org/show_bug.cgi?id=169314
+        <rdar://problems/30907521>
+
+        Reviewed by Jon Lee.
+
+        Disable WEB_GPU on the iOS Simulator.
+
+        * Configurations/FeatureDefines.xcconfig:
+
 2017-03-07  Maureen Daum  <mdaum@apple.com>
 
         Correctly check for an empty database file.
index bbe92cd..dce0e7e 100644 (file)
@@ -200,6 +200,7 @@ ENABLE_WEBASSEMBLY = ;
 ENABLE_WEBGL = ENABLE_WEBGL;
 ENABLE_WEBGL2 = ENABLE_WEBGL2;
 ENABLE_WEBGPU = ENABLE_WEBGPU;
+ENABLE_WEBGPU[sdk=iphonesimulator*] = ;
 ENABLE_WEB_ANIMATIONS = ENABLE_WEB_ANIMATIONS;
 ENABLE_WEB_AUDIO = ENABLE_WEB_AUDIO;
 ENABLE_WEB_REPLAY = $(ENABLE_WEB_REPLAY_$(PLATFORM_NAME)_$(CONFIGURATION));
index 7a7b4d5..f836838 100644 (file)
@@ -1,3 +1,15 @@
+2017-03-07  Dean Jackson  <dino@apple.com>
+
+        Some platforms won't be able to create a GPUDevice
+        https://bugs.webkit.org/show_bug.cgi?id=169314
+        <rdar://problems/30907521>
+
+        Reviewed by Jon Lee.
+
+        Disable WEB_GPU on the iOS Simulator.
+
+        * Configurations/FeatureDefines.xcconfig:
+
 2017-03-07  Brent Fulgham  <bfulgham@apple.com>
 
         [Mac][iOS][WK2] Whitelist sysctl-read
index bbe92cd..dce0e7e 100644 (file)
@@ -200,6 +200,7 @@ ENABLE_WEBASSEMBLY = ;
 ENABLE_WEBGL = ENABLE_WEBGL;
 ENABLE_WEBGL2 = ENABLE_WEBGL2;
 ENABLE_WEBGPU = ENABLE_WEBGPU;
+ENABLE_WEBGPU[sdk=iphonesimulator*] = ;
 ENABLE_WEB_ANIMATIONS = ENABLE_WEB_ANIMATIONS;
 ENABLE_WEB_AUDIO = ENABLE_WEB_AUDIO;
 ENABLE_WEB_REPLAY = $(ENABLE_WEB_REPLAY_$(PLATFORM_NAME)_$(CONFIGURATION));
index e5c3dba..5f0dde5 100644 (file)
@@ -1,3 +1,17 @@
+2017-03-07  Dean Jackson  <dino@apple.com>
+
+        Some platforms won't be able to create a GPUDevice
+        https://bugs.webkit.org/show_bug.cgi?id=169314
+        <rdar://problems/30907521>
+
+        Reviewed by Jon Lee.
+
+        Protect for the case where the hardware doesn't support Metal.
+
+        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
+        * TestWebKitAPI/Tests/WebCore/mac/GPUDevice.mm:
+        (TestWebKitAPI::TEST):
+
 2017-03-07  Maureen Daum  <mdaum@apple.com>
 
         Correctly check for an empty database file.
index bbe92cd..dce0e7e 100644 (file)
@@ -200,6 +200,7 @@ ENABLE_WEBASSEMBLY = ;
 ENABLE_WEBGL = ENABLE_WEBGL;
 ENABLE_WEBGL2 = ENABLE_WEBGL2;
 ENABLE_WEBGPU = ENABLE_WEBGPU;
+ENABLE_WEBGPU[sdk=iphonesimulator*] = ;
 ENABLE_WEB_ANIMATIONS = ENABLE_WEB_ANIMATIONS;
 ENABLE_WEB_AUDIO = ENABLE_WEB_AUDIO;
 ENABLE_WEB_REPLAY = $(ENABLE_WEB_REPLAY_$(PLATFORM_NAME)_$(CONFIGURATION));
index 41eaee0..a1381ac 100644 (file)
@@ -37,6 +37,12 @@ namespace TestWebKitAPI {
 TEST(GPU, Basic)
 {
     auto device = GPUDevice::create();
+    // Not all hardware supports Metal, so it is possible
+    // that we were unable to create the MTLDevice object.
+    // In that case, the device should be null.
+    if (!device)
+        return;
+
     EXPECT_NOT_NULL(device->layer());
     EXPECT_NOT_NULL(device->platformLayer());