mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-17 00:47:13 +00:00
Move CreateFence from Device to Queue
Bug: dawn:113 Change-Id: I5ec829d8945cdc25644f481acc07a9f6d8b13aef Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/5200 Commit-Queue: Austin Eng <enga@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Kai Ninomiya <kainino@chromium.org>
This commit is contained in:
committed by
Commit Bot service account
parent
b47470daa7
commit
1cc386687c
@@ -69,7 +69,7 @@ class FenceTests : public DawnTest {
|
||||
TEST_P(FenceTests, SimpleSignal) {
|
||||
dawn::FenceDescriptor descriptor;
|
||||
descriptor.initialValue = 1u;
|
||||
dawn::Fence fence = device.CreateFence(&descriptor);
|
||||
dawn::Fence fence = queue.CreateFence(&descriptor);
|
||||
|
||||
// Completed value starts at initial value
|
||||
EXPECT_EQ(fence.GetCompletedValue(), 1u);
|
||||
@@ -85,7 +85,7 @@ TEST_P(FenceTests, SimpleSignal) {
|
||||
TEST_P(FenceTests, OnCompletionOrdering) {
|
||||
dawn::FenceDescriptor descriptor;
|
||||
descriptor.initialValue = 0u;
|
||||
dawn::Fence fence = device.CreateFence(&descriptor);
|
||||
dawn::Fence fence = queue.CreateFence(&descriptor);
|
||||
|
||||
queue.Signal(fence, 4);
|
||||
|
||||
@@ -126,7 +126,7 @@ TEST_P(FenceTests, OnCompletionOrdering) {
|
||||
TEST_P(FenceTests, MultipleSignalOnCompletion) {
|
||||
dawn::FenceDescriptor descriptor;
|
||||
descriptor.initialValue = 0u;
|
||||
dawn::Fence fence = device.CreateFence(&descriptor);
|
||||
dawn::Fence fence = queue.CreateFence(&descriptor);
|
||||
|
||||
queue.Signal(fence, 2);
|
||||
queue.Signal(fence, 4);
|
||||
@@ -144,7 +144,7 @@ TEST_P(FenceTests, MultipleSignalOnCompletion) {
|
||||
TEST_P(FenceTests, OnCompletionMultipleCallbacks) {
|
||||
dawn::FenceDescriptor descriptor;
|
||||
descriptor.initialValue = 0u;
|
||||
dawn::Fence fence = device.CreateFence(&descriptor);
|
||||
dawn::Fence fence = queue.CreateFence(&descriptor);
|
||||
|
||||
queue.Signal(fence, 4);
|
||||
|
||||
@@ -182,13 +182,13 @@ TEST_P(FenceTests, OnCompletionMultipleCallbacks) {
|
||||
TEST_P(FenceTests, DISABLED_DestroyBeforeOnCompletionEnd) {
|
||||
dawn::FenceDescriptor descriptor;
|
||||
descriptor.initialValue = 0u;
|
||||
dawn::Fence fence = device.CreateFence(&descriptor);
|
||||
dawn::Fence fence = queue.CreateFence(&descriptor);
|
||||
|
||||
// The fence in this block will be deleted when it goes out of scope
|
||||
{
|
||||
dawn::FenceDescriptor descriptor;
|
||||
descriptor.initialValue = 0u;
|
||||
dawn::Fence testFence = device.CreateFence(&descriptor);
|
||||
dawn::Fence testFence = queue.CreateFence(&descriptor);
|
||||
|
||||
queue.Signal(testFence, 4);
|
||||
|
||||
|
||||
@@ -351,7 +351,7 @@ class IOSurfaceUsageTests : public IOSurfaceTestBase {
|
||||
// Maybe it is because the Metal command buffer has been submitted but not "scheduled" yet?
|
||||
dawn::FenceDescriptor fenceDescriptor;
|
||||
fenceDescriptor.initialValue = 0u;
|
||||
dawn::Fence fence = device.CreateFence(&fenceDescriptor);
|
||||
dawn::Fence fence = queue.CreateFence(&fenceDescriptor);
|
||||
queue.Signal(fence, 1);
|
||||
|
||||
while (fence.GetCompletedValue() < 1) {
|
||||
|
||||
@@ -77,7 +77,7 @@ TEST_F(FenceValidationTest, CreationSuccess) {
|
||||
{
|
||||
dawn::FenceDescriptor descriptor;
|
||||
descriptor.initialValue = 0;
|
||||
device.CreateFence(&descriptor);
|
||||
queue.CreateFence(&descriptor);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,7 +86,7 @@ TEST_F(FenceValidationTest, GetCompletedValue) {
|
||||
{
|
||||
dawn::FenceDescriptor descriptor;
|
||||
descriptor.initialValue = 1;
|
||||
dawn::Fence fence = device.CreateFence(&descriptor);
|
||||
dawn::Fence fence = queue.CreateFence(&descriptor);
|
||||
EXPECT_EQ(fence.GetCompletedValue(), 1u);
|
||||
}
|
||||
}
|
||||
@@ -96,7 +96,7 @@ TEST_F(FenceValidationTest, GetCompletedValue) {
|
||||
TEST_F(FenceValidationTest, OnCompletionImmediate) {
|
||||
dawn::FenceDescriptor descriptor;
|
||||
descriptor.initialValue = 1;
|
||||
dawn::Fence fence = device.CreateFence(&descriptor);
|
||||
dawn::Fence fence = queue.CreateFence(&descriptor);
|
||||
|
||||
EXPECT_CALL(*mockFenceOnCompletionCallback, Call(DAWN_FENCE_COMPLETION_STATUS_SUCCESS, 0))
|
||||
.Times(1);
|
||||
@@ -111,7 +111,7 @@ TEST_F(FenceValidationTest, OnCompletionImmediate) {
|
||||
TEST_F(FenceValidationTest, OnCompletionLargerThanSignaled) {
|
||||
dawn::FenceDescriptor descriptor;
|
||||
descriptor.initialValue = 1;
|
||||
dawn::Fence fence = device.CreateFence(&descriptor);
|
||||
dawn::Fence fence = queue.CreateFence(&descriptor);
|
||||
|
||||
// Cannot signal for values > signaled value
|
||||
EXPECT_CALL(*mockFenceOnCompletionCallback, Call(DAWN_FENCE_COMPLETION_STATUS_ERROR, 0))
|
||||
@@ -130,7 +130,7 @@ TEST_F(FenceValidationTest, OnCompletionLargerThanSignaled) {
|
||||
TEST_F(FenceValidationTest, GetCompletedValueInsideCallback) {
|
||||
dawn::FenceDescriptor descriptor;
|
||||
descriptor.initialValue = 1;
|
||||
dawn::Fence fence = device.CreateFence(&descriptor);
|
||||
dawn::Fence fence = queue.CreateFence(&descriptor);
|
||||
|
||||
queue.Signal(fence, 3);
|
||||
fence.OnCompletion(2u, ToMockFenceOnCompletionCallback, 0);
|
||||
@@ -145,7 +145,7 @@ TEST_F(FenceValidationTest, GetCompletedValueInsideCallback) {
|
||||
TEST_F(FenceValidationTest, GetCompletedValueAfterCallback) {
|
||||
dawn::FenceDescriptor descriptor;
|
||||
descriptor.initialValue = 1;
|
||||
dawn::Fence fence = device.CreateFence(&descriptor);
|
||||
dawn::Fence fence = queue.CreateFence(&descriptor);
|
||||
|
||||
queue.Signal(fence, 2);
|
||||
fence.OnCompletion(2u, ToMockFenceOnCompletionCallback, 0);
|
||||
@@ -159,7 +159,7 @@ TEST_F(FenceValidationTest, GetCompletedValueAfterCallback) {
|
||||
TEST_F(FenceValidationTest, SignalError) {
|
||||
dawn::FenceDescriptor descriptor;
|
||||
descriptor.initialValue = 1;
|
||||
dawn::Fence fence = device.CreateFence(&descriptor);
|
||||
dawn::Fence fence = queue.CreateFence(&descriptor);
|
||||
|
||||
// value < fence signaled value
|
||||
ASSERT_DEVICE_ERROR(queue.Signal(fence, 0));
|
||||
@@ -171,7 +171,7 @@ TEST_F(FenceValidationTest, SignalError) {
|
||||
TEST_F(FenceValidationTest, SignalSuccess) {
|
||||
dawn::FenceDescriptor descriptor;
|
||||
descriptor.initialValue = 1;
|
||||
dawn::Fence fence = device.CreateFence(&descriptor);
|
||||
dawn::Fence fence = queue.CreateFence(&descriptor);
|
||||
|
||||
// Success
|
||||
queue.Signal(fence, 2);
|
||||
@@ -183,3 +183,34 @@ TEST_F(FenceValidationTest, SignalSuccess) {
|
||||
Flush();
|
||||
EXPECT_EQ(fence.GetCompletedValue(), 6u);
|
||||
}
|
||||
|
||||
// Test it is invalid to signal a fence on a different queue than it was created on
|
||||
TEST_F(FenceValidationTest, SignalWrongQueue) {
|
||||
dawn::Queue queue2 = device.CreateQueue();
|
||||
|
||||
dawn::FenceDescriptor descriptor;
|
||||
descriptor.initialValue = 1;
|
||||
dawn::Fence fence = queue.CreateFence(&descriptor);
|
||||
|
||||
ASSERT_DEVICE_ERROR(queue2.Signal(fence, 2));
|
||||
}
|
||||
|
||||
// Test that signaling a fence on a wrong queue does not update fence signaled value
|
||||
TEST_F(FenceValidationTest, SignalWrongQueueDoesNotUpdateValue) {
|
||||
dawn::Queue queue2 = device.CreateQueue();
|
||||
|
||||
dawn::FenceDescriptor descriptor;
|
||||
descriptor.initialValue = 1;
|
||||
dawn::Fence fence = queue.CreateFence(&descriptor);
|
||||
|
||||
ASSERT_DEVICE_ERROR(queue2.Signal(fence, 2));
|
||||
|
||||
// Fence value should be unchanged.
|
||||
Flush();
|
||||
EXPECT_EQ(fence.GetCompletedValue(), 1u);
|
||||
|
||||
// Signaling with 2 on the correct queue should succeed
|
||||
queue.Signal(fence, 2);
|
||||
Flush();
|
||||
EXPECT_EQ(fence.GetCompletedValue(), 2u);
|
||||
}
|
||||
|
||||
@@ -55,25 +55,25 @@ class WireFenceTests : public WireTest {
|
||||
mockDeviceErrorCallback = std::make_unique<MockDeviceErrorCallback>();
|
||||
mockFenceOnCompletionCallback = std::make_unique<MockFenceOnCompletionCallback>();
|
||||
|
||||
{
|
||||
queue = dawnDeviceCreateQueue(device);
|
||||
apiQueue = api.GetNewQueue();
|
||||
EXPECT_CALL(api, DeviceCreateQueue(apiDevice)).WillOnce(Return(apiQueue));
|
||||
EXPECT_CALL(api, QueueRelease(apiQueue));
|
||||
FlushClient();
|
||||
}
|
||||
{
|
||||
dawnFenceDescriptor descriptor;
|
||||
descriptor.initialValue = 1;
|
||||
descriptor.nextInChain = nullptr;
|
||||
|
||||
apiFence = api.GetNewFence();
|
||||
fence = dawnDeviceCreateFence(device, &descriptor);
|
||||
fence = dawnQueueCreateFence(queue, &descriptor);
|
||||
|
||||
EXPECT_CALL(api, DeviceCreateFence(apiDevice, _)).WillOnce(Return(apiFence));
|
||||
EXPECT_CALL(api, QueueCreateFence(apiQueue, _)).WillOnce(Return(apiFence));
|
||||
EXPECT_CALL(api, FenceRelease(apiFence));
|
||||
FlushClient();
|
||||
}
|
||||
{
|
||||
queue = dawnDeviceCreateQueue(device);
|
||||
apiQueue = api.GetNewQueue();
|
||||
EXPECT_CALL(api, DeviceCreateQueue(apiDevice)).WillOnce(Return(apiQueue));
|
||||
EXPECT_CALL(api, QueueRelease(apiQueue));
|
||||
FlushClient();
|
||||
}
|
||||
}
|
||||
|
||||
void TearDown() override {
|
||||
@@ -264,3 +264,44 @@ TEST_F(WireFenceTests, DestroyBeforeOnCompletionEnd) {
|
||||
|
||||
dawnFenceRelease(fence);
|
||||
}
|
||||
|
||||
// Test that signaling a fence on a wrong queue is invalid
|
||||
TEST_F(WireFenceTests, SignalWrongQueue) {
|
||||
dawnQueue queue2 = dawnDeviceCreateQueue(device);
|
||||
dawnQueue apiQueue2 = api.GetNewQueue();
|
||||
EXPECT_CALL(api, DeviceCreateQueue(apiDevice)).WillOnce(Return(apiQueue2));
|
||||
EXPECT_CALL(api, QueueRelease(apiQueue2));
|
||||
FlushClient();
|
||||
|
||||
dawnCallbackUserdata userdata = 1520;
|
||||
dawnDeviceSetErrorCallback(device, ToMockDeviceErrorCallback, userdata);
|
||||
|
||||
EXPECT_CALL(*mockDeviceErrorCallback, Call(_, userdata)).Times(1);
|
||||
dawnQueueSignal(queue2, fence, 2u); // error
|
||||
}
|
||||
|
||||
// Test that signaling a fence on a wrong queue does not update fence signaled value
|
||||
TEST_F(WireFenceTests, SignalWrongQueueDoesNotUpdateValue) {
|
||||
dawnQueue queue2 = dawnDeviceCreateQueue(device);
|
||||
dawnQueue apiQueue2 = api.GetNewQueue();
|
||||
EXPECT_CALL(api, DeviceCreateQueue(apiDevice)).WillOnce(Return(apiQueue2));
|
||||
EXPECT_CALL(api, QueueRelease(apiQueue2));
|
||||
FlushClient();
|
||||
|
||||
dawnCallbackUserdata userdata = 1024;
|
||||
dawnDeviceSetErrorCallback(device, ToMockDeviceErrorCallback, userdata);
|
||||
|
||||
EXPECT_CALL(*mockDeviceErrorCallback, Call(_, userdata)).Times(1);
|
||||
dawnQueueSignal(queue2, fence, 2u); // error
|
||||
|
||||
// Fence value should be unchanged.
|
||||
FlushClient();
|
||||
FlushServer();
|
||||
EXPECT_EQ(dawnFenceGetCompletedValue(fence), 1u);
|
||||
|
||||
// Signaling with 2 on the correct queue should succeed
|
||||
DoQueueSignal(2u); // success
|
||||
FlushClient();
|
||||
FlushServer();
|
||||
EXPECT_EQ(dawnFenceGetCompletedValue(fence), 2u);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user