22
33#include < gtest/gtest.h>
44
5+ #include < detail/event_impl.hpp>
56#include < sycl/detail/core.hpp>
67#include < sycl/ext/oneapi/bindless_images.hpp>
78#include < sycl/ext/oneapi/bindless_images_interop.hpp>
@@ -26,9 +27,9 @@ urBindlessImagesWaitExternalSemaphoreExp_replace(void *pParams) {
2627 if (urBindlessImagesWaitExternalSemaphoreExp_expectHasWaitValue) {
2728 EXPECT_EQ (*Params.pwaitValue , WaitValue);
2829 }
29- EXPECT_EQ (*Params.pphEvent , nullptr );
3030 EXPECT_EQ (*Params.pnumEventsInWaitList , uint32_t {0 });
31- EXPECT_NE (*Params.pphEventWaitList , nullptr );
31+ EXPECT_EQ (*Params.pphEventWaitList , nullptr );
32+ EXPECT_NE (*Params.pphEvent , nullptr );
3233 return UR_RESULT_SUCCESS;
3334}
3435
@@ -43,7 +44,6 @@ urBindlessImagesSignalExternalSemaphoreExp_replace(void *pParams) {
4344 ur_bindless_images_signal_external_semaphore_exp_params_t Params =
4445 *reinterpret_cast <
4546 ur_bindless_images_signal_external_semaphore_exp_params_t *>(pParams);
46- EXPECT_EQ (*Params.pphEvent , nullptr );
4747 EXPECT_EQ (*Params.phasSignalValue ,
4848 urBindlessImagesSignalExternalSemaphoreExp_expectHasSignalValue);
4949 if (urBindlessImagesSignalExternalSemaphoreExp_expectHasSignalValue) {
@@ -102,12 +102,24 @@ TEST(BindlessImagesExtensionTests, ExternalSemaphoreSignal) {
102102
103103 // Create a dummy external semaphore and set the raw handle to some dummy.
104104 // The mock implementation should never access the handle, so this is safe.
105- int DummyInt = 0 ;
105+ int DummyInt1 = 0 , DummyInt2 = 0 ;
106106 syclexp::external_semaphore DummySemaphore{};
107107 DummySemaphore.raw_handle =
108- reinterpret_cast <ur_exp_external_semaphore_handle_t >(&DummyInt);
109-
110- std::vector<sycl::event> DummyEventList (2 );
108+ reinterpret_cast <ur_exp_external_semaphore_handle_t >(&DummyInt1);
109+
110+ // We create dummy events with dummy UR handles to make the runtime think we
111+ // pass actual device events.
112+ auto DummyEventImpl1 = sycl::detail::event_impl::create_device_event (
113+ *sycl::detail::getSyclObjImpl (Q));
114+ auto DummyEventImpl2 = sycl::detail::event_impl::create_device_event (
115+ *sycl::detail::getSyclObjImpl (Q));
116+ DummyEventImpl1->setHandle (reinterpret_cast <ur_event_handle_t >(&DummyInt1));
117+ DummyEventImpl2->setHandle (reinterpret_cast <ur_event_handle_t >(&DummyInt2));
118+ sycl::event DummyEvent1 =
119+ sycl::detail::createSyclObjFromImpl<sycl::event>(DummyEventImpl1);
120+ sycl::event DummyEvent2 =
121+ sycl::detail::createSyclObjFromImpl<sycl::event>(DummyEventImpl2);
122+ std::vector<sycl::event> DummyEventList{DummyEvent1, DummyEvent2};
111123
112124 DummySemaphore.handle_type =
113125 syclexp::external_semaphore_handle_type::opaque_fd;
@@ -119,7 +131,7 @@ TEST(BindlessImagesExtensionTests, ExternalSemaphoreSignal) {
119131
120132 urBindlessImagesSignalExternalSemaphoreExp_expectHasSignalValue = false ;
121133 urBindlessImagesSignalExternalSemaphoreExp_expectedNumWaitEvents = 1 ;
122- Q.ext_oneapi_signal_external_semaphore (DummySemaphore, sycl::event{} );
134+ Q.ext_oneapi_signal_external_semaphore (DummySemaphore, DummyEvent1 );
123135 EXPECT_EQ (urBindlessImagesSignalExternalSemaphoreExp_counter, 2 );
124136
125137 urBindlessImagesSignalExternalSemaphoreExp_expectHasSignalValue = false ;
@@ -138,7 +150,7 @@ TEST(BindlessImagesExtensionTests, ExternalSemaphoreSignal) {
138150 urBindlessImagesSignalExternalSemaphoreExp_expectHasSignalValue = true ;
139151 urBindlessImagesSignalExternalSemaphoreExp_expectedNumWaitEvents = 1 ;
140152 Q.ext_oneapi_signal_external_semaphore (DummySemaphore, SignalValue,
141- sycl::event{} );
153+ DummyEvent1 );
142154 EXPECT_EQ (urBindlessImagesSignalExternalSemaphoreExp_counter, 5 );
143155
144156 urBindlessImagesSignalExternalSemaphoreExp_expectHasSignalValue = true ;
0 commit comments