13
13
14
14
#include " ../device.hpp"
15
15
16
+ typedef struct _zex_intel_queue_copy_operations_offload_hint_exp_desc_t {
17
+ ze_structure_type_t stype;
18
+ const void *pNext;
19
+ ze_bool_t copyOffloadEnabled;
20
+ } zex_intel_queue_copy_operations_offload_hint_exp_desc_t ;
21
+
22
+ #define ZEX_INTEL_STRUCTURE_TYPE_QUEUE_COPY_OPERATIONS_OFFLOAD_HINT_EXP_PROPERTIES \
23
+ (ze_structure_type_t )0x0003001B
24
+
25
+ template <>
26
+ ze_structure_type_t
27
+ getZeStructureType<zex_intel_queue_copy_operations_offload_hint_exp_desc_t >() {
28
+ return ZEX_INTEL_STRUCTURE_TYPE_QUEUE_COPY_OPERATIONS_OFFLOAD_HINT_EXP_PROPERTIES;
29
+ }
30
+
16
31
bool v2::immediate_command_list_descriptor_t ::operator ==(
17
32
const immediate_command_list_descriptor_t &rhs) const {
18
33
return ZeDevice == rhs.ZeDevice && IsInOrder == rhs.IsInOrder &&
@@ -45,6 +60,10 @@ command_list_cache_t::command_list_cache_t(ze_context_handle_t ZeContext)
45
60
46
61
raii::ze_command_list_handle_t
47
62
command_list_cache_t::createCommandList (const command_list_descriptor_t &desc) {
63
+ ZeStruct<zex_intel_queue_copy_operations_offload_hint_exp_desc_t > offloadDesc;
64
+ offloadDesc.copyOffloadEnabled =
65
+ std::visit ([](auto &&arg) { return arg.CopyOffloadEnabled ; }, desc);
66
+
48
67
if (auto ImmCmdDesc =
49
68
std::get_if<immediate_command_list_descriptor_t >(&desc)) {
50
69
ze_command_list_handle_t ZeCommandList;
@@ -58,6 +77,7 @@ command_list_cache_t::createCommandList(const command_list_descriptor_t &desc) {
58
77
QueueDesc.flags |= ZE_COMMAND_QUEUE_FLAG_EXPLICIT_ONLY;
59
78
QueueDesc.index = ImmCmdDesc->Index .value ();
60
79
}
80
+ QueueDesc.pNext = &offloadDesc;
61
81
ZE2UR_CALL_THROWS (
62
82
zeCommandListCreateImmediate,
63
83
(ZeContext, ImmCmdDesc->ZeDevice , &QueueDesc, &ZeCommandList));
@@ -68,6 +88,7 @@ command_list_cache_t::createCommandList(const command_list_descriptor_t &desc) {
68
88
CmdListDesc.flags =
69
89
RegCmdDesc.IsInOrder ? ZE_COMMAND_LIST_FLAG_IN_ORDER : 0 ;
70
90
CmdListDesc.commandQueueGroupOrdinal = RegCmdDesc.Ordinal ;
91
+ CmdListDesc.pNext = &offloadDesc;
71
92
72
93
ze_command_list_handle_t ZeCommandList;
73
94
ZE2UR_CALL_THROWS (zeCommandListCreate, (ZeContext, RegCmdDesc.ZeDevice ,
@@ -78,13 +99,14 @@ command_list_cache_t::createCommandList(const command_list_descriptor_t &desc) {
78
99
79
100
raii::command_list_unique_handle command_list_cache_t::getImmediateCommandList (
80
101
ze_device_handle_t ZeDevice, bool IsInOrder, uint32_t Ordinal,
81
- ze_command_queue_mode_t Mode, ze_command_queue_priority_t Priority ,
82
- std::optional<uint32_t > Index) {
102
+ bool CopyOffloadEnable, ze_command_queue_mode_t Mode ,
103
+ ze_command_queue_priority_t Priority, std::optional<uint32_t > Index) {
83
104
TRACK_SCOPE_LATENCY (" command_list_cache_t::getImmediateCommandList" );
84
105
85
106
immediate_command_list_descriptor_t Desc;
86
107
Desc.ZeDevice = ZeDevice;
87
108
Desc.Ordinal = Ordinal;
109
+ Desc.CopyOffloadEnabled = CopyOffloadEnable;
88
110
Desc.IsInOrder = IsInOrder;
89
111
Desc.Mode = Mode;
90
112
Desc.Priority = Priority;
@@ -99,13 +121,15 @@ raii::command_list_unique_handle command_list_cache_t::getImmediateCommandList(
99
121
100
122
raii::command_list_unique_handle
101
123
command_list_cache_t::getRegularCommandList (ze_device_handle_t ZeDevice,
102
- bool IsInOrder, uint32_t Ordinal) {
124
+ bool IsInOrder, uint32_t Ordinal,
125
+ bool CopyOffloadEnable) {
103
126
TRACK_SCOPE_LATENCY (" command_list_cache_t::getRegularCommandList" );
104
127
105
128
regular_command_list_descriptor_t Desc;
106
129
Desc.ZeDevice = ZeDevice;
107
130
Desc.IsInOrder = IsInOrder;
108
131
Desc.Ordinal = Ordinal;
132
+ Desc.CopyOffloadEnabled = CopyOffloadEnable;
109
133
110
134
auto [CommandList, _] = getCommandList (Desc).release ();
111
135
0 commit comments