Moves ObjectCachingTest into unittest/validation.
- Prepares for changes to caching that makes the simple pointer
equalities no longer valid, hence moving it into validation tests
where we can do any necesary casting.
- Consolidates some similar tests across files.
Bug: dawn:1933
Change-Id: I6bea3abebc1e562c7145b6bf19b11d182487463e
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/143520
Reviewed-by: Austin Eng <enga@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Loko Kung <lokokung@google.com>
Reviewed-by: Brandon Jones <bajones@chromium.org>
diff --git a/src/dawn/tests/BUILD.gn b/src/dawn/tests/BUILD.gn
index 201e441..fca9fc3 100644
--- a/src/dawn/tests/BUILD.gn
+++ b/src/dawn/tests/BUILD.gn
@@ -357,6 +357,7 @@
"unittests/validation/LabelTests.cpp",
"unittests/validation/MinimumBufferSizeValidationTests.cpp",
"unittests/validation/MultipleDeviceTests.cpp",
+ "unittests/validation/ObjectCachingTests.cpp",
"unittests/validation/OverridableConstantsValidationTests.cpp",
"unittests/validation/PipelineAndPassCompatibilityTests.cpp",
"unittests/validation/QueryValidationTests.cpp",
@@ -547,7 +548,6 @@
"end2end/MultithreadTests.cpp",
"end2end/NonzeroBufferCreationTests.cpp",
"end2end/NonzeroTextureCreationTests.cpp",
- "end2end/ObjectCachingTests.cpp",
"end2end/OpArrayLengthTests.cpp",
"end2end/PhysicalDeviceDiscoveryTests.cpp",
"end2end/PipelineCachingTests.cpp",
diff --git a/src/dawn/tests/unittests/validation/MinimumBufferSizeValidationTests.cpp b/src/dawn/tests/unittests/validation/MinimumBufferSizeValidationTests.cpp
index d52dacd..a0e219e 100644
--- a/src/dawn/tests/unittests/validation/MinimumBufferSizeValidationTests.cpp
+++ b/src/dawn/tests/unittests/validation/MinimumBufferSizeValidationTests.cpp
@@ -406,22 +406,6 @@
});
}
-// Check two layouts with different minimum size are unequal
-TEST_F(MinBufferSizeBindGroupCreationTests, LayoutEquality) {
- // Returning the same pointer is an implementation detail of Dawn Native.
- // It is not the same semantic with the Wire.
- DAWN_SKIP_TEST_IF(UsesWire());
-
- auto MakeLayout = [&](uint64_t size) {
- return utils::MakeBindGroupLayout(
- device,
- {{0, wgpu::ShaderStage::Compute, wgpu::BufferBindingType::Uniform, false, size}});
- };
-
- EXPECT_EQ(MakeLayout(0).Get(), MakeLayout(0).Get());
- EXPECT_NE(MakeLayout(0).Get(), MakeLayout(4).Get());
-}
-
// The check between the bindgroup binding sizes and the required pipeline sizes at draw time
class MinBufferSizeDrawTimeValidationTests : public MinBufferSizeTestsBase {};
diff --git a/src/dawn/tests/end2end/ObjectCachingTests.cpp b/src/dawn/tests/unittests/validation/ObjectCachingTests.cpp
similarity index 85%
rename from src/dawn/tests/end2end/ObjectCachingTests.cpp
rename to src/dawn/tests/unittests/validation/ObjectCachingTests.cpp
index d9c768f..b01c69c 100644
--- a/src/dawn/tests/end2end/ObjectCachingTests.cpp
+++ b/src/dawn/tests/unittests/validation/ObjectCachingTests.cpp
@@ -14,7 +14,7 @@
#include <vector>
-#include "dawn/tests/DawnTest.h"
+#include "dawn/tests/unittests/validation/ValidationTest.h"
#include "dawn/utils/ComboRenderPipelineDescriptor.h"
#include "dawn/utils/WGPUHelpers.h"
@@ -22,10 +22,17 @@
namespace dawn {
namespace {
-class ObjectCachingTest : public DawnTest {};
+// These tests works assuming Dawn Native's object deduplication. Comparing the pointer is
+// exploiting an implementation detail of Dawn Native.
+class ObjectCachingTest : public ValidationTest {
+ void SetUp() override {
+ ValidationTest::SetUp();
+ DAWN_SKIP_TEST_IF(UsesWire());
+ }
+};
// Test that BindGroupLayouts are correctly deduplicated.
-TEST_P(ObjectCachingTest, BindGroupLayoutDeduplication) {
+TEST_F(ObjectCachingTest, BindGroupLayoutDeduplication) {
wgpu::BindGroupLayout bgl = utils::MakeBindGroupLayout(
device, {{1, wgpu::ShaderStage::Fragment, wgpu::BufferBindingType::Uniform}});
wgpu::BindGroupLayout sameBgl = utils::MakeBindGroupLayout(
@@ -34,11 +41,11 @@
device, {{1, wgpu::ShaderStage::Vertex, wgpu::BufferBindingType::Uniform}});
EXPECT_NE(bgl.Get(), otherBgl.Get());
- EXPECT_EQ(bgl.Get() == sameBgl.Get(), !UsesWire());
+ EXPECT_EQ(bgl.Get(), sameBgl.Get());
}
// Test that two similar bind group layouts won't refer to the same one if they differ by dynamic.
-TEST_P(ObjectCachingTest, BindGroupLayoutDynamic) {
+TEST_F(ObjectCachingTest, BindGroupLayoutDynamic) {
wgpu::BindGroupLayout bgl = utils::MakeBindGroupLayout(
device, {{1, wgpu::ShaderStage::Fragment, wgpu::BufferBindingType::Uniform, true}});
wgpu::BindGroupLayout sameBgl = utils::MakeBindGroupLayout(
@@ -47,12 +54,25 @@
device, {{1, wgpu::ShaderStage::Fragment, wgpu::BufferBindingType::Uniform, false}});
EXPECT_NE(bgl.Get(), otherBgl.Get());
- EXPECT_EQ(bgl.Get() == sameBgl.Get(), !UsesWire());
+ EXPECT_EQ(bgl.Get(), sameBgl.Get());
+}
+
+// Test that two similar bind group layouts won't refer to the same one if they differ by min size.
+TEST_F(ObjectCachingTest, BindGroupLayoutMinBufferSize) {
+ wgpu::BindGroupLayout bgl = utils::MakeBindGroupLayout(
+ device, {{1, wgpu::ShaderStage::Compute, wgpu::BufferBindingType::Uniform, false, 0}});
+ wgpu::BindGroupLayout sameBgl = utils::MakeBindGroupLayout(
+ device, {{1, wgpu::ShaderStage::Compute, wgpu::BufferBindingType::Uniform, false, 0}});
+ wgpu::BindGroupLayout otherBgl = utils::MakeBindGroupLayout(
+ device, {{1, wgpu::ShaderStage::Compute, wgpu::BufferBindingType::Uniform, false, 4}});
+
+ EXPECT_NE(bgl.Get(), otherBgl.Get());
+ EXPECT_EQ(bgl.Get(), sameBgl.Get());
}
// Test that two similar bind group layouts won't refer to the same one if they differ by
// textureComponentType
-TEST_P(ObjectCachingTest, BindGroupLayoutTextureComponentType) {
+TEST_F(ObjectCachingTest, BindGroupLayoutTextureComponentType) {
wgpu::BindGroupLayout bgl = utils::MakeBindGroupLayout(
device, {{1, wgpu::ShaderStage::Fragment, wgpu::TextureSampleType::Float}});
wgpu::BindGroupLayout sameBgl = utils::MakeBindGroupLayout(
@@ -61,12 +81,12 @@
device, {{1, wgpu::ShaderStage::Fragment, wgpu::TextureSampleType::Uint}});
EXPECT_NE(bgl.Get(), otherBgl.Get());
- EXPECT_EQ(bgl.Get() == sameBgl.Get(), !UsesWire());
+ EXPECT_EQ(bgl.Get(), sameBgl.Get());
}
// Test that two similar bind group layouts won't refer to the same one if they differ by
// viewDimension
-TEST_P(ObjectCachingTest, BindGroupLayoutViewDimension) {
+TEST_F(ObjectCachingTest, BindGroupLayoutViewDimension) {
wgpu::BindGroupLayout bgl = utils::MakeBindGroupLayout(
device, {{1, wgpu::ShaderStage::Fragment, wgpu::TextureSampleType::Float}});
wgpu::BindGroupLayout sameBgl = utils::MakeBindGroupLayout(
@@ -76,21 +96,11 @@
wgpu::TextureViewDimension::e2DArray}});
EXPECT_NE(bgl.Get(), otherBgl.Get());
- EXPECT_EQ(bgl.Get() == sameBgl.Get(), !UsesWire());
-}
-
-// Test that an error object doesn't try to uncache itself
-TEST_P(ObjectCachingTest, ErrorObjectDoesntUncache) {
- DAWN_TEST_UNSUPPORTED_IF(HasToggleEnabled("skip_validation"));
-
- ASSERT_DEVICE_ERROR(
- wgpu::BindGroupLayout bgl = utils::MakeBindGroupLayout(
- device, {{0, wgpu::ShaderStage::Fragment, wgpu::BufferBindingType::Uniform},
- {0, wgpu::ShaderStage::Fragment, wgpu::BufferBindingType::Uniform}}));
+ EXPECT_EQ(bgl.Get(), sameBgl.Get());
}
// Test that PipelineLayouts are correctly deduplicated.
-TEST_P(ObjectCachingTest, PipelineLayoutDeduplication) {
+TEST_F(ObjectCachingTest, PipelineLayoutDeduplication) {
wgpu::BindGroupLayout bgl = utils::MakeBindGroupLayout(
device, {{1, wgpu::ShaderStage::Fragment, wgpu::BufferBindingType::Uniform}});
wgpu::BindGroupLayout otherBgl = utils::MakeBindGroupLayout(
@@ -103,11 +113,11 @@
EXPECT_NE(pl.Get(), otherPl1.Get());
EXPECT_NE(pl.Get(), otherPl2.Get());
- EXPECT_EQ(pl.Get() == samePl.Get(), !UsesWire());
+ EXPECT_EQ(pl.Get(), samePl.Get());
}
// Test that ShaderModules are correctly deduplicated.
-TEST_P(ObjectCachingTest, ShaderModuleDeduplication) {
+TEST_F(ObjectCachingTest, ShaderModuleDeduplication) {
wgpu::ShaderModule module = utils::CreateShaderModule(device, R"(
@fragment fn main() -> @location(0) vec4f {
return vec4f(0.0, 1.0, 0.0, 1.0);
@@ -122,11 +132,11 @@
})");
EXPECT_NE(module.Get(), otherModule.Get());
- EXPECT_EQ(module.Get() == sameModule.Get(), !UsesWire());
+ EXPECT_EQ(module.Get(), sameModule.Get());
}
// Test that ComputePipeline are correctly deduplicated wrt. their ShaderModule
-TEST_P(ObjectCachingTest, ComputePipelineDeduplicationOnShaderModule) {
+TEST_F(ObjectCachingTest, ComputePipelineDeduplicationOnShaderModule) {
wgpu::ShaderModule module = utils::CreateShaderModule(device, R"(
var<workgroup> i : u32;
@compute @workgroup_size(1) fn main() {
@@ -142,7 +152,7 @@
})");
EXPECT_NE(module.Get(), otherModule.Get());
- EXPECT_EQ(module.Get() == sameModule.Get(), !UsesWire());
+ EXPECT_EQ(module.Get(), sameModule.Get());
wgpu::PipelineLayout layout = utils::MakeBasicPipelineLayout(device, nullptr);
@@ -160,11 +170,11 @@
wgpu::ComputePipeline otherPipeline = device.CreateComputePipeline(&desc);
EXPECT_NE(pipeline.Get(), otherPipeline.Get());
- EXPECT_EQ(pipeline.Get() == samePipeline.Get(), !UsesWire());
+ EXPECT_EQ(pipeline.Get(), samePipeline.Get());
}
// Test that ComputePipeline are correctly deduplicated wrt. their constants override values
-TEST_P(ObjectCachingTest, ComputePipelineDeduplicationOnOverrides) {
+TEST_F(ObjectCachingTest, ComputePipelineDeduplicationOnOverrides) {
wgpu::ShaderModule module = utils::CreateShaderModule(device, R"(
override x: u32 = 1u;
var<workgroup> i : u32;
@@ -200,11 +210,11 @@
EXPECT_NE(pipeline.Get(), otherPipeline1.Get());
EXPECT_NE(pipeline.Get(), otherPipeline2.Get());
- EXPECT_EQ(pipeline.Get() == samePipeline.Get(), !UsesWire());
+ EXPECT_EQ(pipeline.Get(), samePipeline.Get());
}
// Test that ComputePipeline are correctly deduplicated wrt. their layout
-TEST_P(ObjectCachingTest, ComputePipelineDeduplicationOnLayout) {
+TEST_F(ObjectCachingTest, ComputePipelineDeduplicationOnLayout) {
wgpu::BindGroupLayout bgl = utils::MakeBindGroupLayout(
device, {{1, wgpu::ShaderStage::Fragment, wgpu::BufferBindingType::Uniform}});
wgpu::BindGroupLayout otherBgl = utils::MakeBindGroupLayout(
@@ -215,7 +225,7 @@
wgpu::PipelineLayout otherPl = utils::MakeBasicPipelineLayout(device, nullptr);
EXPECT_NE(pl.Get(), otherPl.Get());
- EXPECT_EQ(pl.Get() == samePl.Get(), !UsesWire());
+ EXPECT_EQ(pl.Get(), samePl.Get());
wgpu::ComputePipelineDescriptor desc;
desc.compute.entryPoint = "main";
@@ -235,11 +245,11 @@
wgpu::ComputePipeline otherPipeline = device.CreateComputePipeline(&desc);
EXPECT_NE(pipeline.Get(), otherPipeline.Get());
- EXPECT_EQ(pipeline.Get() == samePipeline.Get(), !UsesWire());
+ EXPECT_EQ(pipeline.Get(), samePipeline.Get());
}
// Test that RenderPipelines are correctly deduplicated wrt. their layout
-TEST_P(ObjectCachingTest, RenderPipelineDeduplicationOnLayout) {
+TEST_F(ObjectCachingTest, RenderPipelineDeduplicationOnLayout) {
wgpu::BindGroupLayout bgl = utils::MakeBindGroupLayout(
device, {{1, wgpu::ShaderStage::Fragment, wgpu::BufferBindingType::Uniform}});
wgpu::BindGroupLayout otherBgl = utils::MakeBindGroupLayout(
@@ -250,7 +260,7 @@
wgpu::PipelineLayout otherPl = utils::MakeBasicPipelineLayout(device, nullptr);
EXPECT_NE(pl.Get(), otherPl.Get());
- EXPECT_EQ(pl.Get() == samePl.Get(), !UsesWire());
+ EXPECT_EQ(pl.Get(), samePl.Get());
utils::ComboRenderPipelineDescriptor desc;
desc.cTargets[0].writeMask = wgpu::ColorWriteMask::None;
@@ -272,11 +282,11 @@
wgpu::RenderPipeline otherPipeline = device.CreateRenderPipeline(&desc);
EXPECT_NE(pipeline.Get(), otherPipeline.Get());
- EXPECT_EQ(pipeline.Get() == samePipeline.Get(), !UsesWire());
+ EXPECT_EQ(pipeline.Get(), samePipeline.Get());
}
// Test that RenderPipelines are correctly deduplicated wrt. their vertex module
-TEST_P(ObjectCachingTest, RenderPipelineDeduplicationOnVertexModule) {
+TEST_F(ObjectCachingTest, RenderPipelineDeduplicationOnVertexModule) {
wgpu::ShaderModule module = utils::CreateShaderModule(device, R"(
@vertex fn main() -> @builtin(position) vec4f {
return vec4f(0.0, 0.0, 0.0, 0.0);
@@ -291,7 +301,7 @@
})");
EXPECT_NE(module.Get(), otherModule.Get());
- EXPECT_EQ(module.Get() == sameModule.Get(), !UsesWire());
+ EXPECT_EQ(module.Get(), sameModule.Get());
utils::ComboRenderPipelineDescriptor desc;
desc.cTargets[0].writeMask = wgpu::ColorWriteMask::None;
@@ -309,11 +319,11 @@
wgpu::RenderPipeline otherPipeline = device.CreateRenderPipeline(&desc);
EXPECT_NE(pipeline.Get(), otherPipeline.Get());
- EXPECT_EQ(pipeline.Get() == samePipeline.Get(), !UsesWire());
+ EXPECT_EQ(pipeline.Get(), samePipeline.Get());
}
// Test that RenderPipelines are correctly deduplicated wrt. their fragment module
-TEST_P(ObjectCachingTest, RenderPipelineDeduplicationOnFragmentModule) {
+TEST_F(ObjectCachingTest, RenderPipelineDeduplicationOnFragmentModule) {
wgpu::ShaderModule module = utils::CreateShaderModule(device, R"(
@fragment fn main() {
})");
@@ -326,7 +336,7 @@
})");
EXPECT_NE(module.Get(), otherModule.Get());
- EXPECT_EQ(module.Get() == sameModule.Get(), !UsesWire());
+ EXPECT_EQ(module.Get(), sameModule.Get());
utils::ComboRenderPipelineDescriptor desc;
desc.vertex.module = utils::CreateShaderModule(device, R"(
@@ -345,11 +355,11 @@
wgpu::RenderPipeline otherPipeline = device.CreateRenderPipeline(&desc);
EXPECT_NE(pipeline.Get(), otherPipeline.Get());
- EXPECT_EQ(pipeline.Get() == samePipeline.Get(), !UsesWire());
+ EXPECT_EQ(pipeline.Get(), samePipeline.Get());
}
// Test that Renderpipelines are correctly deduplicated wrt. their constants override values
-TEST_P(ObjectCachingTest, RenderPipelineDeduplicationOnOverrides) {
+TEST_F(ObjectCachingTest, RenderPipelineDeduplicationOnOverrides) {
wgpu::ShaderModule module = utils::CreateShaderModule(device, R"(
override a: f32 = 1.0;
@vertex fn vertexMain() -> @builtin(position) vec4f {
@@ -387,11 +397,11 @@
EXPECT_NE(pipeline.Get(), otherPipeline1.Get());
EXPECT_NE(pipeline.Get(), otherPipeline2.Get());
- EXPECT_EQ(pipeline.Get() == samePipeline.Get(), !UsesWire());
+ EXPECT_EQ(pipeline.Get(), samePipeline.Get());
}
// Test that Samplers are correctly deduplicated.
-TEST_P(ObjectCachingTest, SamplerDeduplication) {
+TEST_F(ObjectCachingTest, SamplerDeduplication) {
wgpu::SamplerDescriptor samplerDesc;
wgpu::Sampler sampler = device.CreateSampler(&samplerDesc);
@@ -444,16 +454,8 @@
EXPECT_NE(sampler.Get(), otherSamplerLodMinClamp.Get());
EXPECT_NE(sampler.Get(), otherSamplerLodMaxClamp.Get());
EXPECT_NE(sampler.Get(), otherSamplerCompareFunction.Get());
- EXPECT_EQ(sampler.Get() == sameSampler.Get(), !UsesWire());
+ EXPECT_EQ(sampler.Get(), sameSampler.Get());
}
-DAWN_INSTANTIATE_TEST(ObjectCachingTest,
- D3D11Backend(),
- D3D12Backend(),
- MetalBackend(),
- OpenGLBackend(),
- OpenGLESBackend(),
- VulkanBackend());
-
} // anonymous namespace
} // namespace dawn