Skip tests if no adapter is available
Bug: dawn:208
Change-Id: I076fd497101dd017e8d83ae034edb7b1fa1f8581
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/11941
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
diff --git a/src/tests/DawnTest.cpp b/src/tests/DawnTest.cpp
index 9e89dac..02f27bb 100644
--- a/src/tests/DawnTest.cpp
+++ b/src/tests/DawnTest.cpp
@@ -164,20 +164,8 @@
mInstance->EnableBackendValidation(mEnableBackendValidation);
mInstance->EnableBeginCaptureOnStartup(mBeginCaptureOnStartup);
- static constexpr dawn_native::BackendType kWindowlessBackends[] = {
- dawn_native::BackendType::D3D12,
- dawn_native::BackendType::Metal,
- dawn_native::BackendType::Vulkan,
- };
- for (dawn_native::BackendType backend : kWindowlessBackends) {
- if (detail::IsBackendAvailable(backend)) {
- mInstance.get()->DiscoverDefaultAdapters();
- }
- }
-
- if (detail::IsBackendAvailable(dawn_native::BackendType::OpenGL)) {
- DiscoverOpenGLAdapter();
- }
+ mInstance.get()->DiscoverDefaultAdapters();
+ DiscoverOpenGLAdapter();
std::cout << "Testing configuration\n"
"---------------------\n"
@@ -238,7 +226,9 @@
void DawnTestEnvironment::DiscoverOpenGLAdapter() {
#ifdef DAWN_ENABLE_BACKEND_OPENGL
- ASSERT_TRUE(glfwInit());
+ if (!glfwInit()) {
+ return;
+ }
glfwDefaultWindowHints();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 4);
@@ -407,7 +397,9 @@
}
}
- ASSERT(mBackendAdapter);
+ if (!mBackendAdapter) {
+ return;
+ }
}
mPCIInfo = mBackendAdapter.GetPCIInfo();
@@ -478,6 +470,10 @@
}
}
+bool DawnTestBase::HasAdapter() const {
+ return !!mBackendAdapter;
+}
+
void DawnTestBase::StartExpectDeviceError() {
mExpectError = true;
mError = false;
diff --git a/src/tests/DawnTest.h b/src/tests/DawnTest.h
index 46d5a05..2f50e8b 100644
--- a/src/tests/DawnTest.h
+++ b/src/tests/DawnTest.h
@@ -200,6 +200,7 @@
uint32_t pixelSize,
detail::Expectation* expectation);
+ bool HasAdapter() const;
void WaitABit();
void FlushWire();
@@ -272,14 +273,31 @@
dawn_native::Adapter mBackendAdapter;
};
+// Skip a test when the given condition is satisfied.
+#define DAWN_SKIP_TEST_IF(condition) \
+ if (condition) { \
+ std::cout << "Test skipped: " #condition "." << std::endl; \
+ GTEST_SKIP(); \
+ return; \
+ }
+
template <typename Params = DawnTestParam>
class DawnTestWithParams : public DawnTestBase, public ::testing::TestWithParam<Params> {
+ private:
+ void SetUp() override final {
+ // DawnTestBase::SetUp() gets the adapter, and creates the device and wire.
+ // It's separate from TestSetUp() so we can skip tests completely if no adapter
+ // is available.
+ DawnTestBase::SetUp();
+ DAWN_SKIP_TEST_IF(!HasAdapter());
+ TestSetUp();
+ }
+
protected:
DawnTestWithParams();
~DawnTestWithParams() override = default;
- void SetUp() override {
- DawnTestBase::SetUp();
+ virtual void TestSetUp() {
}
void TearDown() override {
@@ -303,12 +321,6 @@
testName##params, sizeof(testName##params) / sizeof(firstParam))), \
testing::PrintToStringParamName())
-// Skip a test when the given condition is satisfied.
-#define DAWN_SKIP_TEST_IF(condition) \
- if (condition) { \
- std::cout << "Test skipped: " #condition "." << std::endl; \
- return; \
- }
namespace detail {
// Helper functions used for DAWN_INSTANTIATE_TEST
diff --git a/src/tests/end2end/ColorStateTests.cpp b/src/tests/end2end/ColorStateTests.cpp
index 18bae35..ef049b7 100644
--- a/src/tests/end2end/ColorStateTests.cpp
+++ b/src/tests/end2end/ColorStateTests.cpp
@@ -26,8 +26,8 @@
class ColorStateTest : public DawnTest {
protected:
- void SetUp() override {
- DawnTest::SetUp();
+ void TestSetUp() override {
+ DawnTest::TestSetUp();
vsModule = utils::CreateShaderModule(device, utils::SingleShaderStage::Vertex, R"(
#version 450
diff --git a/src/tests/end2end/CompressedTextureFormatTests.cpp b/src/tests/end2end/CompressedTextureFormatTests.cpp
index 3208481..5f52fa6 100644
--- a/src/tests/end2end/CompressedTextureFormatTests.cpp
+++ b/src/tests/end2end/CompressedTextureFormatTests.cpp
@@ -34,8 +34,8 @@
class CompressedTextureBCFormatTest : public DawnTest {
protected:
- void SetUp() override {
- DawnTest::SetUp();
+ void TestSetUp() override {
+ DawnTest::TestSetUp();
mBindGroupLayout = utils::MakeBindGroupLayout(
device, {{0, dawn::ShaderStage::Fragment, dawn::BindingType::Sampler},
{1, dawn::ShaderStage::Fragment, dawn::BindingType::SampledTexture}});
diff --git a/src/tests/end2end/D3D12ResourceWrappingTests.cpp b/src/tests/end2end/D3D12ResourceWrappingTests.cpp
index 0123216..5bb4fa3 100644
--- a/src/tests/end2end/D3D12ResourceWrappingTests.cpp
+++ b/src/tests/end2end/D3D12ResourceWrappingTests.cpp
@@ -29,8 +29,8 @@
class D3D12ResourceTestBase : public DawnTest {
public:
- void SetUp() override {
- DawnTest::SetUp();
+ void TestSetUp() override {
+ DawnTest::TestSetUp();
if (UsesWire()) {
return;
}
@@ -101,8 +101,8 @@
// These tests are skipped if the harness is using the wire.
class D3D12SharedHandleValidation : public D3D12ResourceTestBase {
public:
- void SetUp() override {
- D3D12ResourceTestBase::SetUp();
+ void TestSetUp() override {
+ D3D12ResourceTestBase::TestSetUp();
dawnDescriptor.dimension = dawn::TextureDimension::e2D;
dawnDescriptor.format = dawn::TextureFormat::BGRA8Unorm;
diff --git a/src/tests/end2end/DepthStencilStateTests.cpp b/src/tests/end2end/DepthStencilStateTests.cpp
index c287d7e..b798de1 100644
--- a/src/tests/end2end/DepthStencilStateTests.cpp
+++ b/src/tests/end2end/DepthStencilStateTests.cpp
@@ -22,8 +22,8 @@
class DepthStencilStateTest : public DawnTest {
protected:
- void SetUp() override {
- DawnTest::SetUp();
+ void TestSetUp() override {
+ DawnTest::TestSetUp();
dawn::TextureDescriptor renderTargetDescriptor;
renderTargetDescriptor.dimension = dawn::TextureDimension::e2D;
diff --git a/src/tests/end2end/DestroyTests.cpp b/src/tests/end2end/DestroyTests.cpp
index 2e82010..dc5c491 100644
--- a/src/tests/end2end/DestroyTests.cpp
+++ b/src/tests/end2end/DestroyTests.cpp
@@ -21,8 +21,8 @@
class DestroyTest : public DawnTest {
protected:
- void SetUp() override {
- DawnTest::SetUp();
+ void TestSetUp() override {
+ DawnTest::TestSetUp();
renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
diff --git a/src/tests/end2end/DrawIndexedIndirectTests.cpp b/src/tests/end2end/DrawIndexedIndirectTests.cpp
index e497d8b..a40dc5d 100644
--- a/src/tests/end2end/DrawIndexedIndirectTests.cpp
+++ b/src/tests/end2end/DrawIndexedIndirectTests.cpp
@@ -21,8 +21,8 @@
class DrawIndexedIndirectTest : public DawnTest {
protected:
- void SetUp() override {
- DawnTest::SetUp();
+ void TestSetUp() override {
+ DawnTest::TestSetUp();
renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
diff --git a/src/tests/end2end/DrawIndexedTests.cpp b/src/tests/end2end/DrawIndexedTests.cpp
index a484d1c..299c573 100644
--- a/src/tests/end2end/DrawIndexedTests.cpp
+++ b/src/tests/end2end/DrawIndexedTests.cpp
@@ -21,8 +21,8 @@
class DrawIndexedTest : public DawnTest {
protected:
- void SetUp() override {
- DawnTest::SetUp();
+ void TestSetUp() override {
+ DawnTest::TestSetUp();
renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
diff --git a/src/tests/end2end/DrawIndirectTests.cpp b/src/tests/end2end/DrawIndirectTests.cpp
index 47d554d..3f071a6 100644
--- a/src/tests/end2end/DrawIndirectTests.cpp
+++ b/src/tests/end2end/DrawIndirectTests.cpp
@@ -21,8 +21,8 @@
class DrawIndirectTest : public DawnTest {
protected:
- void SetUp() override {
- DawnTest::SetUp();
+ void TestSetUp() override {
+ DawnTest::TestSetUp();
renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
diff --git a/src/tests/end2end/DrawTests.cpp b/src/tests/end2end/DrawTests.cpp
index e12f817..6ca6f59 100644
--- a/src/tests/end2end/DrawTests.cpp
+++ b/src/tests/end2end/DrawTests.cpp
@@ -21,8 +21,8 @@
class DrawTest : public DawnTest {
protected:
- void SetUp() override {
- DawnTest::SetUp();
+ void TestSetUp() override {
+ DawnTest::TestSetUp();
renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
diff --git a/src/tests/end2end/DynamicBufferOffsetTests.cpp b/src/tests/end2end/DynamicBufferOffsetTests.cpp
index dfd8f11..ec78996 100644
--- a/src/tests/end2end/DynamicBufferOffsetTests.cpp
+++ b/src/tests/end2end/DynamicBufferOffsetTests.cpp
@@ -24,8 +24,8 @@
class DynamicBufferOffsetTests : public DawnTest {
protected:
- void SetUp() override {
- DawnTest::SetUp();
+ void TestSetUp() override {
+ DawnTest::TestSetUp();
// Mix up dynamic and non dynamic resources in one bind group and using not continuous
// binding number to cover more cases.
diff --git a/src/tests/end2end/FenceTests.cpp b/src/tests/end2end/FenceTests.cpp
index 4a06ea94..a637080 100644
--- a/src/tests/end2end/FenceTests.cpp
+++ b/src/tests/end2end/FenceTests.cpp
@@ -60,8 +60,8 @@
FenceTests() : mCallIndex(0) {
}
- void SetUp() override {
- DawnTest::SetUp();
+ void TestSetUp() override {
+ DawnTest::TestSetUp();
mockFenceOnCompletionCallback = std::make_unique<MockFenceOnCompletionCallback>();
mockPopErrorScopeCallback = std::make_unique<MockPopErrorScopeCallback>();
}
diff --git a/src/tests/end2end/IndexFormatTests.cpp b/src/tests/end2end/IndexFormatTests.cpp
index 1a286ab..cc321a8 100644
--- a/src/tests/end2end/IndexFormatTests.cpp
+++ b/src/tests/end2end/IndexFormatTests.cpp
@@ -22,8 +22,8 @@
class IndexFormatTest : public DawnTest {
protected:
- void SetUp() override {
- DawnTest::SetUp();
+ void TestSetUp() override {
+ DawnTest::TestSetUp();
renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
}
diff --git a/src/tests/end2end/MultisampledRenderingTests.cpp b/src/tests/end2end/MultisampledRenderingTests.cpp
index e662acc..9f04cd6 100644
--- a/src/tests/end2end/MultisampledRenderingTests.cpp
+++ b/src/tests/end2end/MultisampledRenderingTests.cpp
@@ -20,8 +20,8 @@
class MultisampledRenderingTest : public DawnTest {
protected:
- void SetUp() override {
- DawnTest::SetUp();
+ void TestSetUp() override {
+ DawnTest::TestSetUp();
InitTexturesForTest();
}
diff --git a/src/tests/end2end/NonzeroTextureCreationTests.cpp b/src/tests/end2end/NonzeroTextureCreationTests.cpp
index fb507b8..13f0428 100644
--- a/src/tests/end2end/NonzeroTextureCreationTests.cpp
+++ b/src/tests/end2end/NonzeroTextureCreationTests.cpp
@@ -19,8 +19,8 @@
class NonzeroTextureCreationTests : public DawnTest {
protected:
- void SetUp() override {
- DawnTest::SetUp();
+ void TestSetUp() override {
+ DawnTest::TestSetUp();
}
constexpr static uint32_t kSize = 128;
diff --git a/src/tests/end2end/OpArrayLengthTests.cpp b/src/tests/end2end/OpArrayLengthTests.cpp
index 8a02b75..770b973 100644
--- a/src/tests/end2end/OpArrayLengthTests.cpp
+++ b/src/tests/end2end/OpArrayLengthTests.cpp
@@ -20,8 +20,8 @@
class OpArrayLengthTest : public DawnTest {
protected:
- void SetUp() {
- DawnTest::SetUp();
+ void TestSetUp() {
+ DawnTest::TestSetUp();
// Create buffers of various size to check the length() implementation
dawn::BufferDescriptor bufferDesc;
diff --git a/src/tests/end2end/PrimitiveTopologyTests.cpp b/src/tests/end2end/PrimitiveTopologyTests.cpp
index 7d38267..e7647ba 100644
--- a/src/tests/end2end/PrimitiveTopologyTests.cpp
+++ b/src/tests/end2end/PrimitiveTopologyTests.cpp
@@ -145,8 +145,8 @@
class PrimitiveTopologyTest : public DawnTest {
protected:
- void SetUp() override {
- DawnTest::SetUp();
+ void TestSetUp() override {
+ DawnTest::TestSetUp();
renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
diff --git a/src/tests/end2end/RenderBundleTests.cpp b/src/tests/end2end/RenderBundleTests.cpp
index 3675cf9..7a9cc10 100644
--- a/src/tests/end2end/RenderBundleTests.cpp
+++ b/src/tests/end2end/RenderBundleTests.cpp
@@ -26,8 +26,8 @@
// tested in all other rendering tests.
class RenderBundleTest : public DawnTest {
protected:
- void SetUp() override {
- DawnTest::SetUp();
+ void TestSetUp() override {
+ DawnTest::TestSetUp();
renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
diff --git a/src/tests/end2end/RenderPassLoadOpTests.cpp b/src/tests/end2end/RenderPassLoadOpTests.cpp
index 9c0d9ea..9669235 100644
--- a/src/tests/end2end/RenderPassLoadOpTests.cpp
+++ b/src/tests/end2end/RenderPassLoadOpTests.cpp
@@ -56,8 +56,8 @@
class RenderPassLoadOpTests : public DawnTest {
protected:
- void SetUp() override {
- DawnTest::SetUp();
+ void TestSetUp() override {
+ DawnTest::TestSetUp();
dawn::TextureDescriptor descriptor;
descriptor.dimension = dawn::TextureDimension::e2D;
diff --git a/src/tests/end2end/RenderPassTests.cpp b/src/tests/end2end/RenderPassTests.cpp
index 8b147c5..cd38233 100644
--- a/src/tests/end2end/RenderPassTests.cpp
+++ b/src/tests/end2end/RenderPassTests.cpp
@@ -22,8 +22,8 @@
class RenderPassTest : public DawnTest {
protected:
- void SetUp() override {
- DawnTest::SetUp();
+ void TestSetUp() override {
+ DawnTest::TestSetUp();
// Shaders to draw a bottom-left triangle in blue.
mVSModule = utils::CreateShaderModule(device, utils::SingleShaderStage::Vertex, R"(
diff --git a/src/tests/end2end/SamplerTests.cpp b/src/tests/end2end/SamplerTests.cpp
index 5cf4666..0497679 100644
--- a/src/tests/end2end/SamplerTests.cpp
+++ b/src/tests/end2end/SamplerTests.cpp
@@ -38,8 +38,8 @@
class SamplerTest : public DawnTest {
protected:
- void SetUp() override {
- DawnTest::SetUp();
+ void TestSetUp() override {
+ DawnTest::TestSetUp();
mRenderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
mBindGroupLayout = utils::MakeBindGroupLayout(
diff --git a/src/tests/end2end/TextureFormatTests.cpp b/src/tests/end2end/TextureFormatTests.cpp
index 1aa316d..5dacaca 100644
--- a/src/tests/end2end/TextureFormatTests.cpp
+++ b/src/tests/end2end/TextureFormatTests.cpp
@@ -111,8 +111,8 @@
class TextureFormatTest : public DawnTest {
protected:
- void SetUp() {
- DawnTest::SetUp();
+ void TestSetUp() {
+ DawnTest::TestSetUp();
}
// Structure containing all the information that tests need to know about the format.
diff --git a/src/tests/end2end/TextureViewTests.cpp b/src/tests/end2end/TextureViewTests.cpp
index 40add9f..30cafbf 100644
--- a/src/tests/end2end/TextureViewTests.cpp
+++ b/src/tests/end2end/TextureViewTests.cpp
@@ -78,8 +78,8 @@
return static_cast<int>(level * 10) + static_cast<int>(layer + 1);
}
- void SetUp() override {
- DawnTest::SetUp();
+ void TestSetUp() override {
+ DawnTest::TestSetUp();
mRenderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
diff --git a/src/tests/end2end/TextureZeroInitTests.cpp b/src/tests/end2end/TextureZeroInitTests.cpp
index 2ae0a6d..5239438 100644
--- a/src/tests/end2end/TextureZeroInitTests.cpp
+++ b/src/tests/end2end/TextureZeroInitTests.cpp
@@ -20,8 +20,8 @@
class TextureZeroInitTest : public DawnTest {
protected:
- void SetUp() override {
- DawnTest::SetUp();
+ void TestSetUp() override {
+ DawnTest::TestSetUp();
}
dawn::TextureDescriptor CreateTextureDescriptor(uint32_t mipLevelCount,
uint32_t arrayLayerCount,
diff --git a/src/tests/end2end/VertexFormatTests.cpp b/src/tests/end2end/VertexFormatTests.cpp
index e27994a..6fb920b 100644
--- a/src/tests/end2end/VertexFormatTests.cpp
+++ b/src/tests/end2end/VertexFormatTests.cpp
@@ -46,8 +46,8 @@
class VertexFormatTest : public DawnTest {
protected:
- void SetUp() override {
- DawnTest::SetUp();
+ void TestSetUp() override {
+ DawnTest::TestSetUp();
renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
}
diff --git a/src/tests/end2end/VertexInputTests.cpp b/src/tests/end2end/VertexInputTests.cpp
index 477956d..94faf5b 100644
--- a/src/tests/end2end/VertexInputTests.cpp
+++ b/src/tests/end2end/VertexInputTests.cpp
@@ -35,8 +35,8 @@
class VertexInputTest : public DawnTest {
protected:
- void SetUp() override {
- DawnTest::SetUp();
+ void TestSetUp() override {
+ DawnTest::TestSetUp();
renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
}
diff --git a/src/tests/perf_tests/BufferUploadPerf.cpp b/src/tests/perf_tests/BufferUploadPerf.cpp
index 4692306..856838d 100644
--- a/src/tests/perf_tests/BufferUploadPerf.cpp
+++ b/src/tests/perf_tests/BufferUploadPerf.cpp
@@ -58,7 +58,7 @@
}
~BufferUploadPerf() override = default;
- void SetUp() override;
+ void TestSetUp() override;
private:
void Step() override;
@@ -67,8 +67,8 @@
std::vector<uint8_t> data;
};
-void BufferUploadPerf::SetUp() {
- DawnPerfTestWithParams<BufferUploadParams>::SetUp();
+void BufferUploadPerf::TestSetUp() {
+ DawnPerfTestWithParams<BufferUploadParams>::TestSetUp();
dawn::BufferDescriptor desc = {};
desc.size = kBufferSize;
diff --git a/src/tests/white_box/VulkanImageWrappingTests.cpp b/src/tests/white_box/VulkanImageWrappingTests.cpp
index 53e7166..5131d63 100644
--- a/src/tests/white_box/VulkanImageWrappingTests.cpp
+++ b/src/tests/white_box/VulkanImageWrappingTests.cpp
@@ -31,8 +31,7 @@
class VulkanImageWrappingTestBase : public DawnTest {
public:
- void SetUp() override {
- DawnTest::SetUp();
+ void TestSetUp() override {
if (UsesWire() || IsIntel()) {
return;
}
@@ -198,8 +197,8 @@
class VulkanImageWrappingValidationTests : public VulkanImageWrappingTestBase {
public:
- void SetUp() override {
- VulkanImageWrappingTestBase::SetUp();
+ void TestSetUp() override {
+ VulkanImageWrappingTestBase::TestSetUp();
if (UsesWire() || IsIntel()) {
return;
}
@@ -349,8 +348,8 @@
// These tests are skipped if the harness is using the wire.
class VulkanImageWrappingUsageTests : public VulkanImageWrappingTestBase {
public:
- void SetUp() override {
- VulkanImageWrappingTestBase::SetUp();
+ void TestSetUp() override {
+ VulkanImageWrappingTestBase::TestSetUp();
if (UsesWire() || IsIntel()) {
return;
}