[runtime] Refactor semaphore submission CTS (#17108)
Increase code reuse to have shorter and more readable tests.
diff --git a/runtime/src/iree/hal/cts/semaphore_submission_test.h b/runtime/src/iree/hal/cts/semaphore_submission_test.h
index 5b42971..01bc5a7 100644
--- a/runtime/src/iree/hal/cts/semaphore_submission_test.h
+++ b/runtime/src/iree/hal/cts/semaphore_submission_test.h
@@ -25,9 +25,8 @@
TEST_P(semaphore_submission_test, SubmitWithNoCommandBuffers) {
// No waits, one signal which we immediately wait on after submit.
- iree_hal_semaphore_t* signal_semaphore = NULL;
- IREE_ASSERT_OK(iree_hal_semaphore_create(device_, 0ull, &signal_semaphore));
- uint64_t signal_payload_values[] = {1ull};
+ iree_hal_semaphore_t* signal_semaphore = CreateSemaphore();
+ uint64_t signal_payload_values[] = {1};
iree_hal_semaphore_list_t signal_semaphores = {
1,
&signal_semaphore,
@@ -39,25 +38,17 @@
iree_hal_semaphore_list_empty(),
signal_semaphores, 0, NULL));
IREE_ASSERT_OK(
- iree_hal_semaphore_wait(signal_semaphore, 1ull, iree_infinite_timeout()));
+ iree_hal_semaphore_wait(signal_semaphore, 1, iree_infinite_timeout()));
iree_hal_semaphore_release(signal_semaphore);
}
TEST_P(semaphore_submission_test, SubmitAndSignal) {
- iree_hal_command_buffer_t* command_buffer = NULL;
- IREE_ASSERT_OK(iree_hal_command_buffer_create(
- device_, IREE_HAL_COMMAND_BUFFER_MODE_ONE_SHOT,
- IREE_HAL_COMMAND_CATEGORY_DISPATCH, IREE_HAL_QUEUE_AFFINITY_ANY,
- /*binding_capacity=*/0, &command_buffer));
-
- IREE_ASSERT_OK(iree_hal_command_buffer_begin(command_buffer));
- IREE_ASSERT_OK(iree_hal_command_buffer_end(command_buffer));
+ iree_hal_command_buffer_t* command_buffer = CreateEmptyCommandBuffer();
// No waits, one signal which we immediately wait on after submit.
- iree_hal_semaphore_t* signal_semaphore = NULL;
- IREE_ASSERT_OK(iree_hal_semaphore_create(device_, 0ull, &signal_semaphore));
- uint64_t signal_payload_values[] = {1ull};
+ iree_hal_semaphore_t* signal_semaphore = CreateSemaphore();
+ uint64_t signal_payload_values[] = {1};
iree_hal_semaphore_list_t signal_semaphores = {
1,
&signal_semaphore,
@@ -69,7 +60,7 @@
/*queue_affinity=*/0, iree_hal_semaphore_list_empty(), signal_semaphores,
1, &command_buffer));
IREE_ASSERT_OK(
- iree_hal_semaphore_wait(signal_semaphore, 1ull, iree_infinite_timeout()));
+ iree_hal_semaphore_wait(signal_semaphore, 1, iree_infinite_timeout()));
iree_hal_command_buffer_release(command_buffer);
iree_hal_semaphore_release(signal_semaphore);
@@ -77,26 +68,19 @@
TEST_P(semaphore_submission_test, SubmitWithWait) {
// Empty command buffer.
- iree_hal_command_buffer_t* command_buffer = NULL;
- IREE_ASSERT_OK(iree_hal_command_buffer_create(
- device_, IREE_HAL_COMMAND_BUFFER_MODE_ONE_SHOT,
- IREE_HAL_COMMAND_CATEGORY_DISPATCH, IREE_HAL_QUEUE_AFFINITY_ANY,
- /*binding_capacity=*/0, &command_buffer));
- IREE_ASSERT_OK(iree_hal_command_buffer_begin(command_buffer));
- IREE_ASSERT_OK(iree_hal_command_buffer_end(command_buffer));
+ iree_hal_command_buffer_t* command_buffer = CreateEmptyCommandBuffer();
// One wait and one signal semaphore.
- iree_hal_semaphore_t* wait_semaphore = NULL;
- IREE_ASSERT_OK(iree_hal_semaphore_create(device_, 0ull, &wait_semaphore));
- uint64_t wait_payload_values[] = {1ull};
+ iree_hal_semaphore_t* wait_semaphore = CreateSemaphore();
+ uint64_t wait_payload_values[] = {1};
iree_hal_semaphore_list_t wait_semaphores = {
1,
&wait_semaphore,
wait_payload_values,
};
iree_hal_semaphore_t* signal_semaphore = NULL;
- IREE_ASSERT_OK(iree_hal_semaphore_create(device_, 100ull, &signal_semaphore));
- uint64_t signal_payload_values[] = {101ull};
+ IREE_ASSERT_OK(iree_hal_semaphore_create(device_, 100, &signal_semaphore));
+ uint64_t signal_payload_values[] = {101};
iree_hal_semaphore_list_t signal_semaphores = {
1,
&signal_semaphore,
@@ -109,14 +93,12 @@
signal_semaphores, 1, &command_buffer));
// Work shouldn't start until the wait semaphore reaches its payload value.
- uint64_t value;
- IREE_ASSERT_OK(iree_hal_semaphore_query(signal_semaphore, &value));
- EXPECT_EQ(100ull, value);
+ CheckSemaphoreValue(signal_semaphore, 100);
// Signal the wait semaphore, work should begin and complete.
- IREE_ASSERT_OK(iree_hal_semaphore_signal(wait_semaphore, 1ull));
- IREE_ASSERT_OK(iree_hal_semaphore_wait(signal_semaphore, 101ull,
- iree_infinite_timeout()));
+ IREE_ASSERT_OK(iree_hal_semaphore_signal(wait_semaphore, 1));
+ IREE_ASSERT_OK(
+ iree_hal_semaphore_wait(signal_semaphore, 101, iree_infinite_timeout()));
iree_hal_command_buffer_release(command_buffer);
iree_hal_semaphore_release(wait_semaphore);
@@ -124,35 +106,24 @@
}
TEST_P(semaphore_submission_test, SubmitWithMultipleSemaphores) {
- iree_hal_command_buffer_t* command_buffer = NULL;
- IREE_ASSERT_OK(iree_hal_command_buffer_create(
- device_, IREE_HAL_COMMAND_BUFFER_MODE_ONE_SHOT,
- IREE_HAL_COMMAND_CATEGORY_DISPATCH, IREE_HAL_QUEUE_AFFINITY_ANY,
- /*binding_capacity=*/0, &command_buffer));
+ iree_hal_command_buffer_t* command_buffer = CreateEmptyCommandBuffer();
- IREE_ASSERT_OK(iree_hal_command_buffer_begin(command_buffer));
- IREE_ASSERT_OK(iree_hal_command_buffer_end(command_buffer));
-
- iree_hal_semaphore_t* wait_semaphore_1 = NULL;
- iree_hal_semaphore_t* wait_semaphore_2 = NULL;
- IREE_ASSERT_OK(iree_hal_semaphore_create(device_, 0ull, &wait_semaphore_1));
- IREE_ASSERT_OK(iree_hal_semaphore_create(device_, 0ull, &wait_semaphore_2));
+ iree_hal_semaphore_t* wait_semaphore_1 = CreateSemaphore();
+ iree_hal_semaphore_t* wait_semaphore_2 = CreateSemaphore();
iree_hal_semaphore_t* wait_semaphore_ptrs[] = {wait_semaphore_1,
wait_semaphore_2};
- uint64_t wait_payload_values[] = {1ull, 1ull};
+ uint64_t wait_payload_values[] = {1, 1};
iree_hal_semaphore_list_t wait_semaphores = {
IREE_ARRAYSIZE(wait_semaphore_ptrs),
wait_semaphore_ptrs,
wait_payload_values,
};
- iree_hal_semaphore_t* signal_semaphore_1 = NULL;
- iree_hal_semaphore_t* signal_semaphore_2 = NULL;
- IREE_ASSERT_OK(iree_hal_semaphore_create(device_, 0ull, &signal_semaphore_1));
- IREE_ASSERT_OK(iree_hal_semaphore_create(device_, 0ull, &signal_semaphore_2));
+ iree_hal_semaphore_t* signal_semaphore_1 = CreateSemaphore();
+ iree_hal_semaphore_t* signal_semaphore_2 = CreateSemaphore();
iree_hal_semaphore_t* signal_semaphore_ptrs[] = {signal_semaphore_1,
signal_semaphore_2};
- uint64_t signal_payload_values[] = {1ull, 1ull};
+ uint64_t signal_payload_values[] = {1, 1};
iree_hal_semaphore_list_t signal_semaphores = {
IREE_ARRAYSIZE(signal_semaphore_ptrs),
signal_semaphore_ptrs,
@@ -165,15 +136,12 @@
signal_semaphores, 1, &command_buffer));
// Work shouldn't start until all wait semaphores reach their payload values.
- uint64_t value;
- IREE_ASSERT_OK(iree_hal_semaphore_query(signal_semaphore_1, &value));
- EXPECT_EQ(0ull, value);
- IREE_ASSERT_OK(iree_hal_semaphore_query(signal_semaphore_2, &value));
- EXPECT_EQ(0ull, value);
+ CheckSemaphoreValue(signal_semaphore_1, 0);
+ CheckSemaphoreValue(signal_semaphore_2, 0);
// Signal the wait semaphores, work should begin and complete.
- IREE_ASSERT_OK(iree_hal_semaphore_signal(wait_semaphore_1, 1ull));
- IREE_ASSERT_OK(iree_hal_semaphore_signal(wait_semaphore_2, 1ull));
+ IREE_ASSERT_OK(iree_hal_semaphore_signal(wait_semaphore_1, 1));
+ IREE_ASSERT_OK(iree_hal_semaphore_signal(wait_semaphore_2, 1));
IREE_ASSERT_OK(
iree_hal_semaphore_list_wait(signal_semaphores, iree_infinite_timeout()));
@@ -187,38 +155,23 @@
// Tests we can wait on both host and device semaphore to singal.
TEST_P(semaphore_submission_test, WaitAllHostAndDeviceSemaphores) {
- iree_hal_command_buffer_t* command_buffer = NULL;
- IREE_ASSERT_OK(iree_hal_command_buffer_create(
- device_, IREE_HAL_COMMAND_BUFFER_MODE_ONE_SHOT,
- IREE_HAL_COMMAND_CATEGORY_DISPATCH, IREE_HAL_QUEUE_AFFINITY_ANY,
- /*binding_capacity=*/0, &command_buffer));
-
- IREE_ASSERT_OK(iree_hal_command_buffer_begin(command_buffer));
- IREE_ASSERT_OK(iree_hal_command_buffer_end(command_buffer));
+ iree_hal_command_buffer_t* command_buffer = CreateEmptyCommandBuffer();
// Create two semaphores, one for the host thread to wait on, and one for the
// device to wait on.
- iree_hal_semaphore_t* host_wait_semaphore = NULL;
- iree_hal_semaphore_t* device_wait_semaphore = NULL;
- IREE_ASSERT_OK(
- iree_hal_semaphore_create(device_, 0ull, &host_wait_semaphore));
- IREE_ASSERT_OK(
- iree_hal_semaphore_create(device_, 0ull, &device_wait_semaphore));
+ iree_hal_semaphore_t* host_wait_semaphore = CreateSemaphore();
+ iree_hal_semaphore_t* device_wait_semaphore = CreateSemaphore();
// Create two semaphores, one for the host thread to signal, and one for the
// device to signal.
- iree_hal_semaphore_t* host_signal_semaphore = NULL;
- iree_hal_semaphore_t* device_signal_semaphore = NULL;
- IREE_ASSERT_OK(
- iree_hal_semaphore_create(device_, 0ull, &host_signal_semaphore));
- IREE_ASSERT_OK(
- iree_hal_semaphore_create(device_, 0ull, &device_signal_semaphore));
+ iree_hal_semaphore_t* host_signal_semaphore = CreateSemaphore();
+ iree_hal_semaphore_t* device_signal_semaphore = CreateSemaphore();
// Prepare device wait and signal semaphore lists.
- uint64_t device_wait_payload_values[] = {1ull};
+ uint64_t device_wait_payload_values[] = {1};
iree_hal_semaphore_list_t device_wait_semaphores = {
/*count=*/1, &device_wait_semaphore, device_wait_payload_values};
- uint64_t device_signal_payload_values[] = {1ull};
+ uint64_t device_signal_payload_values[] = {1};
iree_hal_semaphore_list_t device_signal_semaphores = {
/*count=*/1, &device_signal_semaphore, device_signal_payload_values};
@@ -229,28 +182,24 @@
// Start another thread and have it wait.
std::thread thread([&]() {
- IREE_ASSERT_OK(
- iree_hal_semaphore_wait(host_wait_semaphore, 1ull,
- iree_make_deadline(IREE_TIME_INFINITE_FUTURE)));
- IREE_ASSERT_OK(iree_hal_semaphore_signal(host_signal_semaphore, 1ull));
+ IREE_ASSERT_OK(iree_hal_semaphore_wait(
+ host_wait_semaphore, 1, iree_make_deadline(IREE_TIME_INFINITE_FUTURE)));
+ IREE_ASSERT_OK(iree_hal_semaphore_signal(host_signal_semaphore, 1));
});
// Work shouldn't start until all wait semaphores reach their payload values.
- uint64_t value;
- IREE_ASSERT_OK(iree_hal_semaphore_query(host_signal_semaphore, &value));
- EXPECT_EQ(0ull, value);
- IREE_ASSERT_OK(iree_hal_semaphore_query(device_signal_semaphore, &value));
- EXPECT_EQ(0ull, value);
+ CheckSemaphoreValue(host_signal_semaphore, 0);
+ CheckSemaphoreValue(device_signal_semaphore, 0);
// Signal the wait semaphores for both host thread and device, work should
// begin and complete.
- IREE_ASSERT_OK(iree_hal_semaphore_signal(host_wait_semaphore, 1ull));
- IREE_ASSERT_OK(iree_hal_semaphore_signal(device_wait_semaphore, 1ull));
+ IREE_ASSERT_OK(iree_hal_semaphore_signal(host_wait_semaphore, 1));
+ IREE_ASSERT_OK(iree_hal_semaphore_signal(device_wait_semaphore, 1));
// Now wait on both to complete.
iree_hal_semaphore_t* main_semaphore_ptrs[] = {host_signal_semaphore,
device_signal_semaphore};
- uint64_t main_payload_values[] = {1ull, 1ull};
+ uint64_t main_payload_values[] = {1, 1};
iree_hal_semaphore_list_t main_wait_semaphores = {
IREE_ARRAYSIZE(main_semaphore_ptrs), main_semaphore_ptrs,
main_payload_values};
@@ -270,38 +219,23 @@
// and device signals.
TEST_P(semaphore_submission_test,
WaitAnyHostAndDeviceSemaphoresAndDeviceSignals) {
- iree_hal_command_buffer_t* command_buffer = NULL;
- IREE_ASSERT_OK(iree_hal_command_buffer_create(
- device_, IREE_HAL_COMMAND_BUFFER_MODE_ONE_SHOT,
- IREE_HAL_COMMAND_CATEGORY_DISPATCH, IREE_HAL_QUEUE_AFFINITY_ANY,
- /*binding_capacity=*/0, &command_buffer));
-
- IREE_ASSERT_OK(iree_hal_command_buffer_begin(command_buffer));
- IREE_ASSERT_OK(iree_hal_command_buffer_end(command_buffer));
+ iree_hal_command_buffer_t* command_buffer = CreateEmptyCommandBuffer();
// Create two semaphores, one for the host thread to wait on, and one for the
// device to wait on.
- iree_hal_semaphore_t* host_wait_semaphore = NULL;
- iree_hal_semaphore_t* device_wait_semaphore = NULL;
- IREE_ASSERT_OK(
- iree_hal_semaphore_create(device_, 0ull, &host_wait_semaphore));
- IREE_ASSERT_OK(
- iree_hal_semaphore_create(device_, 0ull, &device_wait_semaphore));
+ iree_hal_semaphore_t* host_wait_semaphore = CreateSemaphore();
+ iree_hal_semaphore_t* device_wait_semaphore = CreateSemaphore();
// Create two semaphores, one for the host thread to signal, and one for the
// device to signal.
- iree_hal_semaphore_t* host_signal_semaphore = NULL;
- iree_hal_semaphore_t* device_signal_semaphore = NULL;
- IREE_ASSERT_OK(
- iree_hal_semaphore_create(device_, 0ull, &host_signal_semaphore));
- IREE_ASSERT_OK(
- iree_hal_semaphore_create(device_, 0ull, &device_signal_semaphore));
+ iree_hal_semaphore_t* host_signal_semaphore = CreateSemaphore();
+ iree_hal_semaphore_t* device_signal_semaphore = CreateSemaphore();
// Prepare device wait and signal semaphore lists.
- uint64_t device_wait_payload_values[] = {1ull};
+ uint64_t device_wait_payload_values[] = {1};
iree_hal_semaphore_list_t device_wait_semaphores = {
/*count=*/1, &device_wait_semaphore, device_wait_payload_values};
- uint64_t device_signal_payload_values[] = {1ull};
+ uint64_t device_signal_payload_values[] = {1};
iree_hal_semaphore_list_t device_signal_semaphores = {
/*count=*/1, &device_signal_semaphore, device_signal_payload_values};
@@ -312,26 +246,22 @@
// Start another thread and have it wait.
std::thread thread([&]() {
- IREE_ASSERT_OK(
- iree_hal_semaphore_wait(host_wait_semaphore, 1ull,
- iree_make_deadline(IREE_TIME_INFINITE_FUTURE)));
- IREE_ASSERT_OK(iree_hal_semaphore_signal(host_signal_semaphore, 1ull));
+ IREE_ASSERT_OK(iree_hal_semaphore_wait(
+ host_wait_semaphore, 1, iree_make_deadline(IREE_TIME_INFINITE_FUTURE)));
+ IREE_ASSERT_OK(iree_hal_semaphore_signal(host_signal_semaphore, 1));
});
// Work shouldn't start until all wait semaphores reach their payload values.
- uint64_t value;
- IREE_ASSERT_OK(iree_hal_semaphore_query(host_signal_semaphore, &value));
- EXPECT_EQ(0ull, value);
- IREE_ASSERT_OK(iree_hal_semaphore_query(device_signal_semaphore, &value));
- EXPECT_EQ(0ull, value);
+ CheckSemaphoreValue(host_signal_semaphore, 0);
+ CheckSemaphoreValue(device_signal_semaphore, 0);
// Signal the wait semaphores for the device, work should begin and complete.
- IREE_ASSERT_OK(iree_hal_semaphore_signal(device_wait_semaphore, 1ull));
+ IREE_ASSERT_OK(iree_hal_semaphore_signal(device_wait_semaphore, 1));
// Now wait on any to complete.
iree_hal_semaphore_t* main_semaphore_ptrs[] = {host_signal_semaphore,
device_signal_semaphore};
- uint64_t main_payload_values[] = {1ull, 1ull};
+ uint64_t main_payload_values[] = {1, 1};
iree_hal_semaphore_list_t main_wait_semaphores = {
IREE_ARRAYSIZE(main_semaphore_ptrs), main_semaphore_ptrs,
main_payload_values};
@@ -340,13 +270,11 @@
iree_make_deadline(IREE_TIME_INFINITE_FUTURE)));
// Check that the device has signaled but the host thread hasn't.
- IREE_ASSERT_OK(iree_hal_semaphore_query(host_signal_semaphore, &value));
- EXPECT_EQ(0ull, value);
- IREE_ASSERT_OK(iree_hal_semaphore_query(device_signal_semaphore, &value));
- EXPECT_EQ(1ull, value);
+ CheckSemaphoreValue(host_signal_semaphore, 0);
+ CheckSemaphoreValue(device_signal_semaphore, 1);
// Now let the host thread to complete.
- IREE_ASSERT_OK(iree_hal_semaphore_signal(host_wait_semaphore, 1ull));
+ IREE_ASSERT_OK(iree_hal_semaphore_signal(host_wait_semaphore, 1));
thread.join();
iree_hal_command_buffer_release(command_buffer);
@@ -360,38 +288,23 @@
// and host signals.
TEST_P(semaphore_submission_test,
WaitAnyHostAndDeviceSemaphoresAndHostSignals) {
- iree_hal_command_buffer_t* command_buffer = NULL;
- IREE_ASSERT_OK(iree_hal_command_buffer_create(
- device_, IREE_HAL_COMMAND_BUFFER_MODE_ONE_SHOT,
- IREE_HAL_COMMAND_CATEGORY_DISPATCH, IREE_HAL_QUEUE_AFFINITY_ANY,
- /*binding_capacity=*/0, &command_buffer));
-
- IREE_ASSERT_OK(iree_hal_command_buffer_begin(command_buffer));
- IREE_ASSERT_OK(iree_hal_command_buffer_end(command_buffer));
+ iree_hal_command_buffer_t* command_buffer = CreateEmptyCommandBuffer();
// Create two semaphores, one for the host thread to wait on, and one for the
// device to wait on.
- iree_hal_semaphore_t* host_wait_semaphore = NULL;
- iree_hal_semaphore_t* device_wait_semaphore = NULL;
- IREE_ASSERT_OK(
- iree_hal_semaphore_create(device_, 0ull, &host_wait_semaphore));
- IREE_ASSERT_OK(
- iree_hal_semaphore_create(device_, 0ull, &device_wait_semaphore));
+ iree_hal_semaphore_t* host_wait_semaphore = CreateSemaphore();
+ iree_hal_semaphore_t* device_wait_semaphore = CreateSemaphore();
// Create two semaphores, one for the host thread to signal, and one for the
// device to signal.
- iree_hal_semaphore_t* host_signal_semaphore = NULL;
- iree_hal_semaphore_t* device_signal_semaphore = NULL;
- IREE_ASSERT_OK(
- iree_hal_semaphore_create(device_, 0ull, &host_signal_semaphore));
- IREE_ASSERT_OK(
- iree_hal_semaphore_create(device_, 0ull, &device_signal_semaphore));
+ iree_hal_semaphore_t* host_signal_semaphore = CreateSemaphore();
+ iree_hal_semaphore_t* device_signal_semaphore = CreateSemaphore();
// Prepare device wait and signal semaphore lists.
- uint64_t device_wait_payload_values[] = {1ull};
+ uint64_t device_wait_payload_values[] = {1};
iree_hal_semaphore_list_t device_wait_semaphores = {
/*count=*/1, &device_wait_semaphore, device_wait_payload_values};
- uint64_t device_signal_payload_values[] = {1ull};
+ uint64_t device_signal_payload_values[] = {1};
iree_hal_semaphore_list_t device_signal_semaphores = {
/*count=*/1, &device_signal_semaphore, device_signal_payload_values};
@@ -402,27 +315,23 @@
// Start another thread and have it wait.
std::thread thread([&]() {
- IREE_ASSERT_OK(
- iree_hal_semaphore_wait(host_wait_semaphore, 1ull,
- iree_make_deadline(IREE_TIME_INFINITE_FUTURE)));
- IREE_ASSERT_OK(iree_hal_semaphore_signal(host_signal_semaphore, 1ull));
+ IREE_ASSERT_OK(iree_hal_semaphore_wait(
+ host_wait_semaphore, 1, iree_make_deadline(IREE_TIME_INFINITE_FUTURE)));
+ IREE_ASSERT_OK(iree_hal_semaphore_signal(host_signal_semaphore, 1));
});
// Work shouldn't start until all wait semaphores reach their payload values.
- uint64_t value;
- IREE_ASSERT_OK(iree_hal_semaphore_query(host_signal_semaphore, &value));
- EXPECT_EQ(0ull, value);
- IREE_ASSERT_OK(iree_hal_semaphore_query(device_signal_semaphore, &value));
- EXPECT_EQ(0ull, value);
+ CheckSemaphoreValue(host_signal_semaphore, 0);
+ CheckSemaphoreValue(device_signal_semaphore, 0);
// Signal the wait semaphores for the host thread, work should begin and
// complete.
- IREE_ASSERT_OK(iree_hal_semaphore_signal(host_wait_semaphore, 1ull));
+ IREE_ASSERT_OK(iree_hal_semaphore_signal(host_wait_semaphore, 1));
// Now wait on any to complete.
iree_hal_semaphore_t* main_semaphore_ptrs[] = {host_signal_semaphore,
device_signal_semaphore};
- uint64_t main_payload_values[] = {1ull, 1ull};
+ uint64_t main_payload_values[] = {1, 1};
iree_hal_semaphore_list_t main_wait_semaphores = {
IREE_ARRAYSIZE(main_semaphore_ptrs), main_semaphore_ptrs,
main_payload_values};
@@ -432,15 +341,13 @@
thread.join();
// Check that the host thread has signaled but the device hasn't.
- IREE_ASSERT_OK(iree_hal_semaphore_query(host_signal_semaphore, &value));
- EXPECT_EQ(1ull, value);
- IREE_ASSERT_OK(iree_hal_semaphore_query(device_signal_semaphore, &value));
- EXPECT_EQ(0ull, value);
+ CheckSemaphoreValue(host_signal_semaphore, 1);
+ CheckSemaphoreValue(device_signal_semaphore, 0);
// Signal and wait for the device to complete too.
- IREE_ASSERT_OK(iree_hal_semaphore_signal(device_wait_semaphore, 1ull));
+ IREE_ASSERT_OK(iree_hal_semaphore_signal(device_wait_semaphore, 1));
IREE_ASSERT_OK(
- iree_hal_semaphore_wait(device_signal_semaphore, 1ull,
+ iree_hal_semaphore_wait(device_signal_semaphore, 1,
iree_make_deadline(IREE_TIME_INFINITE_FUTURE)));
iree_hal_command_buffer_release(command_buffer);
@@ -456,38 +363,20 @@
// The signaling relationship is
// command_buffer1 -> semaphore1 -> command_buffer2 -> semaphore2
- // Create first command buffer.
- iree_hal_command_buffer_t* command_buffer1 = NULL;
- IREE_ASSERT_OK(iree_hal_command_buffer_create(
- device_, IREE_HAL_COMMAND_BUFFER_MODE_ONE_SHOT,
- IREE_HAL_COMMAND_CATEGORY_DISPATCH, IREE_HAL_QUEUE_AFFINITY_ANY,
- /*binding_capacity=*/0, &command_buffer1));
- IREE_ASSERT_OK(iree_hal_command_buffer_begin(command_buffer1));
- IREE_ASSERT_OK(iree_hal_command_buffer_end(command_buffer1));
-
- // Create second command buffer.
- iree_hal_command_buffer_t* command_buffer2 = NULL;
- IREE_ASSERT_OK(iree_hal_command_buffer_create(
- device_, IREE_HAL_COMMAND_BUFFER_MODE_ONE_SHOT,
- IREE_HAL_COMMAND_CATEGORY_DISPATCH, IREE_HAL_QUEUE_AFFINITY_ANY,
- /*binding_capacity=*/0, &command_buffer2));
- IREE_ASSERT_OK(iree_hal_command_buffer_begin(command_buffer2));
- IREE_ASSERT_OK(iree_hal_command_buffer_end(command_buffer2));
+ iree_hal_command_buffer_t* command_buffer1 = CreateEmptyCommandBuffer();
+ iree_hal_command_buffer_t* command_buffer2 = CreateEmptyCommandBuffer();
// Semaphore to signal when command_buffer1 is done and to wait to
// start executing command_buffer2.
- iree_hal_semaphore_t* semaphore1 = NULL;
- IREE_ASSERT_OK(iree_hal_semaphore_create(device_, 0, &semaphore1));
- uint64_t semaphore1_value = 1;
+ iree_hal_semaphore_t* semaphore1 = CreateSemaphore();
+ uint64_t semaphore_signal_value = 1;
iree_hal_semaphore_list_t semaphore1_list = {/*count=*/1, &semaphore1,
- &semaphore1_value};
+ &semaphore_signal_value};
// Semaphore to signal when all work (command_buffer2) is done.
- iree_hal_semaphore_t* semaphore2 = NULL;
- IREE_ASSERT_OK(iree_hal_semaphore_create(device_, 0, &semaphore2));
- uint64_t semaphore2_value = 1;
+ iree_hal_semaphore_t* semaphore2 = CreateSemaphore();
iree_hal_semaphore_list_t semaphore2_list = {/*count=*/1, &semaphore2,
- &semaphore2_value};
+ &semaphore_signal_value};
// Dispatch the second command buffer.
IREE_ASSERT_OK(iree_hal_device_queue_execute(
@@ -497,16 +386,8 @@
// Make sure that the intermediate and second semaphores have not advanced
// since only command_buffer2 is queued.
- uint64_t semaphore2_value_after_queueing_command_buffer2;
- IREE_ASSERT_OK(iree_hal_semaphore_query(
- semaphore2, &semaphore2_value_after_queueing_command_buffer2));
- EXPECT_EQ(static_cast<uint64_t>(0),
- semaphore2_value_after_queueing_command_buffer2);
- uint64_t semaphore1_value_after_queueing_command_buffer2;
- IREE_ASSERT_OK(iree_hal_semaphore_query(
- semaphore1, &semaphore1_value_after_queueing_command_buffer2));
- EXPECT_EQ(static_cast<uint64_t>(0),
- semaphore1_value_after_queueing_command_buffer2);
+ CheckSemaphoreValue(semaphore1, 0);
+ CheckSemaphoreValue(semaphore2, 0);
// Submit the first command buffer.
iree_hal_semaphore_list_t command_buffer1_wait_semaphore_list = {
@@ -518,25 +399,15 @@
// Wait on the intermediate semaphore and check its value.
IREE_ASSERT_OK(
- iree_hal_semaphore_wait(semaphore1, semaphore1_value,
+ iree_hal_semaphore_wait(semaphore1, semaphore_signal_value,
iree_make_deadline(IREE_TIME_INFINITE_FUTURE)));
- uint64_t semaphore1_value_after_command_buffer1_has_done_executing;
- IREE_ASSERT_OK(iree_hal_semaphore_query(
- semaphore1, &semaphore1_value_after_command_buffer1_has_done_executing));
- uint64_t expected_semaphore1_value = semaphore1_value;
- EXPECT_EQ(semaphore1_value,
- semaphore1_value_after_command_buffer1_has_done_executing);
+ CheckSemaphoreValue(semaphore1, semaphore_signal_value);
// Wait on the second semaphore and check its value.
IREE_ASSERT_OK(
- iree_hal_semaphore_wait(semaphore2, semaphore2_value,
+ iree_hal_semaphore_wait(semaphore2, semaphore_signal_value,
iree_make_deadline(IREE_TIME_INFINITE_FUTURE)));
- uint64_t semaphore2_value_after_command_buffer2_has_done_executing;
- IREE_ASSERT_OK(iree_hal_semaphore_query(
- semaphore2, &semaphore2_value_after_command_buffer2_has_done_executing));
- uint64_t expected_semaphore2_value = semaphore2_value;
- EXPECT_EQ(expected_semaphore2_value,
- semaphore2_value_after_command_buffer2_has_done_executing);
+ CheckSemaphoreValue(semaphore2, semaphore_signal_value);
iree_hal_command_buffer_release(command_buffer1);
iree_hal_command_buffer_release(command_buffer2);