mirror of
https://github.com/KhronosGroup/OpenCL-CTS.git
synced 2026-03-19 06:09:01 +00:00
Refactor external semaphore scaffolding (#2300)
Remove the `CREATE_OPENCL_SEMAPHORE` macro and use derived class instantiations of the `clExternalSemaphore` class, rather than base pointers to derived class objects. Remove the default argument for `queryParamName` in `check_external_semaphore_handle_type()`. Move `check_external_semaphore_handle_type()` checks to constructors of `clExternalImportableSemaphore` and `clExternalExportableSemaphore`, rather than manually making the check before creating an external semaphore. --------- Signed-off-by: Gorazd Sumkovski <gorazd.sumkovski@arm.com> Co-authored-by: Kévin Petit <kpet@free.fr> Co-authored-by: Kevin Petit <kevin.petit@arm.com>
This commit is contained in:
committed by
GitHub
parent
4ce3d8968a
commit
33846e6673
@@ -361,10 +361,8 @@ int test_external_semaphores_simple_1(cl_device_id device, cl_context context,
|
||||
VulkanSemaphore vkVk2CLSemaphore(vkDevice,
|
||||
vkExternalSemaphoreHandleType);
|
||||
|
||||
clExternalSemaphore *raw_sema_ext = NULL;
|
||||
CREATE_OPENCL_SEMAPHORE(raw_sema_ext, vkVk2CLSemaphore, context,
|
||||
vkExternalSemaphoreHandleType, device, true);
|
||||
std::unique_ptr<clExternalSemaphore> sema_ext(raw_sema_ext);
|
||||
auto sema_ext = clExternalImportableSemaphore(
|
||||
vkVk2CLSemaphore, context, vkExternalSemaphoreHandleType, device);
|
||||
|
||||
cl_int err = CL_SUCCESS;
|
||||
|
||||
@@ -375,14 +373,13 @@ int test_external_semaphores_simple_1(cl_device_id device, cl_context context,
|
||||
|
||||
// Signal semaphore
|
||||
clEventWrapper signal_event;
|
||||
err =
|
||||
clEnqueueSignalSemaphoresKHR(queue, 1, &sema_ext->getCLSemaphore(),
|
||||
nullptr, 0, nullptr, &signal_event);
|
||||
err = clEnqueueSignalSemaphoresKHR(queue, 1, &sema_ext.getCLSemaphore(),
|
||||
nullptr, 0, nullptr, &signal_event);
|
||||
test_error(err, "Could not signal semaphore");
|
||||
|
||||
// Wait semaphore
|
||||
clEventWrapper wait_event;
|
||||
err = clEnqueueWaitSemaphoresKHR(queue, 1, &sema_ext->getCLSemaphore(),
|
||||
err = clEnqueueWaitSemaphoresKHR(queue, 1, &sema_ext.getCLSemaphore(),
|
||||
nullptr, 0, nullptr, &wait_event);
|
||||
test_error(err, "Could not wait semaphore");
|
||||
|
||||
@@ -435,10 +432,8 @@ int test_external_semaphores_simple_2(cl_device_id device, cl_context context,
|
||||
VulkanSemaphore vkVk2CLSemaphore(vkDevice,
|
||||
vkExternalSemaphoreHandleType);
|
||||
|
||||
clExternalSemaphore *raw_sema_ext = NULL;
|
||||
CREATE_OPENCL_SEMAPHORE(raw_sema_ext, vkVk2CLSemaphore, context,
|
||||
vkExternalSemaphoreHandleType, device, true);
|
||||
std::unique_ptr<clExternalSemaphore> sema_ext(raw_sema_ext);
|
||||
auto sema_ext = clExternalImportableSemaphore(
|
||||
vkVk2CLSemaphore, context, vkExternalSemaphoreHandleType, device);
|
||||
|
||||
cl_int err = CL_SUCCESS;
|
||||
|
||||
@@ -465,14 +460,13 @@ int test_external_semaphores_simple_2(cl_device_id device, cl_context context,
|
||||
|
||||
// Signal semaphore
|
||||
clEventWrapper signal_event;
|
||||
err =
|
||||
clEnqueueSignalSemaphoresKHR(queue, 1, &sema_ext->getCLSemaphore(),
|
||||
nullptr, 0, nullptr, &signal_event);
|
||||
err = clEnqueueSignalSemaphoresKHR(queue, 1, &sema_ext.getCLSemaphore(),
|
||||
nullptr, 0, nullptr, &signal_event);
|
||||
test_error(err, "Could not signal semaphore");
|
||||
|
||||
// Wait semaphore
|
||||
clEventWrapper wait_event;
|
||||
err = clEnqueueWaitSemaphoresKHR(queue, 1, &sema_ext->getCLSemaphore(),
|
||||
err = clEnqueueWaitSemaphoresKHR(queue, 1, &sema_ext.getCLSemaphore(),
|
||||
nullptr, 0, nullptr, &wait_event);
|
||||
test_error(err, "Could not wait semaphore");
|
||||
|
||||
@@ -542,10 +536,8 @@ int test_external_semaphores_reuse(cl_device_id device, cl_context context,
|
||||
VulkanSemaphore vkVk2CLSemaphore(vkDevice,
|
||||
vkExternalSemaphoreHandleType);
|
||||
|
||||
clExternalSemaphore *raw_sema_ext = NULL;
|
||||
CREATE_OPENCL_SEMAPHORE(raw_sema_ext, vkVk2CLSemaphore, context,
|
||||
vkExternalSemaphoreHandleType, device, true);
|
||||
std::unique_ptr<clExternalSemaphore> sema_ext(raw_sema_ext);
|
||||
auto sema_ext = clExternalImportableSemaphore(
|
||||
vkVk2CLSemaphore, context, vkExternalSemaphoreHandleType, device);
|
||||
|
||||
cl_int err = CL_SUCCESS;
|
||||
|
||||
@@ -571,9 +563,9 @@ int test_external_semaphores_reuse(cl_device_id device, cl_context context,
|
||||
test_error(err, "Unable to enqueue task_1");
|
||||
|
||||
// Signal semaphore (dependency on task_1)
|
||||
err = clEnqueueSignalSemaphoresKHR(
|
||||
queue, 1, &sema_ext->getCLSemaphore(), nullptr, 1, &task_events[0],
|
||||
&signal_events[0]);
|
||||
err = clEnqueueSignalSemaphoresKHR(queue, 1, &sema_ext.getCLSemaphore(),
|
||||
nullptr, 1, &task_events[0],
|
||||
&signal_events[0]);
|
||||
test_error(err, "Could not signal semaphore");
|
||||
|
||||
// In a loop
|
||||
@@ -582,7 +574,7 @@ int test_external_semaphores_reuse(cl_device_id device, cl_context context,
|
||||
{
|
||||
// Wait semaphore
|
||||
err = clEnqueueWaitSemaphoresKHR(
|
||||
queue, 1, &sema_ext->getCLSemaphore(), nullptr, 0, nullptr,
|
||||
queue, 1, &sema_ext.getCLSemaphore(), nullptr, 0, nullptr,
|
||||
&wait_events[loop - 1]);
|
||||
test_error(err, "Could not wait semaphore");
|
||||
|
||||
@@ -597,13 +589,13 @@ int test_external_semaphores_reuse(cl_device_id device, cl_context context,
|
||||
|
||||
// Signal semaphore (dependency on task_loop)
|
||||
err = clEnqueueSignalSemaphoresKHR(
|
||||
queue, 1, &sema_ext->getCLSemaphore(), nullptr, 1,
|
||||
queue, 1, &sema_ext.getCLSemaphore(), nullptr, 1,
|
||||
&task_events[loop], &signal_events[loop]);
|
||||
test_error(err, "Could not signal semaphore");
|
||||
}
|
||||
|
||||
// Wait semaphore
|
||||
err = clEnqueueWaitSemaphoresKHR(queue, 1, &sema_ext->getCLSemaphore(),
|
||||
err = clEnqueueWaitSemaphoresKHR(queue, 1, &sema_ext.getCLSemaphore(),
|
||||
nullptr, 0, nullptr,
|
||||
&wait_events[loop - 1]);
|
||||
test_error(err, "Could not wait semaphore");
|
||||
@@ -662,25 +654,22 @@ static int external_semaphore_cross_queue_helper(cl_device_id device,
|
||||
VulkanSemaphore vkVk2CLSemaphore(vkDevice,
|
||||
vkExternalSemaphoreHandleType);
|
||||
|
||||
clExternalSemaphore *raw_sema_ext = NULL;
|
||||
CREATE_OPENCL_SEMAPHORE(raw_sema_ext, vkVk2CLSemaphore, context,
|
||||
vkExternalSemaphoreHandleType, device, true);
|
||||
std::unique_ptr<clExternalSemaphore> sema_ext(raw_sema_ext);
|
||||
auto sema_ext = clExternalImportableSemaphore(
|
||||
vkVk2CLSemaphore, context, vkExternalSemaphoreHandleType, device);
|
||||
|
||||
cl_int err = CL_SUCCESS;
|
||||
|
||||
// Signal semaphore on queue_1
|
||||
clEventWrapper signal_event;
|
||||
err = clEnqueueSignalSemaphoresKHR(queue_1, 1,
|
||||
&sema_ext->getCLSemaphore(), nullptr,
|
||||
0, nullptr, &signal_event);
|
||||
err =
|
||||
clEnqueueSignalSemaphoresKHR(queue_1, 1, &sema_ext.getCLSemaphore(),
|
||||
nullptr, 0, nullptr, &signal_event);
|
||||
test_error(err, "Could not signal semaphore");
|
||||
|
||||
// Wait semaphore on queue_2
|
||||
clEventWrapper wait_event;
|
||||
err =
|
||||
clEnqueueWaitSemaphoresKHR(queue_2, 1, &sema_ext->getCLSemaphore(),
|
||||
nullptr, 0, nullptr, &wait_event);
|
||||
err = clEnqueueWaitSemaphoresKHR(queue_2, 1, &sema_ext.getCLSemaphore(),
|
||||
nullptr, 0, nullptr, &wait_event);
|
||||
test_error(err, "Could not wait semaphore");
|
||||
|
||||
// Finish queue_1 and queue_2
|
||||
@@ -786,15 +775,11 @@ int test_external_semaphores_cross_queues_io2(cl_device_id device,
|
||||
VulkanSemaphore vkVk2CLSemaphore(vkDevice,
|
||||
vkExternalSemaphoreHandleType);
|
||||
|
||||
clExternalSemaphore *raw_sema_ext_1 = NULL;
|
||||
CREATE_OPENCL_SEMAPHORE(raw_sema_ext_1, vkVk2CLSemaphore, context,
|
||||
vkExternalSemaphoreHandleType, device, true);
|
||||
std::unique_ptr<clExternalSemaphore> sema_ext_1(raw_sema_ext_1);
|
||||
auto sema_ext_1 = clExternalImportableSemaphore(
|
||||
vkVk2CLSemaphore, context, vkExternalSemaphoreHandleType, device);
|
||||
|
||||
clExternalSemaphore *raw_sema_ext_2 = NULL;
|
||||
CREATE_OPENCL_SEMAPHORE(raw_sema_ext_2, vkVk2CLSemaphore, context2,
|
||||
vkExternalSemaphoreHandleType, device, true);
|
||||
std::unique_ptr<clExternalSemaphore> sema_ext_2(raw_sema_ext_2);
|
||||
auto sema_ext_2 = clExternalImportableSemaphore(
|
||||
vkVk2CLSemaphore, context2, vkExternalSemaphoreHandleType, device);
|
||||
|
||||
clCommandQueueWrapper queue1 =
|
||||
clCreateCommandQueue(context, device, 0, &err);
|
||||
@@ -807,28 +792,28 @@ int test_external_semaphores_cross_queues_io2(cl_device_id device,
|
||||
// Signal semaphore 1
|
||||
clEventWrapper signal_1_event;
|
||||
err = clEnqueueSignalSemaphoresKHR(
|
||||
queue1, 1, &sema_ext_1->getCLSemaphore(), nullptr, 0, nullptr,
|
||||
queue1, 1, &sema_ext_1.getCLSemaphore(), nullptr, 0, nullptr,
|
||||
&signal_1_event);
|
||||
test_error(err, "Could not signal semaphore");
|
||||
|
||||
// Wait semaphore 1
|
||||
clEventWrapper wait_1_event;
|
||||
err =
|
||||
clEnqueueWaitSemaphoresKHR(queue1, 1, &sema_ext_1->getCLSemaphore(),
|
||||
clEnqueueWaitSemaphoresKHR(queue1, 1, &sema_ext_1.getCLSemaphore(),
|
||||
nullptr, 0, nullptr, &wait_1_event);
|
||||
test_error(err, "Could not wait semaphore");
|
||||
|
||||
// Signal semaphore 2
|
||||
clEventWrapper signal_2_event;
|
||||
err = clEnqueueSignalSemaphoresKHR(
|
||||
queue2, 1, &sema_ext_2->getCLSemaphore(), nullptr, 0, nullptr,
|
||||
queue2, 1, &sema_ext_2.getCLSemaphore(), nullptr, 0, nullptr,
|
||||
&signal_2_event);
|
||||
test_error(err, "Could not signal semaphore");
|
||||
|
||||
// Wait semaphore 2
|
||||
clEventWrapper wait_2_event;
|
||||
err =
|
||||
clEnqueueWaitSemaphoresKHR(queue2, 1, &sema_ext_2->getCLSemaphore(),
|
||||
clEnqueueWaitSemaphoresKHR(queue2, 1, &sema_ext_2.getCLSemaphore(),
|
||||
nullptr, 0, nullptr, &wait_2_event);
|
||||
test_error(err, "Could not wait semaphore");
|
||||
|
||||
@@ -888,15 +873,11 @@ int test_external_semaphores_multi_signal(cl_device_id device,
|
||||
VulkanSemaphore vkVk2CLSemaphore2(vkDevice,
|
||||
vkExternalSemaphoreHandleType);
|
||||
|
||||
clExternalSemaphore *raw_sema_ext_1 = NULL;
|
||||
CREATE_OPENCL_SEMAPHORE(raw_sema_ext_1, vkVk2CLSemaphore1, context,
|
||||
vkExternalSemaphoreHandleType, device, true);
|
||||
std::unique_ptr<clExternalSemaphore> sema_ext_1(raw_sema_ext_1);
|
||||
auto sema_ext_1 = clExternalImportableSemaphore(
|
||||
vkVk2CLSemaphore1, context, vkExternalSemaphoreHandleType, device);
|
||||
|
||||
clExternalSemaphore *raw_sema_ext_2 = NULL;
|
||||
CREATE_OPENCL_SEMAPHORE(raw_sema_ext_2, vkVk2CLSemaphore2, context,
|
||||
vkExternalSemaphoreHandleType, device, true);
|
||||
std::unique_ptr<clExternalSemaphore> sema_ext_2(raw_sema_ext_2);
|
||||
auto sema_ext_2 = clExternalImportableSemaphore(
|
||||
vkVk2CLSemaphore2, context, vkExternalSemaphoreHandleType, device);
|
||||
|
||||
cl_int err = CL_SUCCESS;
|
||||
|
||||
@@ -907,24 +888,22 @@ int test_external_semaphores_multi_signal(cl_device_id device,
|
||||
|
||||
// Signal semaphore 1 and 2
|
||||
clEventWrapper signal_event;
|
||||
cl_semaphore_khr sema_list[] = { sema_ext_1->getCLSemaphore(),
|
||||
sema_ext_2->getCLSemaphore() };
|
||||
cl_semaphore_khr sema_list[] = { sema_ext_1.getCLSemaphore(),
|
||||
sema_ext_2.getCLSemaphore() };
|
||||
err = clEnqueueSignalSemaphoresKHR(queue, 2, sema_list, nullptr, 0,
|
||||
nullptr, &signal_event);
|
||||
test_error(err, "Could not signal semaphore");
|
||||
|
||||
// Wait semaphore 1
|
||||
clEventWrapper wait_1_event;
|
||||
err =
|
||||
clEnqueueWaitSemaphoresKHR(queue, 1, &sema_ext_1->getCLSemaphore(),
|
||||
nullptr, 0, nullptr, &wait_1_event);
|
||||
err = clEnqueueWaitSemaphoresKHR(queue, 1, &sema_ext_1.getCLSemaphore(),
|
||||
nullptr, 0, nullptr, &wait_1_event);
|
||||
test_error(err, "Could not wait semaphore");
|
||||
|
||||
// Wait semaphore 2
|
||||
clEventWrapper wait_2_event;
|
||||
err =
|
||||
clEnqueueWaitSemaphoresKHR(queue, 1, &sema_ext_2->getCLSemaphore(),
|
||||
nullptr, 0, nullptr, &wait_2_event);
|
||||
err = clEnqueueWaitSemaphoresKHR(queue, 1, &sema_ext_2.getCLSemaphore(),
|
||||
nullptr, 0, nullptr, &wait_2_event);
|
||||
test_error(err, "Could not wait semaphore");
|
||||
|
||||
// Finish
|
||||
@@ -978,15 +957,11 @@ int test_external_semaphores_multi_wait(cl_device_id device, cl_context context,
|
||||
VulkanSemaphore vkVk2CLSemaphore2(vkDevice,
|
||||
vkExternalSemaphoreHandleType);
|
||||
|
||||
clExternalSemaphore *raw_sema_ext_1 = NULL;
|
||||
CREATE_OPENCL_SEMAPHORE(raw_sema_ext_1, vkVk2CLSemaphore1, context,
|
||||
vkExternalSemaphoreHandleType, device, true);
|
||||
std::unique_ptr<clExternalSemaphore> sema_ext_1(raw_sema_ext_1);
|
||||
auto sema_ext_1 = clExternalImportableSemaphore(
|
||||
vkVk2CLSemaphore1, context, vkExternalSemaphoreHandleType, device);
|
||||
|
||||
clExternalSemaphore *raw_sema_ext_2 = NULL;
|
||||
CREATE_OPENCL_SEMAPHORE(raw_sema_ext_2, vkVk2CLSemaphore2, context,
|
||||
vkExternalSemaphoreHandleType, device, true);
|
||||
std::unique_ptr<clExternalSemaphore> sema_ext_2(raw_sema_ext_2);
|
||||
auto sema_ext_2 = clExternalImportableSemaphore(
|
||||
vkVk2CLSemaphore2, context, vkExternalSemaphoreHandleType, device);
|
||||
|
||||
cl_int err = CL_SUCCESS;
|
||||
|
||||
@@ -997,22 +972,22 @@ int test_external_semaphores_multi_wait(cl_device_id device, cl_context context,
|
||||
|
||||
// Signal semaphore 1
|
||||
clEventWrapper signal_1_event;
|
||||
err = clEnqueueSignalSemaphoresKHR(
|
||||
queue, 1, &sema_ext_1->getCLSemaphore(), nullptr, 0, nullptr,
|
||||
&signal_1_event);
|
||||
err =
|
||||
clEnqueueSignalSemaphoresKHR(queue, 1, &sema_ext_1.getCLSemaphore(),
|
||||
nullptr, 0, nullptr, &signal_1_event);
|
||||
test_error(err, "Could not signal semaphore");
|
||||
|
||||
// Signal semaphore 2
|
||||
clEventWrapper signal_2_event;
|
||||
err = clEnqueueSignalSemaphoresKHR(
|
||||
queue, 1, &sema_ext_2->getCLSemaphore(), nullptr, 0, nullptr,
|
||||
&signal_2_event);
|
||||
err =
|
||||
clEnqueueSignalSemaphoresKHR(queue, 1, &sema_ext_2.getCLSemaphore(),
|
||||
nullptr, 0, nullptr, &signal_2_event);
|
||||
test_error(err, "Could not signal semaphore");
|
||||
|
||||
// Wait semaphore 1 and 2
|
||||
clEventWrapper wait_event;
|
||||
cl_semaphore_khr sema_list[] = { sema_ext_1->getCLSemaphore(),
|
||||
sema_ext_2->getCLSemaphore() };
|
||||
cl_semaphore_khr sema_list[] = { sema_ext_1.getCLSemaphore(),
|
||||
sema_ext_2.getCLSemaphore() };
|
||||
err = clEnqueueWaitSemaphoresKHR(queue, 2, sema_list, nullptr, 0,
|
||||
nullptr, &wait_event);
|
||||
test_error(err, "Could not wait semaphore");
|
||||
|
||||
Reference in New Issue
Block a user