Make fence descriptor optional

Bug: dawn:22
Change-Id: I5d14aa8e12899eb577d7c50081a6ee6f7ec248a0
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/21365
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
This commit is contained in:
Austin Eng 2020-05-11 20:29:22 +00:00 committed by Commit Bot service account
parent a6cf7b5b1d
commit a1800c04f3
5 changed files with 24 additions and 22 deletions

View File

@ -909,7 +909,7 @@
"name": "create fence", "name": "create fence",
"returns": "fence", "returns": "fence",
"args": [ "args": [
{"name": "descriptor", "type": "fence descriptor", "annotation": "const*"} {"name": "descriptor", "type": "fence descriptor", "annotation": "const*", "optional": true}
] ]
} }
] ]

View File

@ -84,6 +84,10 @@ namespace dawn_native {
return Fence::MakeError(GetDevice()); return Fence::MakeError(GetDevice());
} }
if (descriptor == nullptr) {
FenceDescriptor defaultDescriptor = {};
return new Fence(this, &defaultDescriptor);
}
return new Fence(this, descriptor); return new Fence(this, descriptor);
} }
@ -135,7 +139,9 @@ namespace dawn_native {
MaybeError QueueBase::ValidateCreateFence(const FenceDescriptor* descriptor) { MaybeError QueueBase::ValidateCreateFence(const FenceDescriptor* descriptor) {
DAWN_TRY(GetDevice()->ValidateIsAlive()); DAWN_TRY(GetDevice()->ValidateIsAlive());
DAWN_TRY(GetDevice()->ValidateObject(this)); DAWN_TRY(GetDevice()->ValidateObject(this));
if (descriptor != nullptr) {
DAWN_TRY(ValidateFenceDescriptor(descriptor)); DAWN_TRY(ValidateFenceDescriptor(descriptor));
}
return {}; return {};
} }

View File

@ -331,8 +331,10 @@ namespace dawn_wire { namespace client {
Fence* fence = reinterpret_cast<Fence*>(cFence); Fence* fence = reinterpret_cast<Fence*>(cFence);
fence->queue = queue; fence->queue = queue;
fence->signaledValue = descriptor->initialValue;
fence->completedValue = descriptor->initialValue; uint64_t initialValue = descriptor != nullptr ? descriptor->initialValue : 0u;
fence->signaledValue = initialValue;
fence->completedValue = initialValue;
return cFence; return cFence;
} }

View File

@ -97,9 +97,7 @@ TEST_P(FenceTests, SimpleSignal) {
// Test callbacks are called in increasing order of fence completion value // Test callbacks are called in increasing order of fence completion value
TEST_P(FenceTests, OnCompletionOrdering) { TEST_P(FenceTests, OnCompletionOrdering) {
wgpu::FenceDescriptor descriptor; wgpu::Fence fence = queue.CreateFence();
descriptor.initialValue = 0u;
wgpu::Fence fence = queue.CreateFence(&descriptor);
queue.Signal(fence, 4); queue.Signal(fence, 4);
@ -133,9 +131,7 @@ TEST_P(FenceTests, OnCompletionOrdering) {
// Test callbacks still occur if Queue::Signal happens multiple times // Test callbacks still occur if Queue::Signal happens multiple times
TEST_P(FenceTests, MultipleSignalOnCompletion) { TEST_P(FenceTests, MultipleSignalOnCompletion) {
wgpu::FenceDescriptor descriptor; wgpu::Fence fence = queue.CreateFence();
descriptor.initialValue = 0u;
wgpu::Fence fence = queue.CreateFence(&descriptor);
queue.Signal(fence, 2); queue.Signal(fence, 2);
queue.Signal(fence, 4); queue.Signal(fence, 4);
@ -149,9 +145,7 @@ TEST_P(FenceTests, MultipleSignalOnCompletion) {
// Test all callbacks are called if they are added for the same fence value // Test all callbacks are called if they are added for the same fence value
TEST_P(FenceTests, OnCompletionMultipleCallbacks) { TEST_P(FenceTests, OnCompletionMultipleCallbacks) {
wgpu::FenceDescriptor descriptor; wgpu::Fence fence = queue.CreateFence();
descriptor.initialValue = 0u;
wgpu::Fence fence = queue.CreateFence(&descriptor);
queue.Signal(fence, 4); queue.Signal(fence, 4);
@ -178,15 +172,11 @@ TEST_P(FenceTests, OnCompletionMultipleCallbacks) {
// TODO(enga): Enable when fence is removed from fence signal tracker // TODO(enga): Enable when fence is removed from fence signal tracker
// Currently it holds a reference and is not destructed // Currently it holds a reference and is not destructed
TEST_P(FenceTests, DISABLED_DestroyBeforeOnCompletionEnd) { TEST_P(FenceTests, DISABLED_DestroyBeforeOnCompletionEnd) {
wgpu::FenceDescriptor descriptor; wgpu::Fence fence = queue.CreateFence();
descriptor.initialValue = 0u;
wgpu::Fence fence = queue.CreateFence(&descriptor);
// The fence in this block will be deleted when it goes out of scope // The fence in this block will be deleted when it goes out of scope
{ {
wgpu::FenceDescriptor descriptor; wgpu::Fence testFence = queue.CreateFence();
descriptor.initialValue = 0u;
wgpu::Fence testFence = queue.CreateFence(&descriptor);
queue.Signal(testFence, 4); queue.Signal(testFence, 4);
@ -220,9 +210,7 @@ TEST_P(FenceTests, DISABLED_DestroyBeforeOnCompletionEnd) {
// Regression test that validation errors that are tracked client-side are captured // Regression test that validation errors that are tracked client-side are captured
// in error scopes. // in error scopes.
TEST_P(FenceTests, ClientValidationErrorInErrorScope) { TEST_P(FenceTests, ClientValidationErrorInErrorScope) {
wgpu::FenceDescriptor descriptor; wgpu::Fence fence = queue.CreateFence();
descriptor.initialValue = 0u;
wgpu::Fence fence = queue.CreateFence(&descriptor);
queue.Signal(fence, 4); queue.Signal(fence, 4);

View File

@ -78,6 +78,12 @@ TEST_F(FenceValidationTest, CreationSuccess) {
} }
} }
// Creation succeeds if no descriptor is provided
TEST_F(FenceValidationTest, DefaultDescriptor) {
wgpu::Fence fence = queue.CreateFence();
EXPECT_EQ(fence.GetCompletedValue(), 0u);
}
TEST_F(FenceValidationTest, GetCompletedValue) { TEST_F(FenceValidationTest, GetCompletedValue) {
// Starts at initial value // Starts at initial value
{ {