mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-16 16:37:08 +00:00
WebGPU error handling 3: CommandEncoder for validation tests
BUG=dawn:8 Change-Id: I16ad900387adcbaf793177e97a96a5f19dcc47a0 Reviewed-on: https://dawn-review.googlesource.com/c/4760 Commit-Queue: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Kai Ninomiya <kainino@chromium.org>
This commit is contained in:
committed by
Commit Bot service account
parent
e1f0d4e639
commit
695b68d100
@@ -21,8 +21,7 @@ class CommandBufferValidationTest : public ValidationTest {
|
||||
|
||||
// Test for an empty command buffer
|
||||
TEST_F(CommandBufferValidationTest, Empty) {
|
||||
AssertWillBeSuccess(device.CreateCommandBufferBuilder())
|
||||
.GetResult();
|
||||
device.CreateCommandEncoder().Finish();
|
||||
}
|
||||
|
||||
// Test that a command buffer cannot be ended mid render pass
|
||||
@@ -31,27 +30,27 @@ TEST_F(CommandBufferValidationTest, EndedMidRenderPass) {
|
||||
|
||||
// Control case, command buffer ended after the pass is ended.
|
||||
{
|
||||
dawn::CommandBufferBuilder builder = AssertWillBeSuccess(device.CreateCommandBufferBuilder());
|
||||
dawn::RenderPassEncoder pass = builder.BeginRenderPass(renderpass);
|
||||
dawn::CommandEncoder encoder = device.CreateCommandEncoder();
|
||||
dawn::RenderPassEncoder pass = encoder.BeginRenderPass(renderpass);
|
||||
pass.EndPass();
|
||||
builder.GetResult();
|
||||
encoder.Finish();
|
||||
}
|
||||
|
||||
// Error case, command buffer ended mid-pass.
|
||||
{
|
||||
dawn::CommandBufferBuilder builder = AssertWillBeError(device.CreateCommandBufferBuilder());
|
||||
dawn::RenderPassEncoder pass = builder.BeginRenderPass(renderpass);
|
||||
builder.GetResult();
|
||||
dawn::CommandEncoder encoder = device.CreateCommandEncoder();
|
||||
dawn::RenderPassEncoder pass = encoder.BeginRenderPass(renderpass);
|
||||
ASSERT_DEVICE_ERROR(encoder.Finish());
|
||||
}
|
||||
|
||||
// Error case, command buffer ended mid-pass. Trying to use encoders after GetResult
|
||||
// Error case, command buffer ended mid-pass. Trying to use encoders after Finish
|
||||
// should fail too.
|
||||
{
|
||||
dawn::CommandBufferBuilder builder = AssertWillBeError(device.CreateCommandBufferBuilder());
|
||||
dawn::RenderPassEncoder pass = builder.BeginRenderPass(renderpass);
|
||||
builder.GetResult();
|
||||
dawn::CommandEncoder encoder = device.CreateCommandEncoder();
|
||||
dawn::RenderPassEncoder pass = encoder.BeginRenderPass(renderpass);
|
||||
ASSERT_DEVICE_ERROR(encoder.Finish());
|
||||
// TODO(cwallez@chromium.org) this should probably be a device error, but currently it
|
||||
// produces a builder error.
|
||||
// produces a encoder error.
|
||||
pass.EndPass();
|
||||
}
|
||||
}
|
||||
@@ -60,27 +59,27 @@ TEST_F(CommandBufferValidationTest, EndedMidRenderPass) {
|
||||
TEST_F(CommandBufferValidationTest, EndedMidComputePass) {
|
||||
// Control case, command buffer ended after the pass is ended.
|
||||
{
|
||||
dawn::CommandBufferBuilder builder = AssertWillBeSuccess(device.CreateCommandBufferBuilder());
|
||||
dawn::ComputePassEncoder pass = builder.BeginComputePass();
|
||||
dawn::CommandEncoder encoder = device.CreateCommandEncoder();
|
||||
dawn::ComputePassEncoder pass = encoder.BeginComputePass();
|
||||
pass.EndPass();
|
||||
builder.GetResult();
|
||||
encoder.Finish();
|
||||
}
|
||||
|
||||
// Error case, command buffer ended mid-pass.
|
||||
{
|
||||
dawn::CommandBufferBuilder builder = AssertWillBeError(device.CreateCommandBufferBuilder());
|
||||
dawn::ComputePassEncoder pass = builder.BeginComputePass();
|
||||
builder.GetResult();
|
||||
dawn::CommandEncoder encoder = device.CreateCommandEncoder();
|
||||
dawn::ComputePassEncoder pass = encoder.BeginComputePass();
|
||||
ASSERT_DEVICE_ERROR(encoder.Finish());
|
||||
}
|
||||
|
||||
// Error case, command buffer ended mid-pass. Trying to use encoders after GetResult
|
||||
// Error case, command buffer ended mid-pass. Trying to use encoders after Finish
|
||||
// should fail too.
|
||||
{
|
||||
dawn::CommandBufferBuilder builder = AssertWillBeError(device.CreateCommandBufferBuilder());
|
||||
dawn::ComputePassEncoder pass = builder.BeginComputePass();
|
||||
builder.GetResult();
|
||||
dawn::CommandEncoder encoder = device.CreateCommandEncoder();
|
||||
dawn::ComputePassEncoder pass = encoder.BeginComputePass();
|
||||
ASSERT_DEVICE_ERROR(encoder.Finish());
|
||||
// TODO(cwallez@chromium.org) this should probably be a device error, but currently it
|
||||
// produces a builder error.
|
||||
// produces a encoder error.
|
||||
pass.EndPass();
|
||||
}
|
||||
}
|
||||
@@ -91,21 +90,21 @@ TEST_F(CommandBufferValidationTest, RenderPassEndedTwice) {
|
||||
|
||||
// Control case, pass is ended once
|
||||
{
|
||||
dawn::CommandBufferBuilder builder = AssertWillBeSuccess(device.CreateCommandBufferBuilder());
|
||||
dawn::RenderPassEncoder pass = builder.BeginRenderPass(renderpass);
|
||||
dawn::CommandEncoder encoder = device.CreateCommandEncoder();
|
||||
dawn::RenderPassEncoder pass = encoder.BeginRenderPass(renderpass);
|
||||
pass.EndPass();
|
||||
builder.GetResult();
|
||||
encoder.Finish();
|
||||
}
|
||||
|
||||
// Error case, pass ended twice
|
||||
{
|
||||
dawn::CommandBufferBuilder builder = AssertWillBeError(device.CreateCommandBufferBuilder());
|
||||
dawn::RenderPassEncoder pass = builder.BeginRenderPass(renderpass);
|
||||
dawn::CommandEncoder encoder = device.CreateCommandEncoder();
|
||||
dawn::RenderPassEncoder pass = encoder.BeginRenderPass(renderpass);
|
||||
pass.EndPass();
|
||||
// TODO(cwallez@chromium.org) this should probably be a device error, but currently it
|
||||
// produces a builder error.
|
||||
// produces a encoder error.
|
||||
pass.EndPass();
|
||||
builder.GetResult();
|
||||
ASSERT_DEVICE_ERROR(encoder.Finish());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,21 +112,21 @@ TEST_F(CommandBufferValidationTest, RenderPassEndedTwice) {
|
||||
TEST_F(CommandBufferValidationTest, ComputePassEndedTwice) {
|
||||
// Control case, pass is ended once.
|
||||
{
|
||||
dawn::CommandBufferBuilder builder = AssertWillBeSuccess(device.CreateCommandBufferBuilder());
|
||||
dawn::ComputePassEncoder pass = builder.BeginComputePass();
|
||||
dawn::CommandEncoder encoder = device.CreateCommandEncoder();
|
||||
dawn::ComputePassEncoder pass = encoder.BeginComputePass();
|
||||
pass.EndPass();
|
||||
builder.GetResult();
|
||||
encoder.Finish();
|
||||
}
|
||||
|
||||
// Error case, pass ended twice
|
||||
{
|
||||
dawn::CommandBufferBuilder builder = AssertWillBeError(device.CreateCommandBufferBuilder());
|
||||
dawn::ComputePassEncoder pass = builder.BeginComputePass();
|
||||
dawn::CommandEncoder encoder = device.CreateCommandEncoder();
|
||||
dawn::ComputePassEncoder pass = encoder.BeginComputePass();
|
||||
pass.EndPass();
|
||||
// TODO(cwallez@chromium.org) this should probably be a device error, but currently it
|
||||
// produces a builder error.
|
||||
// produces a encoder error.
|
||||
pass.EndPass();
|
||||
builder.GetResult();
|
||||
ASSERT_DEVICE_ERROR(encoder.Finish());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,13 +140,13 @@ TEST_F(CommandBufferValidationTest, BufferWithMultipleReadUsage) {
|
||||
|
||||
// Use the buffer as both index and vertex in the same pass
|
||||
uint32_t zero = 0;
|
||||
dawn::CommandBufferBuilder builder = AssertWillBeSuccess(device.CreateCommandBufferBuilder());
|
||||
dawn::CommandEncoder encoder = device.CreateCommandEncoder();
|
||||
auto renderpass = CreateSimpleRenderPass();
|
||||
dawn::RenderPassEncoder pass = builder.BeginRenderPass(renderpass);
|
||||
dawn::RenderPassEncoder pass = encoder.BeginRenderPass(renderpass);
|
||||
pass.SetIndexBuffer(buffer, 0);
|
||||
pass.SetVertexBuffers(0, 1, &buffer, &zero);
|
||||
pass.EndPass();
|
||||
builder.GetResult();
|
||||
encoder.Finish();
|
||||
}
|
||||
|
||||
// Test that using the same buffer as both readable and writable in the same pass is disallowed
|
||||
@@ -165,13 +164,13 @@ TEST_F(CommandBufferValidationTest, BufferWithReadAndWriteUsage) {
|
||||
dawn::BindGroup bg = utils::MakeBindGroup(device, bgl, {{0, buffer, 0, 4}});
|
||||
|
||||
// Use the buffer as both index and storage in the same pass
|
||||
dawn::CommandBufferBuilder builder = AssertWillBeError(device.CreateCommandBufferBuilder());
|
||||
dawn::CommandEncoder encoder = device.CreateCommandEncoder();
|
||||
auto renderpass = CreateSimpleRenderPass();
|
||||
dawn::RenderPassEncoder pass = builder.BeginRenderPass(renderpass);
|
||||
dawn::RenderPassEncoder pass = encoder.BeginRenderPass(renderpass);
|
||||
pass.SetIndexBuffer(buffer, 0);
|
||||
pass.SetBindGroup(0, bg);
|
||||
pass.EndPass();
|
||||
builder.GetResult();
|
||||
ASSERT_DEVICE_ERROR(encoder.Finish());
|
||||
}
|
||||
|
||||
// Test that using the same texture as both readable and writable in the same pass is disallowed
|
||||
@@ -206,9 +205,9 @@ TEST_F(CommandBufferValidationTest, TextureWithReadAndWriteUsage) {
|
||||
.GetResult();
|
||||
|
||||
// Use the texture as both sampeld and output attachment in the same pass
|
||||
dawn::CommandBufferBuilder builder = AssertWillBeError(device.CreateCommandBufferBuilder());
|
||||
dawn::RenderPassEncoder pass = builder.BeginRenderPass(renderPass);
|
||||
dawn::CommandEncoder encoder = device.CreateCommandEncoder();
|
||||
dawn::RenderPassEncoder pass = encoder.BeginRenderPass(renderPass);
|
||||
pass.SetBindGroup(0, bg);
|
||||
pass.EndPass();
|
||||
builder.GetResult();
|
||||
ASSERT_DEVICE_ERROR(encoder.Finish());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user