Skip BufferZeroInitTests.ResolveQuerySet if not on MacOS 10
No-trying due to broken branch builders.
Bug: dawn:940, chromium:1128540
Change-Id: I830cebf2247b65ea0be58a10e02fbcc0542ff73b
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/59040
Reviewed-by: Stephen White <senorblanco@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
(cherry picked from commit e50f8c65b79e9a62e56ac912211a09cb1b4b74dd)
No-try: True
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/60761
Commit-Queue: Brian Sheedy <bsheedy@google.com>
Auto-Submit: Brian Sheedy <bsheedy@google.com>
Reviewed-by: Austin Eng <enga@chromium.org>
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 a5fed42..1f0149d 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 aa15e33..a7bb34b 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"
@@ -286,7 +287,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;