Do simplifications assuming macOS 10.11 is the min version supported.

Bug: dawn:1397
Change-Id: I42a588b2a30e12eb7b6889a8954311b632547c58
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/90243
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
This commit is contained in:
Corentin Wallez
2022-08-08 17:42:41 +00:00
committed by Dawn LUCI CQ
parent 5344184403
commit 142141cdf2
4 changed files with 135 additions and 54 deletions

View File

@@ -158,22 +158,14 @@ MaybeError GetDevicePCIInfo(id<MTLDevice> device, PCIIDs* ids) {
return GetVendorIdFromVendors(device, ids);
}
bool IsMetalSupported() {
// Metal was first introduced in macOS 10.11
// WebGPU is targeted at macOS 10.12+
// TODO(dawn:1181): Dawn native should allow non-conformant WebGPU on macOS 10.11
return IsMacOSVersionAtLeast(10, 12);
}
#elif DAWN_PLATFORM_IS(IOS)
MaybeError GetDevicePCIInfo(id<MTLDevice> device, PCIIDs* ids) {
DAWN_UNUSED(device);
*ids = PCIIDs{0, 0};
return {};
}
bool IsMetalSupported() {
return true;
}
#else
#error "Unsupported Apple platform."
#endif
@@ -467,10 +459,8 @@ class Adapter : public AdapterBase {
return MTLGPUFamily::Mac2;
}
}
if (@available(macOS 10.11, *)) {
if ([*mDevice supportsFeatureSet:MTLFeatureSet_macOS_GPUFamily1_v1]) {
return MTLGPUFamily::Mac1;
}
if ([*mDevice supportsFeatureSet:MTLFeatureSet_macOS_GPUFamily1_v1]) {
return MTLGPUFamily::Mac1;
}
#elif TARGET_OS_IOS
if (@available(iOS 10.11, *)) {
@@ -658,43 +648,30 @@ ResultOrError<std::vector<Ref<AdapterBase>>> Backend::DiscoverAdapters(
ASSERT(optionsBase->backendType == WGPUBackendType_Metal);
std::vector<Ref<AdapterBase>> adapters;
BOOL supportedVersion = NO;
#if DAWN_PLATFORM_IS(MACOS)
if (@available(macOS 10.11, *)) {
supportedVersion = YES;
NSRef<NSArray<id<MTLDevice>>> devices = AcquireNSRef(MTLCopyAllDevices());
NSRef<NSArray<id<MTLDevice>>> devices = AcquireNSRef(MTLCopyAllDevices());
for (id<MTLDevice> device in devices.Get()) {
Ref<Adapter> adapter = AcquireRef(new Adapter(GetInstance(), device));
if (!GetInstance()->ConsumedError(adapter->Initialize())) {
adapters.push_back(std::move(adapter));
}
}
}
#endif
#if DAWN_PLATFORM_IS(IOS)
if (@available(iOS 8.0, *)) {
supportedVersion = YES;
// iOS only has a single device so MTLCopyAllDevices doesn't exist there.
Ref<Adapter> adapter =
AcquireRef(new Adapter(GetInstance(), MTLCreateSystemDefaultDevice()));
for (id<MTLDevice> device in devices.Get()) {
Ref<Adapter> adapter = AcquireRef(new Adapter(GetInstance(), device));
if (!GetInstance()->ConsumedError(adapter->Initialize())) {
adapters.push_back(std::move(adapter));
}
}
#endif
if (!supportedVersion) {
UNREACHABLE();
// iOS only has a single device so MTLCopyAllDevices doesn't exist there.
#if defined(DAWN_PLATFORM_IOS)
Ref<Adapter> adapter =
AcquireRef(new Adapter(GetInstance(), MTLCreateSystemDefaultDevice()));
if (!GetInstance()->ConsumedError(adapter->Initialize())) {
adapters.push_back(std::move(adapter));
}
#endif
return adapters;
}
BackendConnection* Connect(InstanceBase* instance) {
if (!IsMetalSupported()) {
return nullptr;
}
return new Backend(instance);
}

View File

@@ -29,25 +29,21 @@
namespace utils {
std::unique_ptr<wgpu::ChainedStruct> SetupWindowAndGetSurfaceDescriptorCocoa(GLFWwindow* window) {
if (@available(macOS 10.11, *)) {
NSWindow* nsWindow = glfwGetCocoaWindow(window);
NSView* view = [nsWindow contentView];
NSWindow* nsWindow = glfwGetCocoaWindow(window);
NSView* view = [nsWindow contentView];
// Create a CAMetalLayer that covers the whole window that will be passed to
// CreateSurface.
[view setWantsLayer:YES];
[view setLayer:[CAMetalLayer layer]];
// Create a CAMetalLayer that covers the whole window that will be passed to
// CreateSurface.
[view setWantsLayer:YES];
[view setLayer:[CAMetalLayer layer]];
// Use retina if the window was created with retina support.
[[view layer] setContentsScale:[nsWindow backingScaleFactor]];
// Use retina if the window was created with retina support.
[[view layer] setContentsScale:[nsWindow backingScaleFactor]];
std::unique_ptr<wgpu::SurfaceDescriptorFromMetalLayer> desc =
std::make_unique<wgpu::SurfaceDescriptorFromMetalLayer>();
desc->layer = [view layer];
return std::move(desc);
}
return nullptr;
std::unique_ptr<wgpu::SurfaceDescriptorFromMetalLayer> desc =
std::make_unique<wgpu::SurfaceDescriptorFromMetalLayer>();
desc->layer = [view layer];
return std::move(desc);
}
} // namespace utils