Resource Management 4: Stress test buffer writes
Add test for many buffer writes.
BUG=dawn:27
Change-Id: I026c3b9a6d30c7c6634b89db9798902b036150c3
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9280
Commit-Queue: Bryan Bernhart <bryan.bernhart@intel.com>
Reviewed-by: Austin Eng <enga@chromium.org>
diff --git a/src/tests/end2end/BufferTests.cpp b/src/tests/end2end/BufferTests.cpp
index 3e6a8d5..9315583 100644
--- a/src/tests/end2end/BufferTests.cpp
+++ b/src/tests/end2end/BufferTests.cpp
@@ -100,7 +100,11 @@
WaitABit();
}
- return mappedData;
+ // Ensure the prior write's status is updated.
+ void* resultPointer = mappedData;
+ mappedData = nullptr;
+
+ return resultPointer;
}
private:
@@ -142,6 +146,35 @@
EXPECT_BUFFER_U32_RANGE_EQ(myData.data(), buffer, 0, kDataSize);
}
+// Stress test mapping many buffers.
+TEST_P(BufferMapWriteTests, ManyWrites) {
+ constexpr uint32_t kDataSize = 1000;
+ std::vector<uint32_t> myData;
+ for (uint32_t i = 0; i < kDataSize; ++i) {
+ myData.push_back(i);
+ }
+
+ std::vector<dawn::Buffer> buffers;
+
+ constexpr uint32_t kBuffers = 100;
+ for (uint32_t i = 0; i < kBuffers; ++i) {
+ dawn::BufferDescriptor descriptor;
+ descriptor.size = static_cast<uint32_t>(kDataSize * sizeof(uint32_t));
+ descriptor.usage = dawn::BufferUsageBit::MapWrite | dawn::BufferUsageBit::CopySrc;
+ dawn::Buffer buffer = device.CreateBuffer(&descriptor);
+
+ void* mappedData = MapWriteAsyncAndWait(buffer);
+ memcpy(mappedData, myData.data(), kDataSize * sizeof(uint32_t));
+ buffer.Unmap();
+
+ buffers.push_back(buffer); // Destroy buffers upon return.
+ }
+
+ for (uint32_t i = 0; i < kBuffers; ++i) {
+ EXPECT_BUFFER_U32_RANGE_EQ(myData.data(), buffers[i], 0, kDataSize);
+ }
+}
+
DAWN_INSTANTIATE_TEST(BufferMapWriteTests, D3D12Backend, MetalBackend, OpenGLBackend, VulkanBackend);
class BufferSetSubDataTests : public DawnTest {