diff --git a/level_zero/api/driver_experimental/public/zex_event.cpp b/level_zero/api/driver_experimental/public/zex_event.cpp index f78ec1ee2f..c6e20cc729 100644 --- a/level_zero/api/driver_experimental/public/zex_event.cpp +++ b/level_zero/api/driver_experimental/public/zex_event.cpp @@ -15,6 +15,7 @@ #include "level_zero/core/source/device/device.h" #include "level_zero/core/source/driver/driver_handle.h" #include "level_zero/core/source/event/event.h" +#include "level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper.h" namespace L0 { @@ -69,7 +70,8 @@ zexCounterBasedEventCreate2(ze_context_handle_t hContext, ze_device_handle_t hDe }; ze_result_t result = ZE_RESULT_SUCCESS; - *phEvent = Event::create(eventDescriptor, device, result); + + *phEvent = device->getL0GfxCoreHelper().createStandaloneEvent(eventDescriptor, device, result); return result; } diff --git a/level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper.h b/level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper.h index 5c30f8052c..1c717154d1 100644 --- a/level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper.h +++ b/level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper.h @@ -54,6 +54,7 @@ constexpr int stallSamplingReportSubSliceAndFlagsOffset = 48; struct Event; struct Device; struct EventPool; +struct EventDescriptor; class L0GfxCoreHelper; using createL0GfxCoreHelperFunctionType = std::unique_ptr (*)(); @@ -79,6 +80,7 @@ class L0GfxCoreHelper : public NEO::ApiGfxCoreHelper { virtual void setAdditionalGroupProperty(ze_command_queue_group_properties_t &groupProperty, NEO::EngineGroupT &group) const = 0; virtual L0::Event *createEvent(L0::EventPool *eventPool, const ze_event_desc_t *desc, L0::Device *device) const = 0; + virtual L0::Event *createStandaloneEvent(const EventDescriptor &desc, L0::Device *device, ze_result_t &result) const = 0; virtual bool isResumeWARequired() = 0; virtual bool imageCompressionSupported(const NEO::HardwareInfo &hwInfo) const = 0; @@ -133,6 +135,7 @@ class L0GfxCoreHelperHw : public L0GfxCoreHelper { void setAdditionalGroupProperty(ze_command_queue_group_properties_t &groupProperty, NEO::EngineGroupT &group) const override; L0::Event *createEvent(L0::EventPool *eventPool, const ze_event_desc_t *desc, L0::Device *device) const override; + L0::Event *createStandaloneEvent(const EventDescriptor &desc, L0::Device *device, ze_result_t &result) const override; bool isResumeWARequired() override; bool imageCompressionSupported(const NEO::HardwareInfo &hwInfo) const override; diff --git a/level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper_base.inl b/level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper_base.inl index c5d3b759ab..0af0380ee7 100644 --- a/level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper_base.inl +++ b/level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper_base.inl @@ -34,6 +34,11 @@ L0::Event *L0GfxCoreHelperHw::createEvent(L0::EventPool *eventPool, cons return Event::create(eventPool, desc, device); } +template +L0::Event *L0GfxCoreHelperHw::createStandaloneEvent(const EventDescriptor &desc, L0::Device *device, ze_result_t &result) const { + return Event::create(desc, device, result); +} + template bool L0GfxCoreHelperHw::alwaysAllocateEventInLocalMem() const { return false; diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_in_order_cmdlist_1.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_in_order_cmdlist_1.cpp index 0fb832800d..8bb3b766f5 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_in_order_cmdlist_1.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_in_order_cmdlist_1.cpp @@ -4693,6 +4693,24 @@ HWTEST2_F(InOrderCmdListTests, givenCorrectInputParamsWhenCreatingCbEvent2ThenRe context->freeMem(hostAddress); } +HWTEST_F(InOrderCmdListTests, givenTimestmapEnabledWhenCreatingStandaloneCbEventThenSetCorrectPacketSize) { + zex_counter_based_event_desc_t counterBasedDesc = {ZEX_STRUCTURE_COUTER_BASED_EVENT_DESC}; // NOLINT(clang-analyzer-optin.core.EnumCastOutOfRange), NEO-12901 + counterBasedDesc.flags = ZEX_COUNTER_BASED_EVENT_FLAG_IMMEDIATE | ZEX_COUNTER_BASED_EVENT_FLAG_KERNEL_TIMESTAMP; + + ze_event_handle_t handle = nullptr; + + EXPECT_EQ(ZE_RESULT_SUCCESS, zexCounterBasedEventCreate2(context, device, &counterBasedDesc, &handle)); + + auto eventObj = Event::fromHandle(handle); + + using TagSizeT = typename FamilyType::TimestampPacketType; + constexpr auto singlePacetSize = NEO::TimestampPackets::getSinglePacketSize(); + + EXPECT_EQ(singlePacetSize, eventObj->getSinglePacketSize()); + + zeEventDestroy(handle); +} + HWTEST2_F(InOrderCmdListTests, givenStandaloneEventWhenCallingSynchronizeThenReturnCorrectValue, MatchAny) { uint64_t counterValue = 2; auto hostAddress = reinterpret_cast(allocHostMem(sizeof(uint64_t)));