Move QueueWriteBufferValidationTests to their own file.
They were in QueueSubmitValidationTests which was confusing.
Bug: None
Change-Id: I58406149e9e71feafaf111c35aed255c78b9b642
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/41726
Commit-Queue: Stephen White <senorblanco@chromium.org>
Auto-Submit: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Stephen White <senorblanco@chromium.org>
diff --git a/src/tests/BUILD.gn b/src/tests/BUILD.gn
index f2ab3bf..efc2aee 100644
--- a/src/tests/BUILD.gn
+++ b/src/tests/BUILD.gn
@@ -199,6 +199,7 @@
"unittests/validation/MultipleDeviceTests.cpp",
"unittests/validation/QueryValidationTests.cpp",
"unittests/validation/QueueSubmitValidationTests.cpp",
+ "unittests/validation/QueueWriteBufferValidationTests.cpp",
"unittests/validation/QueueWriteTextureValidationTests.cpp",
"unittests/validation/RenderBundleValidationTests.cpp",
"unittests/validation/RenderPassDescriptorValidationTests.cpp",
diff --git a/src/tests/unittests/validation/QueueSubmitValidationTests.cpp b/src/tests/unittests/validation/QueueSubmitValidationTests.cpp
index d6280ba..ed7fd7d 100644
--- a/src/tests/unittests/validation/QueueSubmitValidationTests.cpp
+++ b/src/tests/unittests/validation/QueueSubmitValidationTests.cpp
@@ -80,116 +80,6 @@
queue.Submit(1, &commands);
}
- class QueueWriteBufferValidationTest : public ValidationTest {
- private:
- void SetUp() override {
- ValidationTest::SetUp();
- queue = device.GetQueue();
- }
-
- protected:
- wgpu::Buffer CreateBuffer(uint64_t size) {
- wgpu::BufferDescriptor descriptor;
- descriptor.size = size;
- descriptor.usage = wgpu::BufferUsage::CopyDst;
- return device.CreateBuffer(&descriptor);
- }
-
- wgpu::Queue queue;
- };
-
- // Test the success case for WriteBuffer
- TEST_F(QueueWriteBufferValidationTest, Success) {
- wgpu::Buffer buf = CreateBuffer(4);
-
- uint32_t foo = 0x01020304;
- queue.WriteBuffer(buf, 0, &foo, sizeof(foo));
- }
-
- // Test error case for WriteBuffer out of bounds
- TEST_F(QueueWriteBufferValidationTest, OutOfBounds) {
- wgpu::Buffer buf = CreateBuffer(4);
-
- uint32_t foo[2] = {0, 0};
- ASSERT_DEVICE_ERROR(queue.WriteBuffer(buf, 0, foo, 8));
- }
-
- // Test error case for WriteBuffer out of bounds with an overflow
- TEST_F(QueueWriteBufferValidationTest, OutOfBoundsOverflow) {
- wgpu::Buffer buf = CreateBuffer(1024);
-
- uint32_t foo[2] = {0, 0};
-
- // An offset that when added to "4" would overflow to be zero and pass validation without
- // overflow checks.
- uint64_t offset = uint64_t(int64_t(0) - int64_t(4));
-
- ASSERT_DEVICE_ERROR(queue.WriteBuffer(buf, offset, foo, 4));
- }
-
- // Test error case for WriteBuffer with the wrong usage
- TEST_F(QueueWriteBufferValidationTest, WrongUsage) {
- wgpu::BufferDescriptor descriptor;
- descriptor.size = 4;
- descriptor.usage = wgpu::BufferUsage::Vertex;
- wgpu::Buffer buf = device.CreateBuffer(&descriptor);
-
- uint32_t foo = 0;
- ASSERT_DEVICE_ERROR(queue.WriteBuffer(buf, 0, &foo, sizeof(foo)));
- }
-
- // Test WriteBuffer with unaligned size
- TEST_F(QueueWriteBufferValidationTest, UnalignedSize) {
- wgpu::Buffer buf = CreateBuffer(4);
-
- uint16_t value = 123;
- ASSERT_DEVICE_ERROR(queue.WriteBuffer(buf, 0, &value, sizeof(value)));
- }
-
- // Test WriteBuffer with unaligned offset
- TEST_F(QueueWriteBufferValidationTest, UnalignedOffset) {
- wgpu::Buffer buf = CreateBuffer(8);
-
- uint32_t value = 0x01020304;
- ASSERT_DEVICE_ERROR(queue.WriteBuffer(buf, 2, &value, sizeof(value)));
- }
-
- // Test WriteBuffer with destroyed buffer
- TEST_F(QueueWriteBufferValidationTest, DestroyedBuffer) {
- wgpu::Buffer buf = CreateBuffer(4);
- buf.Destroy();
-
- uint32_t value = 0;
- ASSERT_DEVICE_ERROR(queue.WriteBuffer(buf, 0, &value, sizeof(value)));
- }
-
- // Test WriteBuffer with mapped buffer
- TEST_F(QueueWriteBufferValidationTest, MappedBuffer) {
- // mappedAtCreation
- {
- wgpu::BufferDescriptor descriptor;
- descriptor.size = 4;
- descriptor.usage = wgpu::BufferUsage::CopyDst;
- descriptor.mappedAtCreation = true;
- wgpu::Buffer buffer = device.CreateBuffer(&descriptor);
-
- uint32_t value = 0;
- ASSERT_DEVICE_ERROR(queue.WriteBuffer(buffer, 0, &value, sizeof(value)));
- }
-
- // MapAsync
- {
- wgpu::BufferDescriptor descriptor;
- descriptor.size = 4;
- descriptor.usage = wgpu::BufferUsage::CopyDst | wgpu::BufferUsage::MapRead;
- wgpu::Buffer buf = device.CreateBuffer(&descriptor);
-
- buf.MapAsync(wgpu::MapMode::Read, 0, 4, nullptr, nullptr);
- uint32_t value = 0;
- ASSERT_DEVICE_ERROR(queue.WriteBuffer(buf, 0, &value, sizeof(value)));
- }
- }
-
// Test it is invalid to submit a command buffer twice
TEST_F(QueueSubmitValidationTest, CommandBufferSubmittedTwice) {
wgpu::CommandBuffer commandBuffer = device.CreateCommandEncoder().Finish();
diff --git a/src/tests/unittests/validation/QueueWriteBufferValidationTests.cpp b/src/tests/unittests/validation/QueueWriteBufferValidationTests.cpp
new file mode 100644
index 0000000..e991e71
--- /dev/null
+++ b/src/tests/unittests/validation/QueueWriteBufferValidationTests.cpp
@@ -0,0 +1,127 @@
+// 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 "tests/unittests/validation/ValidationTest.h"
+
+#include "utils/WGPUHelpers.h"
+
+class QueueWriteBufferValidationTest : public ValidationTest {
+ private:
+ void SetUp() override {
+ ValidationTest::SetUp();
+ queue = device.GetQueue();
+ }
+
+ protected:
+ wgpu::Buffer CreateBuffer(uint64_t size) {
+ wgpu::BufferDescriptor descriptor;
+ descriptor.size = size;
+ descriptor.usage = wgpu::BufferUsage::CopyDst;
+ return device.CreateBuffer(&descriptor);
+ }
+
+ wgpu::Queue queue;
+};
+
+// Test the success case for WriteBuffer
+TEST_F(QueueWriteBufferValidationTest, Success) {
+ wgpu::Buffer buf = CreateBuffer(4);
+
+ uint32_t foo = 0x01020304;
+ queue.WriteBuffer(buf, 0, &foo, sizeof(foo));
+}
+
+// Test error case for WriteBuffer out of bounds
+TEST_F(QueueWriteBufferValidationTest, OutOfBounds) {
+ wgpu::Buffer buf = CreateBuffer(4);
+
+ uint32_t foo[2] = {0, 0};
+ ASSERT_DEVICE_ERROR(queue.WriteBuffer(buf, 0, foo, 8));
+}
+
+// Test error case for WriteBuffer out of bounds with an overflow
+TEST_F(QueueWriteBufferValidationTest, OutOfBoundsOverflow) {
+ wgpu::Buffer buf = CreateBuffer(1024);
+
+ uint32_t foo[2] = {0, 0};
+
+ // An offset that when added to "4" would overflow to be zero and pass validation without
+ // overflow checks.
+ uint64_t offset = uint64_t(int64_t(0) - int64_t(4));
+
+ ASSERT_DEVICE_ERROR(queue.WriteBuffer(buf, offset, foo, 4));
+}
+
+// Test error case for WriteBuffer with the wrong usage
+TEST_F(QueueWriteBufferValidationTest, WrongUsage) {
+ wgpu::BufferDescriptor descriptor;
+ descriptor.size = 4;
+ descriptor.usage = wgpu::BufferUsage::Vertex;
+ wgpu::Buffer buf = device.CreateBuffer(&descriptor);
+
+ uint32_t foo = 0;
+ ASSERT_DEVICE_ERROR(queue.WriteBuffer(buf, 0, &foo, sizeof(foo)));
+}
+
+// Test WriteBuffer with unaligned size
+TEST_F(QueueWriteBufferValidationTest, UnalignedSize) {
+ wgpu::Buffer buf = CreateBuffer(4);
+
+ uint16_t value = 123;
+ ASSERT_DEVICE_ERROR(queue.WriteBuffer(buf, 0, &value, sizeof(value)));
+}
+
+// Test WriteBuffer with unaligned offset
+TEST_F(QueueWriteBufferValidationTest, UnalignedOffset) {
+ wgpu::Buffer buf = CreateBuffer(8);
+
+ uint32_t value = 0x01020304;
+ ASSERT_DEVICE_ERROR(queue.WriteBuffer(buf, 2, &value, sizeof(value)));
+}
+
+// Test WriteBuffer with destroyed buffer
+TEST_F(QueueWriteBufferValidationTest, DestroyedBuffer) {
+ wgpu::Buffer buf = CreateBuffer(4);
+ buf.Destroy();
+
+ uint32_t value = 0;
+ ASSERT_DEVICE_ERROR(queue.WriteBuffer(buf, 0, &value, sizeof(value)));
+}
+
+// Test WriteBuffer with mapped buffer
+TEST_F(QueueWriteBufferValidationTest, MappedBuffer) {
+ // mappedAtCreation
+ {
+ wgpu::BufferDescriptor descriptor;
+ descriptor.size = 4;
+ descriptor.usage = wgpu::BufferUsage::CopyDst;
+ descriptor.mappedAtCreation = true;
+ wgpu::Buffer buffer = device.CreateBuffer(&descriptor);
+
+ uint32_t value = 0;
+ ASSERT_DEVICE_ERROR(queue.WriteBuffer(buffer, 0, &value, sizeof(value)));
+ }
+
+ // MapAsync
+ {
+ wgpu::BufferDescriptor descriptor;
+ descriptor.size = 4;
+ descriptor.usage = wgpu::BufferUsage::CopyDst | wgpu::BufferUsage::MapRead;
+ wgpu::Buffer buf = device.CreateBuffer(&descriptor);
+
+ buf.MapAsync(wgpu::MapMode::Read, 0, 4, nullptr, nullptr);
+ uint32_t value = 0;
+ ASSERT_DEVICE_ERROR(queue.WriteBuffer(buf, 0, &value, sizeof(value)));
+ }
+}