Skip to content

Commit 0b34ed6

Browse files
fix: disable copy offload for dcFlush platforms
Signed-off-by: Bartosz Dunajski <[email protected]>
1 parent 24ed89e commit 0b34ed6

File tree

2 files changed

+45
-19
lines changed

2 files changed

+45
-19
lines changed

level_zero/core/source/cmdlist/cmdlist_imp.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -209,8 +209,9 @@ CommandList *CommandList::createImmediate(uint32_t productFamily, Device *device
209209
commandList->isSyncModeQueue |= true;
210210
}
211211

212+
auto &productHelper = device->getProductHelper();
213+
212214
if (!internalUsage) {
213-
auto &productHelper = device->getProductHelper();
214215
commandList->isFlushTaskSubmissionEnabled = gfxCoreHelper.isPlatformFlushTaskEnabled(productHelper);
215216
if (NEO::debugManager.flags.EnableFlushTaskSubmission.get() != -1) {
216217
commandList->isFlushTaskSubmissionEnabled = !!NEO::debugManager.flags.EnableFlushTaskSubmission.get();
@@ -258,9 +259,11 @@ CommandList *CommandList::createImmediate(uint32_t productFamily, Device *device
258259

259260
commandList->isBcsSplitNeeded = deviceImp->bcsSplit.setupDevice(productFamily, internalUsage, &cmdQdesc, csr);
260261

261-
commandList->copyThroughLockedPtrEnabled = gfxCoreHelper.copyThroughLockedPtrEnabled(hwInfo, device->getProductHelper());
262+
commandList->copyThroughLockedPtrEnabled = gfxCoreHelper.copyThroughLockedPtrEnabled(hwInfo, productHelper);
263+
264+
const bool cmdListSupportsCopyOffload = !commandList->isCopyOnly(false) && commandList->isInOrderExecutionEnabled() && !productHelper.isDcFlushAllowed();
262265

263-
if ((NEO::debugManager.flags.ForceCopyOperationOffloadForComputeCmdList.get() == 1 || queueProperties.copyOffloadHint) && !commandList->isCopyOnly(false) && commandList->isInOrderExecutionEnabled()) {
266+
if ((NEO::debugManager.flags.ForceCopyOperationOffloadForComputeCmdList.get() == 1 || queueProperties.copyOffloadHint) && cmdListSupportsCopyOffload) {
264267
commandList->enableCopyOperationOffload(productFamily, device, desc);
265268
}
266269

level_zero/core/test/unit_tests/sources/cmdlist/test_in_order_cmdlist_2.cpp

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -56,17 +56,26 @@ HWTEST2_F(CopyOffloadInOrderTests, givenDebugFlagSetWhenCreatingCmdListThenEnabl
5656
cmdQueueDesc.flags = ZE_COMMAND_QUEUE_FLAG_IN_ORDER;
5757
cmdQueueDesc.mode = ZE_COMMAND_QUEUE_MODE_ASYNCHRONOUS;
5858

59+
auto dcFlushRequired = device->getProductHelper().isDcFlushAllowed();
60+
5961
{
6062
EXPECT_EQ(ZE_RESULT_SUCCESS, zeCommandListCreateImmediate(context, device, &cmdQueueDesc, &cmdListHandle));
6163
auto cmdList = static_cast<WhiteBox<L0::CommandListCoreFamilyImmediate<gfxCoreFamily>> *>(CommandList::fromHandle(cmdListHandle));
62-
EXPECT_TRUE(cmdList->copyOperationOffloadEnabled);
63-
EXPECT_NE(nullptr, cmdList->cmdQImmediateCopyOffload);
6464

65-
auto queue = static_cast<WhiteBox<L0::CommandQueue> *>(cmdList->cmdQImmediateCopyOffload);
66-
EXPECT_EQ(cmdQueueDesc.priority, queue->desc.priority);
67-
EXPECT_EQ(cmdQueueDesc.mode, queue->desc.mode);
68-
EXPECT_TRUE(queue->peekIsCopyOnlyCommandQueue());
69-
EXPECT_TRUE(NEO::EngineHelpers::isBcs(queue->getCsr()->getOsContext().getEngineType()));
65+
if (dcFlushRequired) {
66+
EXPECT_FALSE(cmdList->copyOperationOffloadEnabled);
67+
EXPECT_EQ(nullptr, cmdList->cmdQImmediateCopyOffload);
68+
} else {
69+
70+
EXPECT_TRUE(cmdList->copyOperationOffloadEnabled);
71+
EXPECT_NE(nullptr, cmdList->cmdQImmediateCopyOffload);
72+
73+
auto queue = static_cast<WhiteBox<L0::CommandQueue> *>(cmdList->cmdQImmediateCopyOffload);
74+
EXPECT_EQ(cmdQueueDesc.priority, queue->desc.priority);
75+
EXPECT_EQ(cmdQueueDesc.mode, queue->desc.mode);
76+
EXPECT_TRUE(queue->peekIsCopyOnlyCommandQueue());
77+
EXPECT_TRUE(NEO::EngineHelpers::isBcs(queue->getCsr()->getOsContext().getEngineType()));
78+
}
7079

7180
zeCommandListDestroy(cmdListHandle);
7281
}
@@ -77,14 +86,20 @@ HWTEST2_F(CopyOffloadInOrderTests, givenDebugFlagSetWhenCreatingCmdListThenEnabl
7786

7887
EXPECT_EQ(ZE_RESULT_SUCCESS, zeCommandListCreateImmediate(context, device, &cmdQueueDesc, &cmdListHandle));
7988
auto cmdList = static_cast<WhiteBox<L0::CommandListCoreFamilyImmediate<gfxCoreFamily>> *>(CommandList::fromHandle(cmdListHandle));
80-
EXPECT_TRUE(cmdList->copyOperationOffloadEnabled);
81-
EXPECT_NE(nullptr, cmdList->cmdQImmediateCopyOffload);
8289

83-
auto queue = static_cast<WhiteBox<L0::CommandQueue> *>(cmdList->cmdQImmediateCopyOffload);
84-
EXPECT_EQ(cmdQueueDesc.priority, queue->desc.priority);
85-
EXPECT_EQ(cmdQueueDesc.mode, queue->desc.mode);
86-
EXPECT_TRUE(queue->peekIsCopyOnlyCommandQueue());
87-
EXPECT_TRUE(NEO::EngineHelpers::isBcs(queue->getCsr()->getOsContext().getEngineType()));
90+
if (dcFlushRequired) {
91+
EXPECT_FALSE(cmdList->copyOperationOffloadEnabled);
92+
EXPECT_EQ(nullptr, cmdList->cmdQImmediateCopyOffload);
93+
} else {
94+
EXPECT_TRUE(cmdList->copyOperationOffloadEnabled);
95+
EXPECT_NE(nullptr, cmdList->cmdQImmediateCopyOffload);
96+
97+
auto queue = static_cast<WhiteBox<L0::CommandQueue> *>(cmdList->cmdQImmediateCopyOffload);
98+
EXPECT_EQ(cmdQueueDesc.priority, queue->desc.priority);
99+
EXPECT_EQ(cmdQueueDesc.mode, queue->desc.mode);
100+
EXPECT_TRUE(queue->peekIsCopyOnlyCommandQueue());
101+
EXPECT_TRUE(NEO::EngineHelpers::isBcs(queue->getCsr()->getOsContext().getEngineType()));
102+
}
88103

89104
zeCommandListDestroy(cmdListHandle);
90105

@@ -145,11 +160,19 @@ HWTEST2_F(CopyOffloadInOrderTests, givenQueueDescriptorWhenCreatingCmdListThenEn
145160

146161
cmdQueueDesc.pNext = &copyOffloadDesc;
147162

163+
auto dcFlushRequired = device->getProductHelper().isDcFlushAllowed();
164+
148165
{
149166
EXPECT_EQ(ZE_RESULT_SUCCESS, zeCommandListCreateImmediate(context, device, &cmdQueueDesc, &cmdListHandle));
150167
auto cmdList = static_cast<WhiteBox<L0::CommandListCoreFamilyImmediate<gfxCoreFamily>> *>(CommandList::fromHandle(cmdListHandle));
151-
EXPECT_TRUE(cmdList->copyOperationOffloadEnabled);
152-
EXPECT_NE(nullptr, cmdList->cmdQImmediateCopyOffload);
168+
169+
if (dcFlushRequired) {
170+
EXPECT_FALSE(cmdList->copyOperationOffloadEnabled);
171+
EXPECT_EQ(nullptr, cmdList->cmdQImmediateCopyOffload);
172+
} else {
173+
EXPECT_TRUE(cmdList->copyOperationOffloadEnabled);
174+
EXPECT_NE(nullptr, cmdList->cmdQImmediateCopyOffload);
175+
}
153176

154177
zeCommandListDestroy(cmdListHandle);
155178
}

0 commit comments

Comments
 (0)