diff --git a/src/common/BUILD.gn b/src/common/BUILD.gn
index e34df57..d7daeaa 100644
--- a/src/common/BUILD.gn
+++ b/src/common/BUILD.gn
@@ -213,6 +213,10 @@
       "xlib_with_undefs.h",
     ]
 
+    if (is_mac) {
+      sources += [ "SystemUtils_mac.mm" ]
+    }
+
     public_configs = [ ":dawn_internal" ]
     deps = [
       "${dawn_root}/src/dawn:dawn_headers",
diff --git a/src/common/SystemUtils.h b/src/common/SystemUtils.h
index ed18c31..bfbca0a 100644
--- a/src/common/SystemUtils.h
+++ b/src/common/SystemUtils.h
@@ -24,6 +24,11 @@
 bool SetEnvironmentVar(const char* variableName, const char* value);
 std::string GetExecutableDirectory();
 
+#ifdef DAWN_PLATFORM_APPLE
+void GetMacOSVersion(int32_t* majorVersion, int32_t* minorVersion = nullptr);
+bool IsMacOSVersionAtLeast(uint32_t majorVersion, uint32_t minorVersion = 0);
+#endif
+
 class ScopedEnvironmentVar {
   public:
     ScopedEnvironmentVar() = default;
diff --git a/src/common/SystemUtils_mac.mm b/src/common/SystemUtils_mac.mm
new file mode 100644
index 0000000..9bd27d2
--- /dev/null
+++ b/src/common/SystemUtils_mac.mm
@@ -0,0 +1,33 @@
+// Copyright 2021 The Dawn Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "common/SystemUtils.h"
+
+#include "common/Assert.h"
+
+#import <Foundation/NSProcessInfo.h>
+
+void GetMacOSVersion(int32_t* majorVersion, int32_t* minorVersion) {
+    NSOperatingSystemVersion version = [[NSProcessInfo processInfo] operatingSystemVersion];
+    ASSERT(majorVersion != nullptr);
+    *majorVersion = version.majorVersion;
+    if (minorVersion != nullptr) {
+        *minorVersion = version.minorVersion;
+    }
+}
+
+bool IsMacOSVersionAtLeast(uint32_t majorVersion, uint32_t minorVersion) {
+    return
+        [NSProcessInfo.processInfo isOperatingSystemAtLeastVersion:{majorVersion, minorVersion, 0}];
+}
diff --git a/src/dawn_native/metal/BackendMTL.mm b/src/dawn_native/metal/BackendMTL.mm
index ec2b036..b1e2679 100644
--- a/src/dawn_native/metal/BackendMTL.mm
+++ b/src/dawn_native/metal/BackendMTL.mm
@@ -18,6 +18,7 @@
 #include "common/GPUInfo.h"
 #include "common/NSRef.h"
 #include "common/Platform.h"
+#include "common/SystemUtils.h"
 #include "dawn_native/Instance.h"
 #include "dawn_native/MetalBackend.h"
 #include "dawn_native/metal/DeviceMTL.h"
@@ -152,8 +153,7 @@
 
         bool IsMetalSupported() {
             // Metal was first introduced in macOS 10.11
-            NSOperatingSystemVersion macOS10_11 = {10, 11, 0};
-            return [NSProcessInfo.processInfo isOperatingSystemAtLeastVersion:macOS10_11];
+            return IsMacOSVersionAtLeast(10, 11);
         }
 #elif defined(DAWN_PLATFORM_IOS)
         MaybeError GetDevicePCIInfo(id<MTLDevice> device, PCIIDs* ids) {
@@ -225,8 +225,7 @@
                     // Disable timestamp query on macOS 10.15 on AMD GPU because WriteTimestamp
                     // fails to call without any copy commands on MTLBlitCommandEncoder. This issue
                     // has been fixed on macOS 11.0. See crbug.com/dawn/545
-                    if (!gpu_info::IsAMD(GetPCIInfo().vendorId) ||
-                        [NSProcessInfo.processInfo isOperatingSystemAtLeastVersion:{11, 0, 0}]) {
+                    if (!gpu_info::IsAMD(GetPCIInfo().vendorId) || IsMacOSVersionAtLeast(11)) {
                         mSupportedExtensions.EnableExtension(Extension::TimestampQuery);
                     }
                 }
diff --git a/src/tests/DawnTest.cpp b/src/tests/DawnTest.cpp
index 936bb12..1951fe6 100644
--- a/src/tests/DawnTest.cpp
+++ b/src/tests/DawnTest.cpp
@@ -785,9 +785,15 @@
 #endif
 }
 
-bool DawnTestBase::IsMacOS() const {
+bool DawnTestBase::IsMacOS(int32_t majorVersion, int32_t minorVersion) const {
 #ifdef DAWN_PLATFORM_APPLE
-    return true;
+    if (majorVersion == -1 && minorVersion == -1) {
+        return true;
+    }
+    int32_t majorVersionOut, minorVersionOut = 0;
+    GetMacOSVersion(&majorVersionOut, &minorVersionOut);
+    return (majorVersion != -1 && majorVersion == majorVersionOut) &&
+           (minorVersion != -1 && minorVersion == minorVersionOut);
 #else
     return false;
 #endif
diff --git a/src/tests/DawnTest.h b/src/tests/DawnTest.h
index bdf1f38..80fd6f0 100644
--- a/src/tests/DawnTest.h
+++ b/src/tests/DawnTest.h
@@ -16,6 +16,7 @@
 #define TESTS_DAWNTEST_H_
 
 #include "common/Log.h"
+#include "common/Platform.h"
 #include "common/Preprocessor.h"
 #include "dawn/dawn_proc_table.h"
 #include "dawn/webgpu_cpp.h"
@@ -289,7 +290,7 @@
 
     bool IsWindows() const;
     bool IsLinux() const;
-    bool IsMacOS() const;
+    bool IsMacOS(int32_t majorVersion = -1, int32_t minorVersion = -1) const;
 
     bool UsesWire() const;
     bool IsBackendValidationEnabled() const;
diff --git a/src/tests/end2end/BufferZeroInitTests.cpp b/src/tests/end2end/BufferZeroInitTests.cpp
index 9f79a0c..2fd8741 100644
--- a/src/tests/end2end/BufferZeroInitTests.cpp
+++ b/src/tests/end2end/BufferZeroInitTests.cpp
@@ -1205,6 +1205,9 @@
     // Skip if timestamp extension is not supported on device
     DAWN_TEST_UNSUPPORTED_IF(!SupportsExtensions({"timestamp_query"}));
 
+    // crbug.com/dawn/940: Does not work on Mac 11.0+. Backend validation changed.
+    DAWN_TEST_UNSUPPORTED_IF(IsMacOS() && !IsMacOS(10));
+
     constexpr uint64_t kBufferSize = 16u;
     constexpr wgpu::BufferUsage kBufferUsage =
         wgpu::BufferUsage::QueryResolve | wgpu::BufferUsage::CopyDst;
